顾名思义,数据清洗就是把“脏”的“洗掉”,是发现和纠正数据文件中可识别的错误的过程,如检查数据一致性,处理无效值和缺失数据等。针对原始数据中所出现的数据问题以及业务需求的不同,数据清洗所采取的方法和策略同样会有较大的差别。
有空缺数据的清洗
噪声数据的消除
所谓噪声数据,是指数据集中的干扰数据,或对场景描述不准确的数据,是一种出现在某属性上的随机误差或变异的数据。实际应用中的数据基本上是有干扰的。例如,信用卡发放数据过程可能存在以下错误:
标记错误:应该发卡的客户标记成不发卡,或者两个数据相同的客户一个发卡一个不发卡。
输入错误:用户的数据本身就有错误,例如年收入少写一个0、性别写反了等。
以上这些错误将给信用卡发放数据带来噪声数据。对噪声数据的处理方法通常是:
分箱(Binning)方法:通过考察属性值的周围值来平滑属性的值。属性值被分布到一些等深或等宽的“箱”中,用箱中属性值来替换“箱”中的属性值。具体有按箱平均值平滑、按箱边界平滑两种方法。
回归(Regression)方法:用一个函数拟合数据来平滑数据。线性回归涉及找出拟合两个属性(或变量)的“最佳”直线,使得一个属性可以用来预测另一个。多元线性回归是线性回归的扩充,其中涉及的属性多于两个,并且数据拟合到一个多维曲面。
离群点分析(OutlierAnalysis):可以通过聚类来检测离群点。聚类将类似的值组织成群或“簇”。直观地,落在簇集合之外的值被视为离群点。
不一致数据的处理
重复数据的清洗
重复数据的检测算法可以细分为基于字段匹配的算法、递归的字段匹配算法、SmithWaterman算法、基于编辑距离的字段匹配算法和改进余弦相似度函数。重复数据的处理可以按规则去重,编写一系列的规则对重复情况复杂的数据进行去重。例如不同渠道来的客户数据,可以通过相同的关键信息进行匹配,合并去重。目前,消除重复记录的基本思想是“排序和合并”,先将数据库中的记录排序,然后通过比较邻近记录是否相似来检测记录是否重复。消除重复记录的算法主要有近邻排序算法、优先队列算法和多趟近邻排序。
检测数据集中重复记录,其常用的方法是基于近邻排序算法。该算法的基本思想是:将数据集中的记录按指定的关键字排序,并在排序后的数据集上移动一个固定大小的窗口,通过检测窗口里的记录来判定它们是否匹配,以此减少比较记录的次数。具体来说,主要步骤如下:
数据排序:按上一步生成的关键字为数据集中的数据排序。尽可能使潜在的重复记录调整到一个近邻的区域内,以将记录匹配的对象限制在一定的范围之内。
合并:在排序的数据集上依次移动一个固定大小的窗口,数据集中每条记录仅与窗口内的记录进行比较。如果窗口的大小包含m条记录,则每条新进入窗口的记录都要与先前进入窗口的m-1条记录进行比较,以检测重复记录。在下一个窗口中,当最先进入窗口的记录滑出窗口后,窗口外的第一条记录移入窗口,且把此条记录作为下一轮的比较对象,直到数据集的最后位置。