零基础入门——数据清洗(附代码)
数据清洗是大数据领域不可缺少的环节,用来发现并纠正数据中可能存在的错误,针对数据审查过程中发现的错误值、缺失值、异常值、可疑数据,选用适当方法进行“清理”,使“脏”数据变为“干净”数据。
——摘自《数据清洗》清华大学出版社2018年出版图书
1.数据清洗的概念
数据预处理一方面是要提高数据的质量,另一方面是要让数据更好地适应特定的挖掘技术或工具。
数据预处理的主要内容包括数据清洗、数据集成、数据变换和数据规约。处理过程如下图所示:
数据清洗主要是删除原始数据集中的无关数据、重复数据,平滑噪声数据,筛选掉与挖掘主题无关的数据,处理缺失值(Missing values)、异常值。
2.数据清洗的原理
数据清洗原理:利用有关技术如数理统计、数据挖掘或预定义的清理规则将脏数据转化为满足数据质量要求的数据。
3. 主要处理数据类型
主要为:
残缺数据
错误数据
重复数据
4. 数据清洗方法
4.1 解决不完整数据( 即值缺失)的方法
具体可参照特征插补的部分。
4.2 错误值的检测及解决方法
主要为异常值检测。主要的异常检测方法有:
4.2.1 3σ 探测方法
一般所有数据中,至少有3/4(或75%)的数据位于平均数2个标准差范围内。
所有数据中,至少有8/9(或88.9%)的数据位于平均数3个标准差范围内。
所有数据中,至少有24/25(或96%)的数据位于平均数5个标准差范围内。
所以如果我们一般是把超过三个离散值的数据称之为异常值。这个方法在实际应用中很方便的使用,但是他只有在单个属性的情况下才适用。
4.2.2 散点图
其实就是画图。把所有点都画出来。自然异常点就出来了。形如这样:
4.2.3 四分位数展布法
把异常值定义为小于上截断点,或者大于下截断点的数据称为异常值。
优点:与方差和极差相比,更加不如意受极端值的影响,且处理大规模数据效果很好。
缺点:小规模处理略显粗糙。而且只适合单个属相的检测。
4.2.4 基于分布的异常值检测
本方法是根据统计模型或者数据分布。然后根绝这些模型对样本集中的每个点进行不一致检验的方法。
不一致检验:零假设和备选假设。表示我的数据分布或者概率模型满足H1,但是如果我这个值接受另外的数据模型或者概率分布H2。那么我们就认为这个数据点与总体分布不符合,是一个异常值。
下面介绍几种方法:
4.2.4.1 Grubbs检验
这样异常值被选出来后,重复以上步骤,直到没有异常值为止。
4.2.4.2 Dixon检测方法
4.2.4.3 3t分布检验方法
上面的一些方法只适用于单维数据。而且还必须确定其数据分布,所以不是太准确。
4.2.5 基于距离的异常值检测
基于距离的定义:在样本集S中,O是一个异常值,仅当S中有p部分的距离大于d。
可以这样理解:
图中与五角星1距离超过d的有三个点。。。我们就可以说他是异常点,假如阀值是2,现在2五角星的距离超过d的只有五角星一个。所以五角星2不是异常点。当然这个距离的计算还是用到马氏距离。
优缺点:可以多维数据监测,无需估计样本的分布,但是受参数影响严重。
4.2.6 基于偏离的异常值检测
假设N的数据集,建立数据子集。求出子集间得相异度,然后确定异常值。
较为复杂,计算量大。
4.2.7 基于分类模型的异常值检测
根据已有的数据,然后建立模型,得到正常的模型的特征库,然后对新来的数据点进行判断。从而认定其是否与整体偏离,如果偏离,那么这个就是异常值。
建立贝叶斯模型
神经网络模型
分类模型
决策类分类
4.3 重复记录的检测及消除方法
数据库中属性值相同的记录被认为是重复记录,通过判断记录间的属性值是否相等来检测记录是否相等,相等的记录合并为一条记录(即合并/清除)。合并/清除是消重的基本方法。
4.4 不一致性( 数据源内部及数据源之间)的检测及解决方法
从多数据源集成的数据可能有语义冲突,可定义完整性约束用于检测不一致性,也可通过分析数据发现联系,从而使得数据保持一致。
作者介绍:邵洲,在读博士。研究兴趣:数据挖掘、学者迁徙研究。