三、数据处理
1.合并数据(join、merge、concat函数,append函数)
Concat()函数使用
1.concat操作可以将两个pandas表在垂直方向上进行粘合或者堆叠。
join属性为outer,或默认时,返回列名并集,如:
df3 = pd.concat([df1,df2])
join属性为inner时,返回列名交集,如:
df4 = pd.concat([df1,df2],join="inner")
2.concat操作将两个pandas表在水平方向进行粘合或者堆叠。
df3 = pd.concat([df1,df2],axis = 1) #默认outer
join()函数使用
可用于简单的横向堆叠,直接用index来连接,语法格式如下:
pandas.DataFrame.join(self, other, on=None, how='left', lsuffix='', rsuffix='', sort=False)
当横向堆叠的两个表的列名有相同时,需设置lsuffix或rsuffix参数以示区别,否则会报错。
_append()函数使用
_append方法也可用于简单的纵向堆叠,这对列名完全相同的两张表特别有用,列名不同则会被空值替代。
和concat的axis = 0 的效果是一样的
pandas.DataFrame._append(self, other, ignore_index=False, verify_integrity=False)
Merge()函数使用
merge函数可以按照指定的列进行合并
实现sql数据库类似的各种join(连接)操作,例如内连接、外连接、左右连接等。
若没有指定列名,则自动寻找两个对象中同名的列进行连接运算,类似于数据库中的自然连接运算,这里类似于df_merge(df1,df2,on='key',how='inner')
2.清洗数据方法(重复值、缺失值判断和填充方法、异常值处理和判断方法)
重复数据处理
1.记录重复
drop_duplicates的去重方法。该方法只对DataFrame或者Series类型有效。这种方法不会改变数据原始排列,并且兼具代码简洁和运行稳定的特点。
该方法不仅支持单一特征的数据去重,还能够依据DataFrame的其中一个或者几个特征进行去重操作。 pandas.DataFrame(Series).drop_duplicates(self, subset=None, keep='first', inplace=False)
2. 特征重复
特征重复 : 存在一个或多个特征的名称不同,但是数据完全相同。
要去除特征之间的的重复,可以利用特征间的相似度将两个相似度为1的特征去掉一个。去除特征重复的方法主要有两个:corr()方法, DataFrame.equals()方法
在pandas中相似度的计算方法为corr,使用该方法计算相似度时,默认为"pearson"法 ,可以通过"method"参数调节,目前还支持"spearman"法和"kendall"法。
但是通过相似度矩阵去重存在一个弊端,该方法只能对数值型重复特征去重,类别型特征之间无法通过计算相似系数来衡量相似度。
除了使用相似度矩阵进行特征去重之外,可以通过DataFrame.equals的方法进行特征去重。
缺失值处理方法
利用isnull或notnull找到缺失值
缺失值:在Pandas中的缺失值有四种:np.nan (Not a Number) 、NA(not available)、 None 和 pd.NaT(时间格式的空值,注意大小写不能错)
空值:空值在Pandas中指的是空字符串"";
最后一类是导入的Excel等文件中,原本用于表示缺失值的字符"-"、"?"等。
isnull()/isna():对于缺失值,返回True;对于⾮缺失值,返回False。
Notnull/notna():对于⾮缺失值,返回True;对于缺失值,返回False。
any():⼀个序列中有⼀个True,则返回True,否则返回False。
sum():对序列进行求和计算。
1.删除法(dropna)
删除法分为删除观测记录 和删除特征两种,它属于利用减少样本量来换取信息完整度的一种方法,是一种最简单的缺失值处理方法。
pandas中提供了简便的删除缺失值的方法dropna,该方法既可以删除观测记录,亦可以删除特征。
pandas.DataFrame.dropna(self, axis=0, how='any', thresh=None, subset=None, inplace=False)
2.替换法
替换法是指用一个特定的值替换缺失值。
特征可分为数值型和类别型,两者出现缺失值时的处理方法也是不同的。
缺失值所在特征为数值型时,通常利用其均值、中位数和众数等描述其集中趋势的统计量来代替缺失值。
缺失值所在特征为类别型时,则选择使用众数来替换缺失值。
pandas库中提供了缺失值替换的方法名为fillna,其基本语法如下。 pandas.DataFrame.fillna(value=None, method=None, axis=None, inplace=False, limit=None)
3.插值法
常用的插值法有线性插值、多项式插值和样条插值等:
线性插值是一种较为简单的插值方法,它针对已知的值求出线性方程,通过求解线性方程得到缺失值。
多项式插值是利用已知的值拟合一个多项式,使得现有的数据满足这个多项式,再利用这个多项式求解缺失值,常见的多项式插值法有拉格朗日插值和牛顿插值等。
样条插值是以可变样条来作出一条经过一系列点的光滑曲线的插值方法,插值样条由一些多项式组成,每一个多项式都是由相邻两个数据点决定,这样可以保证两个相邻多项式及其导数在连接处连续。
线性插值
python
import numpy as np
from scipy.interpolate import interp1d
x=np.array([1,2,3,4,5,8,9,10])
y1=np.array([2,8,18,32,50,80,100,120])
linear_interp=interp1d(x,y1,kind='linear')
print(linear_interp([6,7]))
多项式插值
python
from scipy.interpolate import lagrange
large_ins_value=lagrange(x,y1)
print(large_ins_value([6,7]))
样条插值
python
spline_value=interp1d(x,y1,kind='cubic')
print(spline_value([6,7]))
异常值检测方法
1. 3σ原则
数据的数值分布几乎全部集中在区间(μ-3σ,μ+3σ)内,超出这个范围的数据仅占不到0.3%。故根据小概率原理,可以认为超出3σ的部分数据为异常数据。
2.箱线图分析
箱型图提供了识别异常值的一个标准,即异常值通常被定义为小于QL-1.5IQR或大于QU+1.5IQR的值。
QL称为下四分位数,表示全部观察值中有四分之一的数据取值比它小。
QU称为上四分位数,表示全部观察值中有四分之一的数据取值比它大。
IQR称为四分位数间距,是上四分位数QU与下四分位数QL之差,其间包含了全部观察值的一半。
3.标准化数据常见方法(离差化,标准差标准化)
1. 离差标准化公式(Min-max归一化)
- 标准差标准化的公式及特点(Z-Score标准化)
离差标准化 方法简单,便于理解,标准化后的数据限定在[0,1]区间内。
标准差标准化受到数据分布的影响较小。
归一化和标准化的区别和联系区别:
归一化是将样本的特征值转换到同一量纲下把数据映射到[0,1]或者[a,b]区间内,仅由变量的极值决定,因此区间放缩法是归一化的一种。
标准化是依照特征矩阵的列处理数据,其通过求z-score的方法,转换为标准正态分布,和整体样本分布相关,每个样本点都能对标准化产生影响。
归一化会改变数据的原始距离,分布,信息;标准化一般不会。
联系: 它们的相同点在于都能取消由于量纲不同引起的误差;都是一种线性变换,都是对向量X按照比例压缩再进行平移。
4.数据变换方法(离散化连续型数据)
1.哑变量处理
Python中可以利用pandas库中的get_dummies函数对类别型特征进行哑变量处理。 pandas.get_dummies(data, prefix=None, prefix_sep='_', dummy_na=False, columns=None, sparse=False, drop_first=False)
2.离散化
连续特征的离散化就是在数据的取值范围内设定若干个离散的划分点,将取值范围划分为一些离散化的区间,最后用不同的符号或整数值代表落在每个子区间中的数据值。
因此离散化涉及两个子任务,即确定分类数以及如何将连续型数据映射到这些类别型数据上。
- 等宽法
将数据的值域分成具有相同宽度的区间,区间的个数由数据本身的特点决定或者用户指定,与制作频率分布表类似。pandas提供了cut函数,可以进行连续型数据的等宽离散化,其基础语法格式如下。
pandas.cut(x, bins, right=True, labels=None, retbins=False, precision=3, include_lowest=False)
- 等频法
cut函数虽然不能够直接实现等频离散化,但是可以通过定义将相同数量的记录放进每个区间。
等频法离散化的方法相比较于等宽法离散化而言,避免了类分布不均匀的问题,但同时却也有可能将数值非常接近的两个值分到不同的区间以满足每个区间中固定的数据个数。
- 基于聚类分析的方法
一维聚类的方法包括两个步骤:
将连续型数据用聚类算法(如K-Means算法等)进行聚类。
处理聚类得到的簇,将合并到一个簇的连续型数据做同一标记。
聚类分析的离散化方法需要用户指定簇的个数,用来决定产生的区间数