之前学了陈旸老师的《数据分析实战45讲》(掌柜现在觉得该课程偏向于技术方向的数据挖掘),让掌柜对数据分析的工具(主要是Pandas、Numpy、Matplotlib以及Scikit-learn)使用和步骤有了一个大致的了解。
但是学完后还是觉得里面漏了一些细节的东西,比如时间序列那里没有讲对差分次数d的查找;泰坦尼克号项目分析的时候只浅谈了交叉验证方法等。于是掌柜就开了这个项目(还没写,就居然有人给了一个星😂惊讶),把部分章节里面漏了的细节知识补上去,权当是给自己一个重新巩固、整理知识点的机会。(当然,如果你发现掌柜有误解的地方或者你觉得有更好的补充,欢迎提出来,谢谢!) 如果对你有帮助,那就更好了!
废话就到这里,下面就看第十一章:
这章主要讲的是关于数据清洗的,数据清洗也是数据分析面试中常考的一个点!掌柜建议可以结合之前写的那篇MySQL的数据清洗一起服用,效果更好。现在我们先看原始的数据集:
是不是很懵逼?因为数据缺少标注导致根本不清楚每一列表示的数据含义,虽然实际工作中可能很少会遇到这样的情况,但是一旦遇到了,我们就要先解决数据标注的问题。这张表是一家服装店的会员数据,所以当知道了该表格的含义后,就可以把每列的列名标注上去,然后就得到下面这张表:
其中m是男性的三围,f是女性的三围。然后再看这里的“脏”数据,因为数据量很少就比较容易发现,有缺失值、NaN值以及单位不统一等问题。
而根据陈老师总结的数据清洗规则:“完全合一”,首先需要处理的就是完整性。
PS,补充第一点:
-
如何检查数据集是否含有缺失值? 这里官方用的是isna()方法,True就是有缺失值:
但是很奇怪的是掌柜在使用该方法后直接给我报错:
。。。这就尴尬了,后来掌柜用了下面👇的isnull()方法就ok了。。。
掌柜猜测可能是版本问题,而在之前数据分析面试篇里面掌柜也提到过如何统计缺失值数量,只需要在后面加个sum()函数即可。 -
可以发现该数据集里面年龄和体重以及三围存在部分缺失值,那么第二个问题来了,缺失值的处理方法有哪些?陈老师说了三种,但是掌柜翻看众多资料后发现不止三种方法(补充第二点👆):
- 删除法(而删除法又可以细分为下面两种情况):
- 变量删除:当该变量缺失值很多且对要分析研究的问题不重要的时候可以直接删除;
- 整列/整行删除:当缺失值不是很多,占比不大的时候可用。不过该方***减少有效样本数量;
比如这里就可以用dropna()方法直接删除第九行整行的缺失值:
- 数据填充(填充法又可以细分为下面几种情况):
-
人工填充:当数据量很小的时候可考虑,大数据成百上千的就算了;
-
均值填充:这里指的是用均值(数值型)、中位数、众数(非数值型)等来填充。一般如果特征分布为正太分布时,使用平均值效果比较好,而当分布由于异常值存在而不是正太分布的情况下,使用中位数效果比较好。若是非数值型数据则用众数(即用最高频的属性值填充)。
注意:此方法易引入噪声数据,有可能影响后面的特征的分布
-
相邻值填充:即用相邻的数值来填充NaN值,分为前值填充和后值填充:
-
热卡填充:即在数据集里面找到和它最相似的对象的值来填充。该方法难点在于相似的标准不易确定,主观因素较多。
-
拟合变量预测缺失值:
-
回归预测:(后面也会细讲,这里简单介绍)即用已知的特征值带入回归模型对含缺失值的特征值进行预测并填补缺失值。前提是变量之间呈线性的关系!
-
随机森林:(后面也会详解)示例代码见下章。
-
-
算法估算缺失值:
-
KNN(K-Nearest Neighbor)算法 (这里先不对KNN算法详解,后面会有章节介绍):又叫K近邻算法,主要是先通过欧式距离确定含缺失值的样本同离它最近的K个无缺失值样本,然后再用这K个无缺失值样本的属性值加权平均来估算那个样本的缺失值。
-
EM(Expetation Maximum最大化期望值)算法:(同上👆)说到EM算法,就要先说一个概念----极大似然估计(Maximum Likelihood),简单来讲是对一件已经发生的事情进行反推,找到最有可能造成它发生的因素是什么。再回到这里用EM算法估算缺失值的方法,是先在现有观测数据和已知参数条件下,利用似然函数求出缺失值的相应条件期望;然后重新计算参数的极大似然估计值;一直迭代上面两步骤直到参数不再发生变化。不过此方法需要注意前提条件是缺失数据是随机的! 此算法虽然效果可能略好,但是计算很复杂且收敛速度也不是很好。
-
-
多重填补:
-
👆图就是多重填补的大致流程,简单解释一下:首先是用复杂的方法对每个缺失值产生一个填补值,然后形成一个填补值集合;接着对每个填补值用标准的统计分析方法进行分析;最后把各自分析的统计结果汇总,产生最终的估值就可以作为缺失值的填补。这种方法是通过产生一个缺失值的随机样本来更准确的表明由于数据缺失而导致的不确定性,能够产生更加有效的统计推断。
-
把变量映射到高维空间 (适用于样本量极大的时候)
- 优点:保证了数据的完整性
- 缺点:计算量很大
-
最后就是不处理,后面依靠神经网络和贝叶斯网络进行数据挖掘,这里不做展开。
PPS:上面处理缺失值的方法较多,个人觉得EM算法和多重填补更优;但是具体场景下该用什么方法还是要联系实际情况。
(未完待续。。。)
(下一章会把补充的知识点做成脑图,和代码一并上传GitHub方便大家理解,谢谢!)
参考资料:
pandas官方文档
数据分析中的缺失值处理
详解EM算法填补缺失值
多重填补