北京看白癜风哪家医院好点 http://ask.bdfyy999.com/(▲由Python大本营付费下载自视觉中国)
作者
李明江/张良均/周东平/张尚佳来源
机械工业出版社《Python3智能数据分析快速入门》
机器学习对数据集有一定的要求,这就需要在训练之前对数据进行处理,使之符合训练要求。Pandas提供了多种数据预处理的方法,包括缺失值处理、重复值处理、连续特征离散化处理、哑变量处理等方法。
缺失值处理
数据中的某个或某些特征的值是不完整的,这些值称为缺失值。对缺失值处理前需先识别缺失值,Pandas提供isnull方法,能够识别出缺失值,返回bool。isnull方法结合其他操作,找出缺失值的数量及占比,如代码清单7-31所示。
识别缺失值后,需对缺失值进行处理,常见的处理方式分为3种:删除法、替换法、插值法。
1.删除法
删除法是指将含有缺失值的特征或者记录删除。删除法分为删除观测记录和删除特征两种,观测记录指删除行,特征指删除列,它属于利用减少样本量来换取信息完整度的一种方法,是一种最简单的缺失值处理方法。Pandas提供了简便的删除缺失值的方法dropna,通过参数控制,该方法既可以删除观测记录,也可以删除特征,其基本语法格式
如下。
pandas.DataFrame.dropna(self,axis=0,how=any,thresh=None,subset=None,inplace=False)dropna方法常用的参数及其说明如表7-16所示。
使用dropna方法删除指定列的缺失值,设置参数为subset,如代码清单7-33所示。
2.替换法
替换法是指用一个特定的值替换缺失值。特征可分为数值型和类别型,两者出现缺失值时的处理方法是不同的。缺失值所在特征为数值型时,通常用其均值、中位数和众数等描述其集中趋势的统计量来代替缺失值;缺失值所在特征为类别型时,则选择用众数来替换缺失值。fillna方法用于替换缺失值,其基本语法格式如下。
DataFrame.fillna(value=None,method=None,axis=None,inplace=False,limit=None)fillna方法常用的参数及其说明如表7-17所示。
使用fillna方法替换缺失值,如代码清单7-34所示。
使用fillna方法替换缺失值,不指定替换值,设置参数为method,如代码清单7-35所示。
3.插值法
删除法简单易行,但是会引起数据结构变动,样本减少;替换法使用难度较低,但是会影响数据的标准差,导致信息量变动。在面对数据缺失问题时,除了这两种方法之外,还有一种常用的方法—插值法。
interpolate方法用于对缺失值进行插值。针对DataFrame的interpolate方法,其基本语法格式如下。
DataFrame.interpolate(method=linear,axis=0,limit=None,inplace=False,limit_direction=forward,limit_area=None,downcast=None,**kwargs)interpolate方法常用的参数及其说明如表7-18所示。
interpolate方法提供了多种插值方法,常用插值方法及其说明如表7-19所示。
使用常用插值方法插值,如代码清单7-36所示。
除了常用的插值方法,interpolate还提供其他方法。至于使用何种插值方法,可根据实际情况灵活选择。
重复数据处理
重复数据处理是机器学习经常面对的问题之一。对重复数据进行处理前,需要分析重复数据产生的原因以及去除这部分数据后可能造成的不良影响。
drop_duplicates方法用于去除一个或多个特征的重复记录。针对DataFrame的drop_duplicates方法的基本语法格式如下。
DataFrame.drop_duplicates(self,subset=None,keep=first,inplace=False)drop_duplicates方法常用的参数及其说明如表7-20所示。
使用drop_duplicates方法去除数据中的重复记录,默认对所有特征起作用,即只有所有特征的重复记录对应的索引(行)相同的情况下才会执行去除操作,如代码清单7-37所示。
连续特征离散化处理
某些算法,如ID3决策树算法和Apriori算法等,要求数据是离散的,此时就需要将连续型特征(数值型)转换成离散型特征(类别型),即连续特征离散化。连续特征离散化是在数据的取值范围内设定若干个离散的划分点,将取值范围划分为一些离散化的区间,最后用不同的符号或整数值代表落在每个子区间中的数据值。因此离散化涉及两个子任务,即确定分类数以及如何将连续型数据映射到这些类别型数据上。其原理如图7-2所示。
常用的离散化方法有3种:等宽法、等频法和通过聚类分析离散化(一维)。通过聚类分析离散化(一维)涉及聚类算法,此处暂不介绍。
1.等宽法
等宽法指将数据的值域分成具有相同宽度的区间,与制作频率分布表类似。cut函数用于实现等宽法,其基础语法格式如下。
pandas.cut(x,bins,right=True,labels=None,retbins=False,precision=3,include_lowest=False)cut函数常用的参数及其说明如表7-21所示。
表7-21cut函数常用的参数及其说明
使用等宽法离散化的缺陷从代码清单7-39中可以很明显地看出:等宽法离散化对数据分布具有较高要求,若数据分布不均匀,那么各个类的数目也会变得非常不均匀,有些区间包含许多数据,而另外一些区间的数据则极少。这会严重损坏所建立的模型。
2.等频法
等频法在等宽法的基础上实现,将切分区间指定为被切分数据的分位数,这样能保证切分区间的数据大体相等。结合函数对数据应用等频法,如代码清单7-40所示。
相较于等宽法,等频法避免了数据分布不均匀的问题,但同时也可能将数值非常接近的两个值分到不同的区间以满足每个区间中固定的数据个数。
哑变量处理
哑变量又称虚拟变量,通常取0或1。机器学习中有相当一部分的算法模型都要求输入的特征为数值型,但实际数据中特征的类型不一定只有数值型,还会存在相当一部分的类别型,这部分的特征需要经过哑变量处理才可以放入模型之中。哑变量处理的原理如图7-3所示。
get_dummies函数用于哑变量处理,其基本语法格式如下。
pandas.get_dummies(data,prefix=None,prefix_sep=_,dummy_na=False,columns=None,sparse=False,drop_first=False)使用get_dummies函数对类别型特征进行哑变量处理,如代码清单7-41所示。
代码清单7-41 哑变量处理
从代码清单7-41的结果中可以发现,对于一个类别型特征,若其取值有m个,则经过哑变量处理后就变成了m个二元特征,并且这些特征互斥,每次只有一个激活,这使得数据变得稀疏。
综上所述,对类别型特征进行哑变量处理主要解决了部分算法模型无法处理类别型数据的问题,这在一定程度上起到了扩充特征的作用。由于数据变成了稀疏矩阵的形式,因此也加快了算法模型的运算速度。
小结
本章延续第6章,是Pandas的进阶篇。主要介绍了如下内容:
1)常见数据源类型如CSV、Excel、数据库、剪切板、pickle的读取和写入操作。
2)统计分析、分组运算、透视表和交叉表这3种针对数据的操作方法。
3)缺失值处理、重复值处理、连续特征离散化处理、哑变量处理等常见数据处理方法。
课后习题
1.选择题
(1)下列关于数据库数据读写,下列说法正确的有。
A.read_sql_table可以使用sql语句读写数据库数据
B.Pandas除了read_sql没有其他数据库读写函数了
C.使用read_sql函数读取数据库数据不需要使用数据库连接
D.read_sql既可以使用sql语句读取数据库数据,也可以直接读取数据库表
(2)关于Pandas数据读写,下列说法正确的有。
A.read_excel能够读取xls后缀的文件
B.read_sql能够读取数据库的数据
C.to_csv方法能够将DataFrame写入CSV
D.to_sql方法能够将DataFrame写入数据库
(3)对数值型数据应用describe方法返回的特征不包括。
A.中位数B.标准差C.数目D.方差
(4)关于移动窗口rolling方法,下列说法正确的是。
A.接收offset时,对应的索引需为时间类型
B.接收int时,空值不会保留
C.接收offset时,空值不会保留
D.返回Rolling对象
(5)关于agg方法,下列说法错误的是。
A.返回标量值和数组B.可接收NumPy函数
C.可对分组的不同列指定作用的函数D.可同时接收多个函数
(6)下列关于groupby方法说法正确的是。
A.groupby能够实现分组聚合
B.groupby方法返回的结果能够直接查看
C.groupby是Pandas提供的一个用来分组的方法
D.groupby方法是Pandas提供的一个用来聚合的方法
(7)使用pivot_table函数制作透视表用下列那个参数设置行分组键。
A.dataB.valuesC.columnsD.index
(8)以下关于缺失值的说法中,正确的是。
A.isnull方法可用于计算缺失值数量
B.dropna方法既可以删除观测记录,也可以删除特征
C.fillna方法可用来切换缺失值
D.Pandas库中的interpolate模块包含了多种插值方法
(9)以下关于drop_duplicates函数的有关说法中,错误的是。
A.对DataFrame和Series类型的数据有效
B.仅支持单一特征的数据去重
C.数据有重复时默认保留第一个数据
D.该函数不会改变原始数据排列
(10)连续数据离散化的处理方法不包括。
A.等宽法B.等频法C.使用聚类算法D.使用Apriori算法
2.填空题
(1)read_csv函数用于设置分隔符的参数是。
(2)使用方法能够一次性得出DataFrame所有数值型特征的非空值数目、均值、四分位数、标准差。
(3)pivot_table函数默认的聚合函数是。
(4)创建交叉表的函数是。
(5)常用的哑变量处理的函数是。
3.操作题
(1)一组数据:5,10,11,13,15,35,50,55,72,92,,。使用等宽法对其进
行离散化处理。
(2)对表7-23中的笔记本电脑数据按CPU进行分组,并求出每组最大主频、最小核心数
目、最低的价格,并显示在一个DataFrame中。
关于作者
李明江:资深大数据专家,贵州省计算机学会常务理事,黔南州大数据专家委员会委员,黔南州计算机学会会长,黔南州教育信息化建设专家库专家,黔南民族师范学院计算机与信息学院院长,全国高校大数据教育联盟理事。主持过多项省厅级科研项目,并在《计算机应用研究》《科技通报》上发表过多篇大数据分析与数据挖掘相关技术的研究论文,著有《数据挖掘的应用与实践:案例与探析》《计算机网络技术与应用》等。
张良均:资深大数据挖掘与分析专家、模式识别专家、AI技术专家。有10余年大数据挖掘与分析经验,擅长Python、R、Hadoop、Matlab等技术实现的数据挖掘与分析,对机器学习等AI技术驱动的数据分析也有深入研究。为电信、电力、政府、互联网、生产制造、零售、银行、生物、化工、医药等多个行业上百家大型企业提供过数据挖掘应用与咨询服务,实践经验非常丰富。华南师范大学、中南财经政法大学、广东工业大学、西安理工大学、广西科技大学、重庆交通大学、桂林电子科技大学等校外硕导。撰写了《Python数据分析与挖掘实战》《R语言数据分析与挖掘实战》《数据挖掘:实用案例分析》《Hadoop大数据分析与挖掘实战》等多部畅销书,累计销量近20万册。
本文摘自机械工业出版社《Python3智能数据分析快速入门》,经出版社授权发布。