首页 / 数据采集与处理 / 第6章 数据质量评估

第6章 数据质量评估

理论4课时 + 上机4课时 | 难度:中等

6.1 数据质量的五个维度

评价数据好不好,有五个标准维度: 完整性:数据有没有缺?缺了多少? 准确性:数据对不对?有没有填错的? 一致性:同一数据在不同地方是否一致? 及时性:数据是不是最新的?多久更新一次? 唯一性:有没有重复记录?

6.2 完整性评估

完整性 = 有值的记录数 / 总记录数。可以用这个指标量化数据缺失的严重程度。

import pandas as pd # 计算每列的完整率 completeness = (1 - df.isnull().sum() / len(df)) * 100 print('各列完整率(%):') print(completeness) # 计算整表的完整率 total_cells = df.shape[0] * df.shape[1] missing_cells = df.isnull().sum().sum() overall = (1 - missing_cells / total_cells) * 100 print(f'整体完整率: {overall:.2f}%') # 完整率低于90%的列标红 low_cols = completeness[completeness < 90].index.tolist() print(f'完整率低于90%的列: {low_cols}')

6.3 准确性评估

准确性评估需要结合业务规则来判断数据是否合理。比如手机号应该是11位,邮箱应该包含@符号。

# 规则1:手机号必须是11位数字 phone_valid = df['手机号'].astype(str).str.match(r'^\d{11}$') print(f'手机号有效比例: {phone_valid.mean()*100:.2f}%') # 规则2:邮箱必须包含@ email_valid = df['邮箱'].str.contains('@', na=False) print(f'邮箱有效比例: {email_valid.mean()*100:.2f}%') # 规则3:年龄必须在合理范围 age_valid = (df['年龄'] >= 0) & (df['年龄'] <= 120) print(f'年龄合理比例: {age_valid.mean()*100:.2f}%') # 综合准确率 accuracy = (phone_valid & email_valid & age_valid).mean() * 100 print(f'综合准确率: {accuracy:.2f}%')

6.4 一致性评估

一致性检查数据在不同列或不同表中是否矛盾。比如"出生日期"和"年龄"应该对应,"省份"和"城市"应该匹配。

# 检查日期一致性:注册日期不应晚于最后登录日期 inconsistent = df[df['注册日期'] > df['最后登录日期']] print(f'日期不一致记录数: {len(inconsistent)}') # 检查枚举值一致性:性别只能是男/女 valid_gender = df['性别'].isin(['男', '女']) print(f'性别规范比例: {valid_gender.mean()*100:.2f}%') # 检查金额一致性:订单金额 = 单价 * 数量 df['计算金额'] = df['单价'] * df['数量'] amount_match = (df['订单金额'] - df['计算金额']).abs() < 0.01 print(f'金额一致比例: {amount_match.mean()*100:.2f}%')

6.5 及时性评估

及时性关注数据是否足够新鲜。比如股票价格必须是实时的,昨天的价格对今天的交易决策帮助不大。

from datetime import datetime # 计算数据年龄(距离现在多久) now = datetime.now() df['数据年龄_天'] = (now - pd.to_datetime(df['采集时间'])).dt.days # 统计各年龄段的数据量 print(df['数据年龄_天'].value_counts().sort_index()) # 及时性指标:24小时内的数据占比 timely = (df['数据年龄_天'] <= 1).mean() * 100 print(f'24小时内数据占比: {timely:.2f}%')

6.6 生成数据质量报告

把各项质量指标汇总成一份报告,方便查看和存档。

report = { '总记录数': len(df), '总字段数': len(df.columns), '整体完整率(%)': round((1 - df.isnull().sum().sum() / (df.shape[0]*df.shape[1])) * 100, 2), '重复记录数': df.duplicated().sum(), '重复率(%)': round(df.duplicated().mean() * 100, 2), } for k, v in report.items(): print(f'{k}: {v}') # 保存报告 pd.DataFrame([report]).to_csv('quality_report.csv', index=False)

自学拓展素材

  • 阅读材料:DAMA-DMBOK数据管理知识体系(数据质量章节)
  • 视频教程:B站搜索"数据质量评估方法"
  • 工具:Great Expectations(Python数据验证库,开源)
  • 案例学习:搜索"数据质量报告模板",了解企业级报告格式
  • 实训数据集:使用自己清洗过的数据,编写完整质量评估报告

自学自检小问题

  1. 数据质量的五个维度分别是什么?各举一个实际例子。
  2. 如何计算一列数据的完整率?写出代码。
  3. 一致性检查和准确性检查有什么区别?
  4. 如果你的数据是"一周前的气温数据",在及时性维度上得分高还是低?为什么?
  5. 数据质量报告应该包含哪些核心指标?
基础巩固层练习
0/5
第1题 选择题
数据质量维度中,"数据是否最新"属于哪个维度?
完整性
准确性
及时性
一致性
答案解析
及时性关注数据是否足够新鲜、是否是最新的。完整性关注缺失,准确性关注正确性,一致性关注前后是否矛盾。
第2题 选择题
"同一客户在不同系统中姓名不一致"属于哪个数据质量问题?
完整性问题
准确性问题
一致性问题
及时性问题
答案解析
同一数据在不同地方不一致,这是典型的数据一致性问题。
第3题 判断题
完整性 = 有值的记录数 / 总记录数。
正确
错误
答案解析
完整性的计算公式确实是:完整性 = 有值的记录数 / 总记录数,可以用(1 - 缺失率)来计算。
第4题 选择题
以下哪个不是数据质量的评估维度?
完整性
准确性
美观性
唯一性
答案解析
数据质量的五个维度是:完整性、准确性、一致性、及时性、唯一性。美观性不是数据质量评估维度。
第5题 填空题
数据质量的五个维度是:完整性、______、一致性、及时性、唯一性。
答案解析
数据质量的五个维度是:完整性、准确性、一致性、及时性、唯一性。
0/0