数据清洗
上QQ阅读APP看书,第一时间看更新

2.3 数据清洗方法

5 数据缺失值的处理方法

2.3.1 数据缺失值的处理方法

对于数据缺失值的处理,常见的方法有两种,分别是删除缺失值和填补缺失值,下面分别介绍。

1.删除缺失值

当样本数很多,并且出现缺失值的样本在整个样本中所占的比例相对较小的时候,可以使用最简单有效的方法处理缺失值的情况,那就是将有缺失值的样本直接丢弃。这通常是一种很有用的策略。不过值得注意的是,这种方法有很大的局限。它是以减少历史数据来换取信息的完备,并且丢弃了大量隐藏在这些对象中的信息,因此有可能会造成资源的大量浪费。例如在信息表中的对象本来就很少的情况下,删除少量对象就足以严重影响到信息的客观性和结果的正确性,特别是在信息表中每个属性空值的百分比变化很大时,信息表的可读性非常差。因此,在数据表中当缺失值所占比例较大,尤其是在缺失值的类型为非完全随机缺失的时候,这种方法可能导致数据发生偏离,从而引出错误的结论。

以下命令可以在数据库student表格中删除姓名列为空的记录。

2.填补缺失值

相对于删除缺失值,填补缺失值是更加常用的处理方式。它的主要思想是通过一定方法将数据库或者数据表中的缺失数据补上,从而形成完整的数据记录。在数据清洗中常见的填补缺失值的方法有人工填补和算法填补两种。

(1)人工填补

人工填补是指由人来完成填充缺失值的工作。由于最了解数据的还是用户自己,因此这个方法产生的数据偏离较小,可能是填充效果最好的一种。但是值得注意的是,该方法很费时,并且当数据规模很大、空值很多的时候,该方法是不可行的。

(2)算法填补

1)均值/众数填补法

一般来说,如果缺失值是数值型变量,则选择均值填充(以该字段存在值的平均值来插补缺失的值)。常见的均值填补法是根据缺失值的属性相关系数最大的那个属性把数据分成几个组,然后分别计算每个组的均值,最后把这些均值放入到缺失的数值里面。

如果缺失值不是数值型变量,则选择众数填补法。

【例2-1】 在数据库student表格中,用age列的平均值替代age列空值。

【例2-2】 在数据库student表格中,用age列的众数替代age列空值。

2)极大似然估计法

极大似然估计法是指在缺失类型为随机缺失的条件下,假设模型对于完整的样本是正确的,那么通过观测数据的边际分布可以对未知参数进行极大似然估计,因此这种方法也被称为忽略缺失值的极大似然估计。但是极大似然估计法有一个重要前提:适用于大样本。其缺点是该方法可能会陷入局部极值,因为它的收敛速度不是很快,并且计算很复杂。

3)热卡填补法

对于一个包含缺失值的变量,热卡填充法的做法是:在数据库中找到一个与它最相似的对象,然后用这个相似对象的值来进行填充。不同的问题可能会选用不同的标准来对相似进行判定。最常见的是使用相关系数矩阵来确定哪个变量(如变量Y)与缺失值所在变量(如变量X)最相关,然后把所有变量按Y的取值大小进行排序,那么变量X的缺失值就可以用排在缺失值前的那个对象的数据来代替了。

4)最近距离决定填补法

最近距离决定填补法是指假设现在为时间y,前一段时间为时间x,然后根据x的值把y的值填补好。该方法不适用于对时间影响比较大的数据。

5)回归填补法

回归填补法基于完整的数据集,并通过建立回归方程(模型)来进行填充。常见操作是对于包含缺失值的对象,将已知属性值代入方程来估计未知属性值,以此估计值来进行填充。例如,假设y属性存在部分缺失值,但是知道x属性,就可以用回归方法对没有缺失的样本进行模型训练,再把这个值的x属性代进去,对这个y属性进行预测,然后填补到缺失值处。当然,这里的x属性不一定是一个属性,也可以是一个属性组,这样能够降低单个属性与y属性之间的相关性影响。

6)基于贝叶斯的方法

基于贝叶斯的方法是分别将缺失的属性值作为预测项,然后根据最简单的贝叶斯方法,对这个预测项进行预测。

7)多重填补法

多重填补法的思想来源于贝叶斯估计,该方法认为待填补的值是随机的,它的值来自已观测到的值。在具体实践中通常是估计出待填补的值,然后加上不同的噪声,形成多组可选插补值。根据某种选择依据,选取最合适的填补值。多重填补法一般分为三个步骤:①为每个缺失值产生一套可能的填补值,这些值反映了无响应模型的不确定性,其中每个值都可以用来填补数据集中的缺失值,并产生若干个完整数据集合。②每个填补数据集都用针对完整数据集的统计方法进行统计分析。③对来自各个填补数据集的结果,根据评分函数进行选择,产生最终的填补值。

8)k-最近邻法

k-最近邻法是先根据欧氏距离函数和马氏距离函数来确定具有缺失值数据最近的k个元组,然后将这个k个值加权(权重一般是距离的比值)平均来估计缺失值。

9)有序最近邻法

有序最近邻法建立在k-最近邻法的基础上,它是根据属性的缺失率进行排序,从缺失率最小的开始进行填补的一种常用的数据清洗方法。这样做的好处是将算法处理后的数据也加入到对新的缺失值的计算中,这样即使丢了很多数据,依然会有很好的效果。在这里需要注意的是,欧式距离函数不考虑各个变量之间的相关性,这样可能会使缺失值的估计不是最佳的情况,所以一般都是用马氏距离进行最近邻法的计算。

10)组合完整化方法

组合完整化方法是用空缺属性值的所有可能的属性取值来试,并从最终属性的约简结果中选择最好的一个作为填补的属性值。这是以约简为目的的数据补齐方法,能够得到好的约简结果。但是,当数据量很大或者在数据中缺失的属性值较多时,其计算的代价很大。

2.3.2 噪声数据的处理方法

噪声数据是指数据中存在着错误或异常(偏离期望值)的数据,这些错误或异常数据对大数据分析造成了干扰。常见的噪声数据主要包括错误数据、假数据和异常数据。本小节主要讲述异常数据的处理。

1.异常数据的处理

表2-1描述了异常数据的常见处理方法。

表2-1 异常数据的常见处理方法

值得注意的是,在数据预处理时,异常数据是否删除,须视具体情况而定,因为有些异常数据可能蕴含着有用的信息。

2.异常数据的检测

在数据清洗中,异常数据的检测十分重要。对于异常数据的观察和检测,常使用以下几种方法。

(1)分箱法

分箱法是一种简单常用的数据清洗方法,该方法通过考察相邻数据来确定最终值。所谓“分箱”,实际上就是按照属性值划分的子区间。如果一个属性值处于某个子区间范围内,就称把该属性值放进这个子区间所代表的“箱子”内。把待处理的数据(某列属性值)按照一定的规则放进一些箱子中,并考察每一个箱子中的数据,采用某种方法分别对各个箱子中的数据进行处理。在采用分箱技术时,需要确定的两个主要问题就是:如何分箱以及如何对每个箱子中的数据进行平滑处理。常见的分箱法有如下几种。

1)等深分箱法:每个箱子中具有相同的记录数。箱子的记录数称为箱子的深度。

2)等宽分箱法:在整个数据值的区间上进行平均分割,使得每个箱子的区间相等,该区间被称为箱子的宽度。

3)用户自定义分箱法:根据用户自定义的规则进行分箱处理,当用户明确希望观察某些区间范围内的数据分布时,使用这种方法可以方便地帮助用户达到目的。

(2)平滑处理

在分箱之后,需要对每个箱子中的数据进行平滑处理。平滑处理方法主要有按平均值平滑、按边界值平滑和按中值平滑。

1)按平均值平滑:对同一个箱子中的数据求平均值,用平均值替代该箱子中的所有数据。

2)按边界值平滑:用距离较小的边界值替代箱子中的所有数据。

3)按中值平滑:取箱子中数据的中值,用来替代箱子中的所有数据。

(3)回归法

回归法是试图发现两个相关的变量之间的变化模式,通过使数据适合一个函数来平滑处理数据,即通过建立数学模型来预测下一个数值,包括线性回归和非线性回归。线性回归涉及找出拟合两个属性(或变量)的“最佳”直线,使得可以用一个属性来预测另一个。非线性回归是线性回归的扩展,其涉及的属性多于两个,并且是将数据拟合到一个多维曲面。图2-7所示为回归法。

(4)聚类分析

聚类分析是指将数据集合分组为若干个簇,在簇外的值即为孤立点,这些孤立点就是噪声数据,应当删除或替换。图2-8所示为聚类分析。

图2-7 回归法

图2-8 聚类分析

从图2-9可以看出,在圆外的点即为噪声数据。

(5)估算分析法

对于极个别的异常数据,还可以采取估算分析法,例如可以使用平均值、中值、mode估算方法等来实现。此外,在估算之前,应该首先分析该异常值是自然异常值还是人为的。如果是人为的,则可以用估算值来估算。除此之外,还可以使用统计模型来预测异常数据观测值,然后用预测值估算它。

(6)3σ原则

3σ原则是指如果数据服从正态分布,那么在3σ原则下,异常数据为一组测定值中与平均值的偏差超过3倍标准差的值。因此,如果数据服从正态分布,那么距离平均值3σ之外的值出现的概率为P(|x-μ| > 3σ)≤0.003(属于小概率事件),即可认为是异常数据。如果数据不服从正态分布,也可以用远离平均值的多少倍标准差来描述。图2-9所示为用3σ原则来检测异常数据。

图2-9 3σ原则

2.3.3 冗余数据的处理方法

冗余数据既包含重复的数据,也包含对分析处理的问题无关的数据,通常采用过滤数据的方法来处理冗余数据。例如,对于重复数据采用重复过滤的方法,对于无关的数据则采用条件过滤的方法。

(1)重复过滤

重复过滤方法是指在已知重复数据内容的基础上,从每一个重复数据中抽取一条记录保存下来,并删掉其他的重复数据。

(2)条件过滤

条件过滤方法是指根据一个或者多个条件度数据进行过滤。在操作时对一个或者多个属性设置相应的条件,并将符合条件的记录放入结果集中,将不符合条件的数据过滤掉。例如可以在电子商务网站中对商品的属性(品牌、价格等)进行分类,然后根据这些属性进行筛选,最终得到想要的结果。

2.3.4 数据格式与内容的处理方法

在数据集中,如果数据是由系统日志而来,那么通常在格式和内容方面与元数据的描述一致。而如果数据是由人工收集或用户填写而来,则有很大可能在格式和内容上存在一些问题。简单来说,数据格式与内容的问题包含以下几类。

(1)时间、日期、数值、全半角等显示格式不一致

这种问题通常与输入端有关,在整合多来源数据时也有可能遇到,对该类问题的处理较简单,将其处理成一致的某种格式即可。

(2)内容中有不该存在的字符

这种问题是指数据中的某些内容可能只包括一部分字符,或者在数据中的头、尾、中间出现空格等。例如在姓名中存在数字,身份证号码中出现汉字等问题。这种情况下,需要以半自动校验半人工方式来找出可能存在的问题,并去除不需要的字符。

(3)内容与该字段应有内容不符

这种问题是指在数据表中的数据值与数据字段存在不对应的现象。例如,在数据输入中将姓名写成了性别,身份证号写成了手机号,身高写成了体重等,均属于这种问题。但该类问题的特殊性在于:并不能简单地以删除来处理,因为成因有可能是人工填写错误,也有可能是前端没有校验,还有可能是导入数据时部分或全部存在列没有对齐的问题,因此要详细识别问题类型,再根据具体情况进行不同的处理。