3.4数据预处理(二) - 数据清洗(Data Cleaning)

简介

由于数据源在实际生活中千奇百怪,因此不经任何处理就进入数据库的数据很可能违背数据质量三要素的要求。用这样的数据在进行后续的数据挖掘,其可靠性更加堪忧。虽然在数据挖掘中,均有过程用于处理缺失数据或异常值,但是这不过是在避免建模的过拟合。如若希望尽可能小让缺失值、噪声等脏数据影响数据挖掘的结果,更有效的方法应是提高数据质量,即进行数据清理过程。

一句话解释版本:

数据清洗就是通过缺失值处理,噪声数据光滑,识别删除离散值等方法来提升数据质量的过程。

数据分析与挖掘体系位置

数据清洗是有数据预处理中的一个过程。所以其在数据分析与数据挖掘中的位置如下图所示。

数据清洗的步骤

数据清洗的步骤相对较为简单与清晰,有两个阶段:

第一步:偏差检测(Discrepancy Detection):即检查导致偏差的因素,并识别离散值与噪声值。

第二部:数据清洗(Data Cleaning):即处理缺失值与噪声。

偏差检测的方法

偏差检测的目的是为了有效的开展数据清理工作。因此,就需要在此阶段明确缺失值与噪声为何存在,数据的质量如何,数据的字段是如何定义等信息。

数据检测的方法有这样几种:

数据源与字段调研

首先,我们可以了解与数据源相关的问题,以此确定数据的质量、字段的性质。比如,我们可以通过回答这些问题来进行偏差检测:

  • 数据源是什么?有那几张表?表之间的关联关系是什么样的?
  • 数据源表的上下游关系是什么?
  • 数据源中有哪些字段?字段接口的格式是什么样子的?字段是什么类型?可接受值有哪些?

其次,我们可以通过数据描述统计中的指标对数据进行初步探索,比如:

  • 观察字段集中趋势:均值、众数、中位数
  • 观察字段离中趋势:方差、极值、分位数
  • 图表显示:盒型图、散点图

之后,我们可以考虑数据中是否存在依赖,即是否有属性之间存在线性关系或者相关关系。

数据质量调研

质量好的数据有三个属性:唯一性、连续性、一致性。从这三个层面可以检验数据的偏差性。

唯一性检验

即检验数据是否存在重复,给定属性的每个值都要不同于该属性的其他值。就是看有没有重复数据。熟悉数据库的伙伴们会知道,传统关系型数据库中,主键的一个作用就是避免重复并检验重复。设定了主键了表,不能存在重复数据。因此知道主键的是哪个属性的表可以直接通过SQL检测重复,比如,在不考虑效率等因素的傻瓜模式下,table中A是主键,其余字段有B,C。只要对比 select count(*) from table的结果与select count(*) from table group by A的结果是否一致即可,不一致,很可能就是有重复。

连续性检验

即属性的最低与最高值之间没有缺失值,有些值需要是唯一的。一般我在检验连续性时会特别关注这几个点:

  • NA值的使用
  • Null值的使用
  • 空值的使用
  • 特殊符号(如?,%)的使用
  • 制定空值的使用(如“Unknown”,“空”,“未知”)

一致性检验

一致性的检验与字段格式的说明有关,这里主要是检查数据的写入格式是否符合统一的规范,是否会存在字段过载等行为。在字段中,主要是一下三种类型:

  • 字符型(如CHAR,VARCHAR)
  • 数值型(如INTEGER,DECIMAL)
  • 日期型(如DATE,TIMESTAMP)

对每个类型,都需要查看字段接口说明,检查格式的统一。

数据清洗的方法

缺失数据填补

填补缺失值的方法有如下3大类:

直接删除:

可以删除带有缺失值的记录,也可直接删除有缺失值的属性。但在实际中不太有效,尤其是在缺失值变化多,跨多个自变量的情况下。

人工填写:

用人手工填写上确实的值,听上去就不实际且费时间。大数据的分析可以直接忽略这个方法。

自动填充:

这个方法是目前用的最为广泛的。顾名思义,用某些值自动填充缺失值。依照自动填充的值不同,可以分为如下几类:

  • 全局常量填充:用同一个常量替换所有的缺值。比如分类型的缺失值可以用“Unknown”填充,数值型的数据可以用“0”、‘空’填充。但是用全局常量填充的方法经常会造成被替换的常量值本身成为了影响模型判断的重要变量,从而影响结果的准确度。
  • 中心度量填充:数据描述统计的知识中,提到数据集中趋势有呈现数据整体趋势的作用。因此,可以通过取属性的平均值、中位数、众数等指标,来填充缺失值。
  • 同组均值填充:这个方法需要参考有缺失值记录的其他属性值。将数据按照其他属性分类做Group By,统计有缺失值一列的平均数或中位数等指标,并用其替换缺失值。用这种方法时,可以参考给定一种类型下的数据的分布,若数据skewness绝对值很大,或许中位数是更好的选择。
  • 最有可能值填充:这种方法其实就是用样本中的已有变量(X)来预测有缺失值的变量(Y)。比如,可以用回归或者朴素贝叶斯等预测缺失值应该填写什么。但是,并不是所有都能适用此种方法。在数据表中,比如如果有缺失值的属性是主键(Primary Key),像是身份证号之类的,就不要企图通过模型预测了。尽管如此,这种方法仍然在数据清理中被应用的最广。

噪声数据光滑

噪声(Noise)是变量自带的随机误差。表现在数据分析中就是值方差/标准差。噪声一般通过盒型图或散点图来识别。

在数据中如果存在噪声过多,可能会因为个别离散值而使整个数据分析挖掘的效果降低。所以,我们希望能通过各种方法光滑数据,去除噪声。方法也有下面3类:

分箱(Binning):

通过数据周围的值(临近值)来光滑有序数据。首先,将数据排序,其次将数据分入等频的箱中。将箱中的值统一替换成同样的指标值。因此,在分箱操作中,箱的宽度越大,光滑效果越明显。箱可以是等宽,也可自行定义。

这里通过指标的不同,分箱可以分为:

  • 箱均值光滑:即用每个箱中数据的平均值替换箱中每一个值。
  • 箱中位数光滑:即用每个箱中数据的中位数值替换箱中每一个值。
  • 箱边界光滑:即定义箱中的最大和最小值为边界值,用最近的那个边界值替换箱中每一个值。

回归(Regression):

将有噪声的变量拟合为一条直线(线性回归)或一条曲线(曲线回归)。这里一般的方法就是运用一元线性回归或多元线性回归,拟合出一条线或多维平面。进而使得噪声数据可以被光滑的线或面代替。

离群点分析(Outlier Analysis):

通过聚类方法检测离群点。落在集群之外的值即为离群点,可以用集群的集中趋势指标代替或直接去除。

数据清洗的工具

除了Python,R,SQL等语言,还有一些工具可以帮助进行数据清洗工作。

  • 数据清洗工具(Data Scrubbing Tool):检查与纠正数据中错误,用于分析与模糊匹配。如Potter's Wheel.
  • 数据审计工具(Data Auditing Tool):发现相关性,数据偏差,识别离群点
  • 数据迁移工具(Data Migration Tool):ETL。

猜你喜欢

转载自blog.csdn.net/Orange_Spotty_Cat/article/details/81335640
今日推荐