创建Series
构造函数
pandas.Series(data,index,dtype,copy)
data 数据采取各种形式 ndarray,list,contants
index np.arrange(n)【索引值必须是唯一的和散列的,与数据的长度相同】
dtype 用于数据类型
copy 复制数据 默认为false
创建一个空系列
import pandas as pd
s = ps.Series()
print(s)
从ndarray创建一个系列
ndarray是通过numpy中的np.array()函数创建。ndarray ( N-dimensional array object为N维数 组(简称数组)对象,存储单一数据类型的N维数组ndarray的方便之处,它能够去掉循环的骤,效率高,且容易理解。如果数据是ndarray,则传递的索引必须具有相同的长度。如果没有传递索引值,那么默认的索引将是范围(n)其中n是数组长度。
import pandas as pd
import numpy as np
data = np.array(['a', 'b', 'c', 'd'])
s = pd.Serise(data)
print(s)
从字典创建一个系列
字典(dict)可以作为输入传递,如果没有指定索引,则按排序顺序取得字典键 以构造索引。如果传递了索引,索引中与标签对应的数据中的值将被拉出。 ?
import pandas as pd
import numpy as np
data = {'a':0,'b':1,'c':2}
s = pd.Series(data)
print(s)
?从标量创建一个系列
import pandas as pd
import numpy as np
s = pd.Series(5, index=[0,1,2,3])
print(s)
?创建DataFrame
DataFrame的创建方法
数据帧( Dataframe )是一个矩阵样式的数据表,包含已排序的列集合,每一列可以是不同的值类型(数值、字符串、布尔值等)
数据帧既有行索引也有列索引,它被视为一个共享相同索 引的Series字典。
?生成和添加数据的方法
1.把其他格式的数据整理到DataFrame
2.在已有的DataFrame中插入N列或者N行
?使用包含列表的字典创建数据帧
import pandas as pd
data = {'水果':['苹果','梨','草莓']
,'数量':[3,2,5],
'价格':[10,9,8]}
df = pd.DataFrame(data)
print(df)
#按照我们想要的顺序生成数据帧
data = {'platform':['qq','weixin','weibo','taobao'],'year':[2000,2010,2005,2004],'percent':[0.71,0.89,0.63,0.82]}
columns = ['year','platform','percent']
df = pd.DataFrame(data,columns=columns)
#按照给定列顺序进行排序生成数据帧
?如果给定的行或者列不存在,那么 内部数据会使用NaN替代
data = {'platform':['qq','weixin','weibo','taobao'],
'year':[2000,2010,2005,2004],
'percent':[0.71,0.89,0.63,0.82]}
columns = ['year','platform','percent','count']
index = ['a','b','c','d']
df = pd.DataFrame(data,columns=columns,index=index)
?print(df['year'])#使用列名获取到数据帧中该列的所有数据,返回一个Series序列
print(df.platform)#列名访问序列
print(df.loc['a'])获取index为‘a’的行
?用嵌套字典创建
#外层字典的键作为列索引,内层字典的键作为行索引
import pandas as pd
data = {'数量':{'苹果':3,'梨':2,'草莓':5},
'价格':{'苹果':'10','梨':9,'草莓':8}}
df = pd.DataFrame(data)
print(df)
?使用包含Series的字典创建
import pandas as pd
data = {'水果':pd.Series(['苹果','梨','草莓']),
'数量':pd.Series([3,2,5]),
'价格':pd.Series([10,9,8])}
df = pd.DataFrame(data)
print(df)
?csv文件构建DataFrame
实验的时候数据般比较大,而CSV 文件是文本格式的数据,占用更少的存储, 所以一般数据来源是csV文件,从Csv文件中如何构建DataFrame呢? txt 文件 一般也能用这种方法。 ?
?最常用的应该就是pd.read csv('filename.csv') 了,用sep指定数据的分割 方式,默认的是,
df = pd.read_csv('./xxx.csv') 如果csv中没有表头,就要加入head参数?
?增加N列或者N行
加入我们已经有了一个DataFrame 如下所示
test_dict = {'id':[1,2,3,4,5,6],
'name':['Alice','Bob','Cindy','Eric','Helen','Grace'],
'math':[90,89,99,78,97,93],
'english':[89,94,80,94,94,90]
}
test_dict_df = pd.DataFrame(test_dict)
此时我们又有一门新的课physics, 需要为每个人添加这门课的分数,按照 Index的顺序,我们可以使用insert方法,如下:?
new_columns = [92,94,89,77,87,91]
test_dict_df.insert(2,'pyhsics',new_columns,allow_duplicates=True)
test_dict_df
?此时,就得到了添加好的DataFrame需要注意的是DataFrame默认不允许添加重复的列,但是在insert函数中有参数allow duplicates=True, 设 置为True后,就可以添加重复的列了,列名也是重复的
?此时我们又来了一位新的同学Iric,需要在DataFrame中添加这个同学的信息 我们可以使用loc方法:
new_line = [7,'Iric' ,99]
test_dict_df.loc[6]= new_line
test_dict_df
?DataFrame索引与切片
理解索引
简单的说Series是维的ndarray,也可以说它是某种特定环境下的列 表。默认情况下index是0,1,2... 可以在创建的时候自已设定index的值。 Series中存放的数据只能是一维。 DataFrame在Series基础上扩充到二维,三个关键参数: columns index values ?
?
索引?
因为DataFrame的结构原因,所以就会分为行索引和列索引。在DataFrame中 columns是主要索引对象,在和Series运算中就可以体现出来。 列索引 列索引比较简单,索引下标就是columns : df.语文 或者 df['语文']
行索引 行索引使用.loc或者iloc df.loc['小红'] 或者 df.iloc[0] ?
?切片
切片就是截取出相应行列的部分。DataFrame 没有列切片。强行用列索引 的方式来切片会报错。
?df.loc['小红']:['王二'] dfl.ioc[0:3]
只取一列,可以不用.loc例 如df['A']或者df.loc[:,'A'] 取指定的某几列,可以不用.loc例如 df['A'C']]或者df.loc[:,['A'C']] 取指定的某几列,可以不用.loc例如 df['A'C']]或者df.loc[:,['A'C']] 取行的同时, 也取列。必须用.loc 或.iloc ?
数据排序方法
按实际值 按标签排序
import pandas as pd
import numpy as np
unsorted_df = pd.DataFrame(np.random.randn(10,2),index=[1,4,6,2,3,5,9,8,0,7],columns=['col2','col1'])
print(unsorted_df)
按值排序?
pd.sort_values("col2",inplace=True)
#表示pd按照col2字段排序
inplace 默认为false 原来顺序没变 只是返回排序的
?ascending :默认为True 按照升序排序 为False 按照降序排序
按标签排序?
使用sort_index()方法,通过传递axis参数和排序顺序,可以对DataFrame排序。默认情况下
import pandas as pd
import numpy as np
unsorted_df = pd.DataFrame(np.random.randn(10,2),index=[1,4,6,2,3,5,9,8,0,7],columns=['col2','col1'])
sorted_df = unsorted_df.sort_index()
print(unsorted_df)
print(sorted_df)
#降序
import pandas as pd
import numpy as np
unsorted_df = pd.DataFrame(np.random.randn(10,2),index=[1,4,6,2,3,5,9,8,0,7],columns=['col2','col1'])
sorted_df = unsorted_df.sort_index(ascending=False)
print(unsorted_df)
print(sorted_df)
?axis=1 列 0行
sort_values(by='col1')
排序算法
kind = heapsort(堆排序)
kind = quicksort(快速排序)
Panadas文件读取
●文本文件是由若干行字符构成的计算机文件,它是一种典型的顺序文件。常见的 文本文件有txt文件和CSV文件。 txt文件是操作系统附带的一种文本格式,是最常见的一种文件格式,用记事本 可以直接打开。 CSV文件为字符分隔文件(默认分隔符为逗号),文件以纯文本形式存储表格数 据,内容通常为数字和文本。 ●Pandans中使用read_table函数和read_csv 函数读取文本文件。
参数 | 说明 | filepath | 代表文本文件的路径 | sep | 用于对文件进行拆分的字符。read_csv函数默认读取以,分割的文件到DataFrame? read_table函数默认读取制表符 | header | 指定行数作列名文件没有列名 默认为0 否则设置none header=0 第一行数据作为列名 DataFrame 数据行从第二行开始 | names | 用于结果的列名列表 如果数据文件中没有列标题行 header=none | nrows | 需要读取的行数 默认为none | engine | 使用的分析引擎 C pYTHON | encoding | 指定字符集 默认为None 常用字符集为utf-8 文本为中文 encoding='gbk' |
?读取Excel文件
参数 | 说明 | io | excel文件路径 | sheetname | excel表内数据的分表位置 默认0 | header | 指定作为列名的行,默认为0,即取一行 | names | 用于结果的列名列表 | index_col | 指定列为索引列 默认为None |
?Pandas文件写入、
结构化数据可以通过pandas中的tocsV函数实现以txt文件或CsV文件格式存储 文件。 ?
?pandas提供了to_ excel 函数来写入Excel文件 excel writer :存储excel文件路径。 sheet name :指定存储Excel sheet的名称,默认为sheet1
数据库操作
链接mysql数据库
SQLAlchemy 是PythonSQL 工具包和对象关系映射器
PyMysql是Python中操作mysql的模块
使用SQLAlchemy 作外层 PyMySQL作为驱动 可以实现数据库操作
链接格式
从数据库读取数据
sql or table_name 接受String 表示读取的数据的表名 或者 sql语句?
con? 接收数据库连接 表示数据库连接信息?
index_float 接收int,表示设定的列作为行名
coerce_float 接收boolean 将数据库中的decimal类型的数据转换为pandas中的float64类型的数据?
columns 接收list 表示读取数据的列名。
?存储数据到数据库
?数据清洗
数据质量
数据的实际状态与期望状态的比较
高质量
正确反映真实世界
达到了其在运营决策和规划中的期望状态
期望状态
通常由个人或团体、标准组织、法律法规、业务 要求或软件开发要求定义。
数据质量问题来源
?采集标准缺失,或标准执行不到位 源数据有问题但没有发现 软件、硬件、网络问题 处理手法有误
元数据管理水平低下 届洞百出的数据模型 数据没有打通
数据质量管理的必要性
GIGO原则:
“把劣质的数据丢入到最好的模型中去分析处理,就像是把已经腐烂了的桃子, 用最好的卡车,走最快的路线,运输到市场,但是桃子仍然是腐烂的。
错误数据会给企业带来金钱的损失;使员工的效率下降;损伤企业的名誉。
企业的每一个商业决策、客户关系和商业投资都是建立在数据分析的基础上,数 据质量问题开始成为影响数据分析和利用效能的“最后一公里”问题,是困扰许多大 数据公司和企业在拓展其大数据战略不可回避的问题。
缺失值处理
删除法
参数说明
axis 接收0或1 0 行 1 列
how 接收特定String? 表示删除的形式 any 只要有缺失值就删除
subset 接收array数据 表示进行去重的列行 默认为None 表示所有列 行
inplace 接收boolean? 表示是否在原表上进行操作 ?
?替换法
?重复值处理
记录重复
?特征重复
?
?除了使用相似度矩阵进行特征去重之外 可以通过DataFrame.equals的方法进行特征去重
异常值处理
异常值是指数据中个别值的数值明显偏离其余的数值,有时也称为离群点,检测 异常值就是检验数据中是否有录入错误以及是否含有不合理的数据。 异常值的存在对数据分析十分危险,如果计算分析过程的数据有异常值,那么会 对结果会产生不良影响,从而导致分析结果产生偏差乃至错误。
异常值检测 3σ原则又称为拉依达法则。先假设-组检测数据只含有随机误差,对原始数据进行 计算处理得到标准差,然后按一定的概率确定一个区间,认为误差超过这个区间的就属于 异常值。 此方法仅适用于对正态或近似正态分布的样本数据进行处理,如下表所示,其中σ代 表标准差,μ代表均值,X=μ为图形的对称轴。数据的数值分布几乎全部集中在区间 (μ-3σ,μ+3σ)内,超出这个范围的数据仅占不到0.3%。故根据小概率原理,可以认为 超出3σ的部分数据为异常数据。 ?
箱线图提供了识别异常值的一个标准,即异常值通常被定义为小于QL-1.5IQR或大 于QU+1.5IQR的值。
QL 称为下四分位数,表示全部观察值中有四分之一的数据取值比它小。 QU称为上四分位数,表示全部观察值中有四分之一的数据取值比它 大。 ?IQR称为四分位数间距,是上四分位数QU与下四分位数QL之差,其间包含了全部观察值的 半。 2.箱线图分析
箱线图依据实际数据绘制,真实、直观地表现出了数据分布的本来面貌,且没有 对数据做任何限制性要求,其判断异常值的标准以四分位数和四分位数间距为基础。 四分位数给出了数据分布的中心、散布和形状的某种指示,具有一定的鲁棒性, 即25%的数据可以变得任意远而不会很大地扰动四分位数,所以异常值通常不能对这 个标准施加影响。鉴于此,箱线图识别异常值的结果比较客观,因此在识别异常值方 面具有定的优越性 。
pandas数据堆叠
数据表横向堆叠
pandas的连接函数concat()函数用于拼接两个数据表
主要参数
objs 接收多个Series DataFrame Panel 的组合 表示参与链接的pandas对象的列表的组合
axis 接收0或1 1 横向 0 纵向?
join 接收inner (交集)或者 outer (并集)
数据表纵向堆叠
append函数
使用pandas的append函数把多个列名相同的数据表拼接到一起,列名不一致空值填补
?使用merge函数链接数据
函数merge通过一个或多个键将数据表的行连接起来 根据两个表中元素取值是否相同来进行拼接(和行列索引无关)
?
函数join以索引作为对齐列进行数据连接
join(self, other, on= None, how= left', Isuffix= ",rsuffix=", sort= False)
?combine first 函数重叠合并数据
?数据映射转换
使用映射函数map可以对数据集中的数据进行映射转换。转换方式有函数转换、表 达式转换和字典转换。 map(arg, na action=None) ?
?
?自定义函数转换数据
?使用函数表达式转换数据类型
?使用字典转换数据
数据离散化?
等宽离散化指将数据的值域分成具有相同宽的区间,区间的个数由数据本身的特点决定或者用户指定。 cut(x, bins, right= True, labels= None, retbins= False, precision=3, in-? clude lowest= False)
案例1使用离散化处理方法将一组年龄分段, 并统计个年龄段人数。
?
?数据等频离散化
将数据的值域按照分位数划分,划分的结果是每个区间的大小基本相同,但不一-定 完全相同。 qcut(x, q, labels= None, retbins= False, precision = 3, duplicates =? "raise")
?案例2:使用qcut函数等频划分一组年龄值,并统计各组人数
大数据分组
数据分组是根据统计研究的需要,将原始数据按照某种标准划分成不 同的组别,分组后的数据称为分组数据。 数据分组的方法有单变量值分组和组距分组两种。 数据分组的主要目的是观察数据的分布特征,在进行数据分组后再计 算出各组中数据出现的频数,就形成了- -张频数分布表。 对于通过调查得到的数据,虽然经过审核、排序等整理手段给予了处 理,但由于数据庞杂,还不能直接进入对数据的分析阶段。在此之前, 有必要对数据进行分组处理,以反映数据分布的特征及规律。 ?
对于非数值型数据就是依据属性的不同将其划分为若 干组,对于数值型数据就是依据数值的不同将数据划分为 若干组 。分组后, 要使组内的差距尽可能小,而组与组之 间则有明显的差异 从而使大量无序、混沌的数据变为有 序、层次分明、显示总体数量特征的资料。 ?
数据分组原则和依据
数据分组应遵循两个基本原则:穷尽性原则和互斥性原则。 穷尽性原则要求调查的每一单位都能无一例外地划归到某一-组去,不 会产生“遗漏”现象。 互斥性原则要求将调查单位分组后,各个组的范围应该互不相容、互 为排斥。即每个调查单位在特定的分组标志下只能归属某一组,而不能同 时或可能同时归属到几个组。 ?
根据研究目的选择分组标志; 选择能够反映现象本质的标志; 考虑现象所处的历史条件或经济条件。
1.根据研究目的选择分组标志
同一现象由于研究 目的不同, 选择的分组标志也就不同,应选择与研究目的有密 切关系的标志作为分组标志,才能使统计分组提供符合要求的分组资料。例如,要 研究工业企业经济类型的构成,就要选择所有制这个标志。 ?
2.选择能够反映现象本质的标志
客观现象的标志多种多样,有的标志能够揭示现象的本质特征,具有决定意义的 重要标志;有的则是非本质、 无关紧要的标志。只有选择那些能够揭示现象本质特 征的重要标志作为分组标志,才能得到反映现象本质特征的分组资料。 ?
3.考虑现象所处的历史条件或经济条件
社会经济现象随时间、地点、条件的不同而经常发生变化。同一分组标志在某一 时期适用,在另一时期就不一定适用,在另一条件下就不一定适用。某一标志在一 定历史条件下是重要的分组标志,但时过境迁,可能失去其重要意义。因此,在选 择分组标志时,应考虑到现象所处的具体历史条件或经济条件,做到与时俱进。
?
agg聚合
聚合在信息科学中是指对有关的数据进行内容挑选、分析、归类,最 后分析得到人们想要的结果,主要是指任何能够从数组产生标量值的数据 转换过程。 近年来随着大数据的发展,聚合技术已经广泛地应用于文本分析,信 息安全,网络传输等领域。 ?
聚合函数可以实现数据聚合的功能,聚合函数对一组值执行计算并返回单一的值。 常见的聚合函数有:
?从0.20.1开始,pandas引入了agg函数,它提供基于列的聚合 操作。 agg函数返回的是一个 DataFrame 函数的参数可以是字符串或 者函数,表示要在列上进行的操作
下 面的代码可以通过 agg聚合求所有学生的身 高平均值 import pandas as pd data = pd.read csv('./student.csv') print(data['身高'.agg( mean')) 运行结果为: 1.7349999999999999 ?
?下面的代码可以通过agg聚合求学生的身高的最大值 。 import pandas as pd data = pd.read csv('./student.csv') print(data['身高'].agg('max')) 运行结果为: 1.88
?下面的代码可以通过agg聚合求学所有生的当月消费的总和。 import pandas as pd data = pd.read csv('./student.csv) print(data['本月消费'].agg'sum')) 运行结果为: 1530
?transform聚合
transform可以很方便地将某个或某些函数处理过程(非聚合)作 用在传入数据的每一列上,从而返回与输入数据形状致的运算结果。 ?
transform作用于Series transform作用于DataFrame transform作用于DataFrame的分组过
transform作用于Series, 可以对Series每一个 元素进行指定的操作,例如,对每个元素进行平方操作 。 transform的参数可以是一个函数,表示需要对每 一个 元素进行的操作 ?
1下面的代码可以生成一个Series, 然后通过transform将Series中的每一 个 元素进行平方操作: import pandas as pd import numpy as np <程序> series = pd. Series([1, 2, 3, 4, 5, 6]) result = series.transform(lambda x: X ** 2) print(result) ?
?当transform作用于整个DataFrame时, 实际上就是将传入的所有 变换函数作用到每-列中。例如, 下面的代码 可以将所有列映射到0~1 之间。 import pandas as pd data = pd.read CSV( ./student.csv) data[l'身高','本月消费'll.transform(lambda s: S / max(s))
?代码如下: import pandas as pd df = pd.DataFrame({ 'restaurant id': [101,102,103, 104,105,106,107], 'address': ['新北区,武进区,钟楼区,栖霞区,'江宁区,'盐都区,‘亭湖区'], 'city': '常州常州,常州,南京','南京,'盐城',盐城'], 'sales': [10,500,48,12,21,22,14] }) df'city_ total sales'] = df.groupby('city )'sales ].transform('sum') df['pct'] = df['sales']/ df['city_ total sales'] df'pct'] = df[ pct'].transform(lambda x: format(x, '.2%')) print(df)
apply聚合
在Python中,函数作为一个对象,能作为参数传递给其它参 数,并且能作为函数的返回值。 ?
def cal(a, b, func): return func(a, b) def add(a, b): return a + b def sub(a, b): return a - b a =5 b =2 print(cal(a, b, add)) print(cal(a, b, sub)) ?
?pandas的apply() 函数可以作用于整个Series和DataFrame,功能是自动遍历整个Series 或者DataFrame, 对每 个元素运行指定的函数。
?import pandas as pd data = pd.read csv(./student.csv') data['带单位的身高' = data['身高'.apply(lambda x: str(x) + '米)
?
这种情况下可以使用transform,这是apply与transform的一个区别。 import pandas as pd data = pd.read Csv('./consume.csv) data['总消费'] = data.groupby('姓名')['消费'J.transform(sum) print(data) ?
?
机器学习
使用sklearn处理数据
机器学习是一门]多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多|门学科。专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。它是人工智能核心,是使计算机具有智能的根本途径。
?机器学习是一门人工智能的科学,该领域的主要研究对象是人 工智能,特别是如何在经验学习中改善具体算法的性能。 机器学习是对能通过经验自动改进的计算机算法的研究 机器学习是用数据或以往的经验,以此优化计算机程序的性能标 准
?机器学习是人工智能及模式识别领域的共同研究热点,其理论和方 法已被广泛应用于解决工程应用和科学领域的复杂问题。
基于机器学习的发展历程,机器学习可以分为传统机器学习与大数据环境下机器学习。 传统机器学习的研究方向主要包括决策树、随机森林、人工神经网络、贝叶斯学习等方面的研究 ?
随着大数据时代各行业对数据分析需求的持续增加,通过机器学习高 效地获取知识,已逐渐成为当今机器学习技术发展的主要推动力。大数据 时代的机器学习更强调“学习本身是手段"机器学习成为一种支持和服务 技术。如何基于机器学习对复杂多样的数据进行深层次的分析,更高效地 利用信息成为当前大数据环境下机器学习研究的主要方向。 ?
基于学习策略,机器学习可以分为模拟人脑的机器学习、直接采用数学 方法的机器学习。 ?
模拟人脑的机器学习又可以分为符号学习与神经网络学习 。 符号学习:模拟人脑的宏现心理级学习过程,以认知心理 学原理为基础,以符号数据为输入,以符号运算为方法,用推 理过程在图或状态空间中搜索,学习的目标为概念或规则等。 符号学习的典型方法有记忆学习、示例学习、演绎学习.类比 学习、解释学习等。 ?
神经网络学习(或连接学习) : 模拟人脑的微观生理级学习 过程,以脑和神经科学原理为基础,以人工神经网络为函数结构 模型,以数值数据为输人,以数值运算为方法,用迭代过程在系 数向量空间中搜索,学习的目标为函数。典型的连接学习有权值 修正学习、拓扑结构学习 ?
Sklearn介绍
Scikit-learn(sklearn)是机器学习中常用的第三方模块,对常用的机器学习方法进行了封装, 包括回归(Regression) 、降维(Dimensionality Reduction)分类(Classfication) 聚类(Clustering)等方法。 ?
Scikit-learn依赖如下软件包: ●Python (>= 2.7 or >= 3.3), ●NumPy (>= 1.8.2), ●SciPy (>= 0.13.3). ?
数据科学中的第一步通常都是加载数据,SciKit-Learn 中自带-些数据集, 可以尝 试加载。 先从sklearn导入数据集模块,然后,使用数据集中的loaddigits()方法加载数 据。 ?
from sklearn import datasets digits = datasets.load digits() print(digits) ?
?
?from sklearn import datasets from sklearn.model selection import train test split boston = datasets.load boston() train_ X,test X, train y, test y = train test split(boston.data, boston.target, test size = 0.2, random state = 0)
?数据集预处理
现实世界中数据大体上都是不完整,不致的脏数据, 无法直接进行数据挖 掘,或挖掘结果不好。为了提高数据挖掘的质量产生了数据预处理技术。 数据预处理有多种方法:数据清理,数据集成,数据变换,数据归约等。这 些数据处理技术在数据挖掘之前使用,大大提高了数据挖掘模式的质量,降低实 际挖掘所需要的时间。 ?
?数据预处理主要包括: 数据清理、数据集成、数据变换、数据归约。
?数据清理: 数据清理例程通过填写缺失的值、光滑噪声数据、识别或删除离群点 并解决不一致性来“清理”数据。 主要是达到如下目标:格式标准化,异常数据清除,错误纠正,重复 数据的清除
?数据集成: 数据集成例程将多个数据源中的数据结合起来并统一-存储,建 立数据仓库的过程实际上就是数据集成。
?数据变换: 通过平滑聚集,数据概化,规范化等方式将数据转换成 适用于数据挖掘的形式 。
?数据归约: 数据挖掘时往往数据量非常大,在少量数据上进行挖 掘分析需要很长的时间,数据归约技术可以用来得到数据 集的归约表示,它小得多,但仍然接近于保持原数据的完 整性,并结果与归约前结果相同或几乎相同。
?
标准化:变换后各维特征有0均值,单位方差。也叫z-score规 范化(零均值规范化)。 计算方式是将特征值减去均值,除以标准差 。 ?
?
?
?降维就是指采用某种映射方法,将原高维空间中的数据 点映射到低维度的空间中。降维的本质是学习一个映射函数 f : x->y 其中X是原始数据点的表达,目前最多使用向量 表达形式。y是数据点映射后的低维向量表达,通常y的维 度小于X的维度(当然提高维度也是可以的) 。f可能是显 式的或隐式的、线性的或非线性的 。
?在sklearn中,可以通过PCA实现降维 from sklearn.decomposition import PCA data = [[2,8,4,5],[6,3,0,8],[5,4,9,1]] pca = PCA(n_ components= 2) result = pca.fit transform(data)
?回归分析
回归分析是一种预测性的建模技术,它研究的是因变量(目标) 和自 变量(预测器)之间的关系。这种技术通常用于预测分析,时间序列模型 以及发现变量之间的因果关系。通常使用曲线/线来拟合数据点,目标是 使曲线到数据点的距离差异最小。 ?
线性回归假设目标值与特征之间线性相关,即满足一个多元 次方程。通过构建损失函数,来求解损失函数最小时的参数w和 b。通常可以表达成如下公式: y(x)=wx+b y(x)为预测值,自变量X和因变量y是已知的,而线性回归 想实现的是预测新增一个x? 其对应的y是多少。因此,为了构 建这个函数关系,目标是通过已知数据点,求解线性模型中w和 b两个参数 ?
求解最佳参数,需要一个标准来对结果进行衡量,为此需要定量化一个目标函数式, 使得计算机可以在求解过程中不断地优化。 针对任何模型求解问题,都是最终都是可以得到一-组预测值y(x),对比已有的真实值 y,数据行数为n,可以将损失函数定义如下: L =HZH=1(V(x)i-y;)- n 常见的线性回归求解方式有两种,最小二乘法和梯度下降法。 TO ?
在sklearn中,可以通过linear model.LinearRegression 进行线性回归分 析。其过程如下: 1.导入模块; 2.生成x、y; 又 3.调用LinearRegression().fit(X, y)得到模型(假设为reg 4.解析reg得到参数; 5.根据模型预测。 ?
from sklearn.linear model import LinearRegression? import numpy as np X = np.array([1, 1],[1, 2], [2, 2], [2, 3]]) #y=1*x0+2*x1+3 y = np.dot(X, np.array([1, 2]))+ 3 c程序: reg = LinearRegression().fit(X, y) print(reg.score(X, y)) print(reg.coef ) print(reg.intercept ) reg.predict(np.array([[3, 5]])) ?
模拟转盘游戏
import numpy as np
import pandas as pd
#模拟转盘100000次
data = np.random.ranf(100000)
#奖项等级划分
category = (0.0,0.08,0.3,1.0)
labels = ('一等奖','二等奖','三等奖')
#对模拟数据进行划分
result = pd.cut(data, category,labels=labels)
results = pd.value_counts(result)
print(results)
import pandas as pd
df = pd.read_excel('电影导演演员.xlsx')
df
pairs = []
for i in range(len(df)):
actors = df.at[i,'演员'].split(',')
for actor in actors:
pair = (actors,df.at[i,'电影名称'])
pairs.appnd(pair)
pairs = sorted(pairs,key=lambda item:int(item[0][2:1]))
|