覆盖主要内容
版本: 6.1.0

相关概念

数据清洗

数据清洗,是整个 ETL 过程中不可缺少的一个环节,其结果质量直接关系到模型效果和最终结论。在实际操作中,数据清洗通常会占据分析过程的 50%—80%的时间。 数据清洗的目的从两个角度来讲:

  1. 解决数据质量问题;
  2. 优化数据结构,提高数据分析效率;

在什么过程做数据清洗

关于数据清洗工作也有很多争论,如应该在 ETL 过程里做清洗工作,还是应该在数据仓库里做清洗工作。

数据清洗是数据质量这一更大主题的一部分,而数据质量又是数据管理这一主题的一部分。具有争议的是,数据质量问题应该在根源处解决,也就是事物型的业务系统里解决。

如果这些数据在源系统里不能被清洗掉,那只能在它上一级,加载到数据仓库之前清洗掉,这样带来的问题就是数据仓库里的数据和源系统里的数据不一样。

DataVault 模型的倡导者 Arkady Maydanchik 等人在这个问题上有不同观点:

  1. 数据应该按照原样保存在数据仓库里,只有在移动到数据集市里,按照要求再做清洗。这样在加载时刻的数据都原封不动保存下来,便于以后追踪。ETL 开发人员的工作量没有减少,只是放到了数据处理环节的下游;
  2. 因为每个数据集市是单一的实体,所以 ETL 开发人员的工作量可能还会增加。所以设计可复用的数据清洗转换是 ETL 开发过程中的一个重要部分;

注意:Arkady Maydanchik 提出了如下的数据质量的五个规则:

  • 属性值域约束:每个属性的取值范围域的约束;
  • 关系完整性规则:检查数据的唯一性和参照性约束,这种约束可以从关系数据模型得到;
  • 历史数据规则:对时间相关的数据,要进行时间轴的约束,值的模式匹配;
  • 对象的状态依赖规则:检验数据是否满足所谓的状态机模型的约束;
  • 一般依赖规则:描述复杂的属性的关系,包括冗余、派生、部分依赖和相关性的属性;

数据清洗的步骤

数据清洗的步骤大体可以分为这么几步:

  1. 预处理阶段:将数据导入处理工具;
  2. 数据探索阶段:对数据进行初步的探索,包含两个部分:
    1. 元数据探索,包括字段解释、数据来源、代码表等等一切描述数据的信息;
    2. 样例数据探索,抽取一部分数据,使用人工查看方式,对数据本身有一个直观的了解,并且初步发现一些问题,为之后的处理做准备;
  3. 分析处理阶段,该阶段主要是对数据进行分析处理,包括数据清洗、数据转换、数据标准化等
    1. 缺失值清洗:去除不需要的字段:对某些字段内容,数据分析过程可能用不上,就需要将其删除,直接 delete,建议清洗的每一步都做备份,防止错删;
    2. 填充缺失内容:该字段需要使用,但是某些数据上该字段缺失,需要使用默认值,或者计算结果(均值、中位数、众数等)填充上去;
    3. 重新取数:如果某些字段数据非常重要,但是数据缺失又很严重,需要通过其他渠道重新获取数据将数据填充进去;
    4. 格式内容清洗:时间日期、数值、全半角显示不一致等:这种问题通常与输入端有关,一般出现在整合多来源数据时,将其处理成一致的某种格式即可;
    5. 内容中有不该存在的字符:某些内容可能只包括一部分字符,比如身份证号是数字+字母。最典型的就是头、尾、中间的空格,也可能出现姓名中存在数字符号、身份证号中出现汉字等问题。这种情况下,需要以半自动校验半人工方式来找出可能存在的问题,并去除不需要的字符;
    6. 内容与该字段应有内容不符:一般数据获取时会有前端校验,但是也不乏这些问题会出现,此时可以将非重要字段去除掉,重要字段做缺失值处理,处理方式就是上面提到的缺失值清洗;
    7. 逻辑错误清洗:
      1. 去重:建议把去重放在格式内容清洗之后,原因举例:多个空格导致工具认为“吴亦凡”和“吴 亦凡”不是一个人,去重失败。而且,并不是所有的重复都能这么简单的去掉;
      2. 去除不合理值:有人填表时候瞎填,年龄 200 岁,年收入 100000 万(估计是没看见”万“字),这种的就要么删掉,要么按缺失值处理;
      3. 修正属性依赖冲突:某些字段之间是可以相互验证的,比如北京市和北京市的邮政编码,身份证号和年龄,籍贯等。此时需要指定一个可靠的字段,然后去除或者重构不可靠的字段。比如:身份证号字段上显示是 20 岁,但是年龄字段值为 28 岁,可以以身份证上的信息作为可靠字段,将年龄字段改为 20 岁;
      4. 非需求数据清洗:删除不需要的字段;
    8. 校验:
      1. 数据格式校验:验证数据格式是不是都符合标准化格式;
      2. 关联性校验:数据来源可能有多个渠道,如果多个渠道获取的同一信息出现不一致的情况,需要重新判断调整数据值,或者去除数据;
      3. 数据清洗过程中出现了很多判断问题,一条数据是不是合乎标准,是否存在错误,可以通过相应算法去实现;

数据校验

数据校验是在数据抽取、清洗转换流程完成之后,通过一系列的校验规则,定位到错误数据,并将异常数据推送给下游处理,最终提升数据质量的环节。 数据校验是数据质量的重要保障,目前业内认可的数据质量的标准有:

  • 准确性: 描述数据是否与其对应的客观实体的特征相一致;
  • 完整性: 描述数据是否存在缺失记录或缺失字段;
  • 一致性: 描述同一实体的同一属性的值在不同的系统是否一致;
  • 有效性: 描述数据是否满足用户定义的条件或在一定的域值范围内;
  • 唯一性: 描述数据是否存在重复记录;
  • 及时性: 描述数据的产生和供应是否及时;
  • 稳定性: 描述数据的波动是否是稳定的,是否在其有效范围内。

以上列出的数据质量标准只是一些通用的规则,这些标准是可以根据数据的实际情况和业务要求进行扩展。 由数据质量的标准,对应通用的校验规则有:

  • 单字段校验:通过单一字段的约束条件进行校验,包含不为空、比较运算、包含、不包含、取值范围(区间)、取值范围(枚举)、字段长度、字段类型、正则表达式等规则,可用于校验数据的准确性、完整性等;
  • 勾稽关系校验:校验字段通常和其他字段做勾稽对比,利用字段平衡关系(衍生计算)来进行校验;
  • 唯一性校验:针对单一字段或者多个字段组合后做唯一性约束校验,通过重复记录行或其他违反唯一性约束属性值进行校验;
  • 关联性校验:针对字段的关联关系校验,通过引入其他关联字段验证字段的存在和缺失进行校验;
  • 记录行统计型校验:针对某个字段的记录行总数做校验,通过统计记录行数量与合理阈值范围比较来进行校验;
  • 多源对比校验:针对多个数据源的数据进行对比校验,通过关联字段和对比字段的对比,以校验通过率高或匹配率高的数据知晓哪个数据源的数据质量高。