4.2 数据清洗不可少——数据清洗
31 Oct 2019
现实世界中的数据通常是不完整的、有噪声的和不一致的。因此每拿到一批原始数据,我们首先需要对数据进行清洗。数据清洗是对数据进行重新审查和校验的过程,目的在于删除重复信息、纠正错误信息、保证数据的一致性。本节将介绍用MySQL进行数据清洗的方法,其中包括:处理缺失值、剔除重复值、识别异常值、发现数据不一致。
4.2.1处理缺失值
缺失值是指原始数据中缺少部分信息而造成某个变量或某些属性值不完整。缺失值产生的原因主要分为机器原因和人为原因。前者是由于机器导致的数据收集或记录失败造成的数据缺失,后者是由于人主观失误或有意隐瞒造成的数据缺失。对于缺失值的处理,常用方法主要包括:估算填充、样本删除、字段删除。
本节使用样例表order_inf,表结构及创建语句如下:
字段名称 | 数据类型 | 备注 |
---|---|---|
ordercode | varchar(20) | 订单编号 |
username | varchar(20) | 用户名 |
consignee | varchar(20) | 收货人 |
pay_date | varchar(20) | 支付日期 |
province | varchar(20) | 收货省份 |
city | varchar(20) | 收货城市 |
total_amount | float(20) | 订单金额 |
carriage | float(20) | 运费 |
remark | varchar(20) | 备注 |

我们查看order_inf表中所有的字段,MySQL输入及输出如下:

接下来将数据插入order_inf表中,再执行查询语句,MySQL输入及输出如下:

(1)估算填充
估算填充是指用估算值填充变量缺失数据的部分。估算值一般会选择变量的均值、中位数或者众数,这种填充方法能够使得数据分布较为均匀,但同时也会产生已有数据信息失真的问题。MySQL中使用select语句和update语句处理估算填充的问题。
【例】用众数填充carriage运费字段缺失部分,MySQL输入及输出如下:


(2)样本删除
样本删除是指剔除缺失值较多的样本,这种方法比较适合整体样本量较大,且含有多个缺失值的样本比重较小的情况。MySQL中使用delete from语句处理整例删除的问题。
【例】删除缺失值过多的样本数据,MySQL输入及输出如下:

(3)字段删除
如果某个字段的缺失值特别多,且该字段对于所研究的问题不是特别重要,则可以考虑将该字段删除。MySQL中使用alter table语句处理字段删除的问题。
【例】删除缺失值过多的字段,MySQL输入及输出如下:

4.2.2 剔除重复值
重复值是指同一数据被多次记录在数据库中。重复值的出现会导致数据冗余并影响统计结果的精确性,因此在进行数据分析前,需要根据业务需求考虑是否剔除重复值。MySQL中使用distinct关键字剔除重复值。
【例】剔除order_inf表中具有重复数据的记录,MySQL输入及输出如下:

4.2.3 识别异常值
异常值是指一组数据中与平均值偏差超过两倍标准差以上的数据。异常值的出现会使得该组数据分布不均匀,从而导致估算偏误。但异常值并不一定是错误值,它可能反映了某个特定节点的突发性状况。因此我们需要识别异常值,然后根据具体业务信息判断异常值的取舍。
MySQL中使用聚合函数识别异常值,输入及输出如下:
【例】查询total_amount中的异常信息。

4.2.4 发现数据不一致
数据不一致是指各类数据之间具有不相容性,具体体现为单组数据之间数据编码格式不同,或者是多组数据之间数据记录相互矛盾。MySQL使用update语句修改数据不一致的情况,输入与输出如下:
【例】更新pay_date字段使得日期格式一致。

【例】更新province字段使得收货城市与省份数据一致。

分类: 数据库技术