1. 数据质量检查概述
数据质量是数据分析与数据工程的基石。在开始编写 Python 数据质量检查脚本之前,必须建立对数据质量的统一认知:它是什么、为什么重要、以及常见的质量问题有哪些分类。本章将为你构建完整的知识框架。
1.1 什么是数据质量
数据质量(Data Quality)是指数据在特定使用场景下满足业务需求的程度。它不是一个单一指标,而是一组多维度的度量标准,衡量数据是否“可信、可用、可理解”。
从技术视角看,数据质量涵盖数据在采集、存储、处理、传输全生命周期中的正确性与一致性。从业务视角看,数据质量直接决定分析结论的可信度和业务行动的有效性。
1.2 数据质量的重要性
低质量数据带来的代价往往是隐性的,但影响巨大。以下表格总结了数据质量在不同层面的关键影响:
| 影响维度 | 具体表现 | 典型后果 |
|---|---|---|
| 业务决策 | 报表指标失真、趋势误判 | 错误的市场策略、资源浪费 |
| 运营效率 | 数据清洗耗时、人工核对频繁 | 团队生产力下降、交付延迟 |
| 合规风险 | 监管报送数据不准确 | 罚款、声誉损失、法律诉讼 |
| 机器学习 | 训练数据含噪声、标签错误 | 模型精度低、推理结果不可靠 |
| 系统集成 | 字段格式不一致、主键冲突 | ETL 失败、数据仓库质量恶化 |
1.3 常见数据质量问题分类
业界通常将数据质量问题归纳为五大维度:完整性、准确性、一致性、时效性、唯一性。这五个维度构成了数据质量检查脚本的核心检查项。
下面的 SVG 图展示了五维质量模型及其典型问题示例,帮助你建立全局认知:
1.4 五维质量问题详解
每个维度都有其特定的检查目标和典型场景。下面逐一展开说明:
完整性(Completeness)
完整性衡量数据是否存在缺失。缺失可能表现为 NULL 值、空字符串、或占位符(如 "N/A"、"Unknown")。在 Python 脚本中,通常使用 isnull()、isna() 或自定义空值检测函数来统计缺失率。
- 检查目标: 必填字段无缺失、缺失率在业务容忍阈值内
- 典型问题: 用户表中手机号字段 30% 为空、订单表中金额字段出现 NULL
- Python 检查方式:
df['col'].isnull().sum() / len(df)
准确性(Accuracy)
准确性指数据值是否真实反映客观事实。准确性检查通常需要参照外部标准或业务规则,例如年龄不能为负数、日期不能为 1900-01-01 等占位值。
- 检查目标: 数据值在合理范围内、符合业务逻辑
- 典型问题: 订单金额为 -100 元、用户年龄为 200 岁
- Python 检查方式: 范围校验
df[(df['age'] < 0) | (df['age'] > 120)]
一致性(Consistency)
一致性要求同一数据在不同系统、不同表、不同字段之间保持逻辑统一。常见场景包括单位换算一致、编码标准一致、关联字段值匹配。
- 检查目标: 跨表/跨系统数据无矛盾、格式统一
- 典型问题: 订单表金额单位为“元”,退款表金额单位为“分”;性别字段同时存在 "男"/"M"/"1"
- Python 检查方式: 值域枚举校验
df['gender'].isin(['男','女'])
时效性(Timeliness)
时效性衡量数据是否在预期时间范围内可用且最新。对于实时数据管道和报表系统,时效性至关重要。
- 检查目标: 数据更新时间在预期窗口内、无未来时间戳
- 典型问题: 昨日报表中包含了明天的数据、数据延迟超过 SLA 阈值
- Python 检查方式: 时间戳范围检查
df['dt'] <= datetime.now()
唯一性(Uniqueness)
唯一性确保每条数据记录在业务主键维度上只出现一次,不存在重复。
- 检查目标: 主键无重复、业务唯一约束满足
- 典型问题: 同一订单 ID 出现多次、用户邮箱重复注册
- Python 检查方式:
df.duplicated(subset=['order_id']).sum()
1.5 五维质量检查对照表
下表汇总了五个维度的核心检查项、Python 常用函数及业务示例,方便你在后续章节编写脚本时快速查阅:
| 维度 | 核心检查项 | Python 常用函数 | 业务示例 |
|---|---|---|---|
| 完整性 | 缺失值检测、空值率统计 | isnull()、isna()、fillna() |
用户注册表中手机号缺失率 < 5% |
| 准确性 | 范围校验、格式校验、异常值检测 | between()、str.match()、Z-score |
订单金额在 0.01 ~ 100000 之间 |
| 一致性 | 值域枚举、跨表关联校验、单位换算 | isin()、merge()、map() |
省份字段统一使用 GB/T 2260 编码 |
| 时效性 | 时间范围检查、延迟检测、过期数据标记 | pd.to_datetime()、时间差计算 |
交易时间不超过当前时间 24 小时 |
| 唯一性 | 主键重复检测、组合唯一约束 | duplicated()、drop_duplicates() |
订单 ID 在订单表中唯一 |
1.6 数据质量检查脚本的工作流程
在后续章节中,我们将用 Python 实现一个完整的数据质量检查脚本。下图展示了脚本的核心工作流程,帮助你理解每个检查维度的执行顺序: