数据清洗方案设计(data-cleaning-planner)
拿到一份数据质量画像,先别急着动手洗。这个技能只干一件事:把「洗什么、按什么顺序洗、每步怎么验收、哪里有风险」写成一份分步清洗方案,交给人和业务确认后再执行。它不执行清洗、不修改任何数据。
何时使用
| 用户说法 | 是否触发 |
|---|---|
| 帮我出一份数据清洗方案 / 分步清洗计划 | 是 |
| 这个表该怎么洗、先洗哪一步 | 是 |
| 哪些列要先处理、哪些可以先放 | 是 |
| 缺失率这么高怎么办、先去重还是先补缺失 | 是 |
| 清洗完怎么验收 | 是 |
| 按这份质量画像排个清洗顺序 | 是 |
| 帮我直接把这批数据洗干净 / 把原表覆盖掉 | 否(本技能只出方案,不执行清洗、不修改任何数据) |
输入
一份数据质量画像(JSON 文件,UTF-8),根含 dataset、rows、columns:
{
"dataset": "客户表",
"rows": 1000,
"columns": [
{"name": "手机号", "null_rate": 0.05, "dup_rate": 0.02, "format_issue": "含分隔符", "outlier_rate": 0.0, "dtype_mismatch": true},
{"name": "年龄", "null_rate": 0.30, "dup_rate": 0.0, "format_issue": "", "outlier_rate": 0.08, "dtype_mismatch": false}
]
}
字段说明:
| 字段 | 含义 | 约束 |
|---|---|---|
dataset |
数据集名 | 可选 |
rows |
行数 | 必填(缺失 → 退出码 2) |
columns |
列画像数组 | 必填(缺失 → 退出码 2) |
columns[].name |
列名 | 可选,缺省填「列N」 |
columns[].null_rate |
缺失率 | 0~1;决定风险等级 |
columns[].dup_rate |
重复率 | >0 即触发去重步骤 |
columns[].format_issue |
格式问题描述 | 非空即触发格式标准化步骤 |
columns[].outlier_rate |
异常率 | >0.05 触发异常值处理步骤 |
columns[].dtype_mismatch |
类型是否不匹配 | true 触发类型/编码统一步骤 |
子命令
plan · 生成分步清洗方案(主功能)
python3 scripts/cleaning_planner.py plan --input profile.json
python3 scripts/cleaning_planner.py plan --input profile.json --json
按固定五步顺序输出方案:①去重 ②缺失处理 ③格式标准化 ④异常值处理 ⑤类型/编码统一。每一步给出「涉及列(按问题严重度排序)、建议规则(含阈值)、验收标准、风险提示」;未触发的步骤仍输出骨架并标注「无需执行」。
issues · 逐列诊断
python3 scripts/cleaning_planner.py issues --input profile.json
python3 scripts/cleaning_planner.py issues --input profile.json --json
逐列输出风险等级、问题清单与建议动作;无任何问题的列标注「无需清洗」。
order · 推荐执行顺序与理由
python3 scripts/cleaning_planner.py order --input profile.json
python3 scripts/cleaning_planner.py order --input profile.json --json
输出固定顺序及每一步的理由,说明顺序影响(如「先去重再补缺失,避免重复计入」)。
规则表(机械规则)
| 规则 | 触发条件 | 结果 |
|---|---|---|
| 高风险 | 列 null_rate ≥ 0.2 |
标「高风险」,缺失处理建议人工确认 |
| 中风险 | 0.05 ≤ null_rate < 0.2 |
标「中风险」 |
| 低风险 | null_rate < 0.05 |
标「低风险」 |
| 需格式/类型步骤 | format_issue 非空 或 dtype_mismatch 为真 |
触发 ③格式标准化 / ⑤类型统一 |
| 需异常值步骤 | outlier_rate > 0.05 |
触发 ④异常值处理 |
| 需去重步骤 | dup_rate > 0 |
触发 ①去重 |
| 无需清洗 | 以上问题全无 | 该列标注「无需清洗」 |
固定执行顺序:① 去重 → ② 缺失处理 → ③ 格式标准化 → ④ 异常值处理 → ⑤ 类型/编码统一。
输出与退出码
- 退出码
0:方案生成成功且无高风险列; - 退出码
1:存在高风险列(缺失率 ≥0.2),需人工确认后再清洗; - 退出码
2:用法或读取错误(文件不存在、缺子命令、未知子命令、缺--input、JSON 解析失败、缺rows/columns)。
--json 输出:plan → summary{total_columns,clean_columns,need_cleaning,risk_counts,triggered_steps,total_steps} 与 steps[];issues → columns[] 与 summary;order → order[]。
使用示例
# 1. 生成分步清洗方案
python3 scripts/cleaning_planner.py plan --input test-samples/profile_dirty.json
# → 6 列;无需清洗 1、需清洗 5;高 1/中 1/低 4;触发 5/5 步;退出码 1
# 2. 逐列诊断
python3 scripts/cleaning_planner.py issues --input test-samples/profile_dirty.json
# → 年龄[高风险]缺失率0.30、异常率0.08;备注 无需清洗
# 3. 推荐执行顺序
python3 scripts/cleaning_planner.py order --input test-samples/profile_dirty.json
# → 1 去重 → 2 缺失处理 → 3 格式标准化 → 4 异常值处理 → 5 类型/编码统一
注意事项
- 只出方案、不执行清洗:脚本只读画像、只打印到 stdout,不修改任何数据、不写文件、不联网。
- 规则阈值是默认口径:0.2 / 0.05 等阈值是通用建议值,落地前需结合业务确认。
- 风险等级只看缺失率:高风险 / 中风险 / 低风险由
null_rate决定,其他问题以「涉及列」形式进入对应步骤。 - 画像即口径:
null_rate、dup_rate等来自用户自己统计的画像,可能不完整或有偏差,结论需人工核对。
边界声明
本技能只做数据清洗的方案设计与顺序编排:输出步骤、规则、执行顺序、验收口径与风险提示,不执行清洗、不修改任何数据、不覆盖原始表;清洗规则与阈值需结合业务确认后由人工或下游流程执行;画像数据来自用户输入,可能不完整或有偏差,所有结论仅表示「按输入口径的建议方案」,需人工核对;不联网、不写文件、不修改输入。