编辑导读:数据清洗是指发现并纠正数据文件中可识别的错误的**一道程序,包括检查数据一致性,处理无效值和缺失值等。本文作者从自身工作经历出发,以租赁大数据看板建设过程中的数据清洗为例,进行分析,与你分享。

最近在接触学习BI(Business Intelligence,商业智能)相关的内容,抽取了部分租赁的业务数据导入BI软件进行分析,由于数据的年份跨度较大,且都来源于线下录入,早期字段约束较少、业务审核相关机制不健全,导致部分字段统计经常报错,或者与理想情况差距过大。遇到这种情况时就要引进“数据清洗”流程,将不对劲的数据进行排除。

数据清洗是指发现并纠正数据文件中可识别的错误的**一道程序,包括检查数据一致性,处理无效值和缺失值等。与问卷审核不同,录入后的数据清理一般是由计算机而不是人工完成。
——某度词条
但是数据清洗过程中,如果仅仅是做一些常规判断,例如租赁订单中的用户支付金额,理应大于0元,房子的面积不能为0平方米等等,经过简单处理之后,能解决很多异常问题,但还是会有数据异常的情况,例如只约束了订单金额不能为0元,万万没想到确有负数金额的订单以及金额为空的订单,最终导致计算出来的平均数据、各区域业绩数据排行等产生异常。以下将以数据清洗的普遍流程来讨论清洗“程度”如何衡量。

一、数据有效标志
有效标志是指一条数据为有效数据的关键标志,一般即为该数据的状态字段,如支付订单的支付状态、用户信息的注册状态、商品信息的是否删除等,对字段对数据是否可采纳起着决定性作用。
有条件的话**对原始数据做一次统计(SQL里的group by、Excel里的筛选功能等),看看一共存在几种状态,不同状态的数据量有多少。然后对照业务流程,对数据有效标志进行筛选,可以有效减少不必要的数据及其中潜在的问题,提高后续数据分析的速度和结果质量。
如果被过滤掉的异常状态的数据量超过订单的1%,则要与负责技术开发或者数据分析的同事一起,研究数据源记录的时候是不是就有问题,甚至是存在不知道的需求或潜在bug等。
例如我们的租赁订单,有多种租赁状态:

如果要分析过往已完成的租赁交易情况,那就只需要筛选其中状态码为03或状态值为“完成”的数据,其他状态的数据一概不需要理。
但如果要分析过往所有发生过的交易情况,则需要筛选状态码为00-05状态的订单,其他状态为Null、空值、-1、或其他无法理解,及N年没用遗留的业务已经废弃不再使用的值的数据,可以考虑全部过滤掉不需要。
不同分析场景下,对于数据的需求是不一样的,不要一味的最求数据的数量,如果想着就算暂时用不上也先放着,这样很可能会加重后期数据分析中筛选的工作量,占用电脑资源卡顿、甚至死机白搞了等等。
其他:生产环境上或多或少的存在用于测试的“生产验证”数据,其中可能包含一些极端场景数值,但是此类数据未实际发生过,所以一般要在数据清洗过程中去掉。
二、数据唯一性标志
就像订单要有订单号,用户要有uuid,商品有skuid一样,系统中的数据一般都需要有唯一的ID用于进行数据的检索和区分。
但是由于bug或者子订单逻辑、不同的状态的影响,可能会出现唯一性标志重复情况,此时可能会对数据分析造成一定的影响。
例如某系统中支持用户自定义域名复用的逻辑,如果一个用户注销了账号,那么其他人就可以使用此域名,如果要分析系统一共有多少个子域名时,如果单纯统计子域名记录的数量,就会有问题,此时应该先进行子域名去重,再统计数量才对。订单位数设计较短、没有设置随机值时,也很可能出现订单号重复的问题,还有员工工号重复等问题。

但既然是“唯一”的标志,那就应该挑出重复项,并按业务需求看是否需要修复原始数据,或决定重复项的取舍方案:
- 只保存**产生的一条
- 最保存最早产生的一条
- 保存其他字段完善度更高的一条等等
另外由于bug、生产环境测试、或其他不知名的问题,还可能造成订单ID为Null、空值、-1,或不规范的订单号,这些一般都伴随有其他字段数据的残缺不全等问题。
我所分析的租赁订单中,存在有订单ID为空的记录,但是极为少数,考虑到这些数据年代久远已经不可考证了,所以直接筛选保留订单ID不为空的即可。
三、字段缺失
字段缺失是数据清洗中最常见的问题之一,造成此问题的原因也多种多样,甚至可能是导出数据时分隔符设置的不对,导致把数据csv、xls等导入分析系统或Excel后造成的错误分隔导致的。

闽ICP备13000641号-4