数据分析师如何快速发现数据质量问题
来源: | 作者:pmod6d781 | 发布时间: 2022-12-23 | 2451 次浏览 | 分享到:
在有成熟数据管理体系企业中做数据分析项目,数据分析师经过初期数据探索,就发现了很多数据质量问题。该企业有完善的数据模型设计,也有完备的数据管理流程。对于每日生产数据,有专职人员负责日常数据审核修正,不定期也邀请外部技术服务商进行数据治理。

企业用户好奇追问我们是如何发现这些数据质量问题的,当时习以为常,没有细想就回答“唯有谨慎认真而已”。但事后想想,除了数据分析师本身对数据更加敏感之外,还是有客观原因让数据分析师能在正统数据管理手段之外发现数据质量问题,同时也存在很多看起来“不值一提”的切入点,对其他数据分析项目都有参考意义。



示例案例



为让讨论更具象,参考实际项目引入一个虚拟案例(测试仪器模块的性能劣化分析)。一个车间有很多个不同类型的多功能测试台(TestBed),测试台配置不同仪器模块做测试,每轮测试持续若干天,分为安装(install)、清洁(clean)、正式测试三个阶段。在测试过程中,有各种状态监控(例如环境温度),每10分钟一条。数据库的E-R图下图所示。



一个具体仪器单元(表InstrumebtUnit)是专用的,属于某个固定的测试台(表TestBed),但与其他测试台的型号(unit_id)可能是相同的,并且一个型号的仪器在一个测试台最多配备1部。测试仪器的型号是分层次,这里假设2个层次(大类和细类)。测试周期数目(表TestTask的cycle字段)是按照测试仪器递增的,但相邻2个测试任务使用的测试仪器可能不同。



检查步骤



质量检测中,我们主要进行了3类检测,首先是直接基于当前数据库设计的schema进行检查(特别是schema的薄弱环节);然后根据主要业务约束,进行第二轮检查;最后,再通过少量案例端到端的探讨,获取业务领域的理解。这些步骤在实际中也是迭代执行。

1、基于data schema的检查

上图所示的data schema可以看出有2个潜在弱点:
1) task_id为代理主键,实际的组合主键是bed_id, unit_id与cycle,可能存在不唯一;
2) 仪器的unit_id是层次结构,存在引用层次不一致的可能性。

R语言、Python语言提供很多数据探索分析工具,如下表所示。


描述
R语言函数
组合主键的唯一性
组合主键的唯一性通常由应用逻辑来保证,但应用开发时并一并做这样的检查
aggregate(<anyField>~<compKey1>+<compKey2>+...+<compKeyN>,data=df,   FUN=length)
枚举量字段
所有的枚举类与业务领域模型是否一致
unique(<fieldName>)
多个枚举字段的组合关系
检查两个字段是否1:N关系(包括了层次结构),还是N:M关系

如果枚举值不多,可以用

table(<fieldName1>,<fieldName2>)

多个字段建的交叉关系

如果枚举值很多,可以用

aggregate(<fieldName1>~<fieldName2>,data=df, FUN=function(x){length(unique(x))})

字段数值分布
快速了解各个字段的数值分布,也可以发现一些业务语义上的超界
dfSummary(<dataFrame>)
对于数值变量,可以用range()函数
外键是否真发挥作用
因为代理主键的引入,很多外键失去本身的价值,通过两个表joint,看记录是否符合预期
merge(df1,df2,all.x=TRUE)