multi-source-data-cleaner-pro

自动清洗跨格式数据,支持去重、字段对齐与质量报告生成。

已扫描
适合谁
数据分析师、业务运营人员
不适合谁
无结构化数据处理需求者、实时流式数据处理用户
国内可用性
国内友好。面向国内用户较友好。
安装难度
新手友好(★☆☆)。基于终端操作、依赖、API Key 和本地环境要求的初步判断。

安装与下载

openclaw skills install @boboy-j/multi-source-data-cleaner-pro

Skill 说明

命令、参数、文件名以原文为准

多源数据清洗 · Multi-Source Data Cleaner

将来自 5 个部门的 CSV、Excel、JSON 文件夹丢进来,自动输出一张统一干净的数据表、去重报告和数据质量评分卡。无需手动字段映射。

把 5 个部门各种格式的 CSV/Excel/JSON 一起扔进来,自动给你一张干净统一表、去重报告、数据质量评分。无需手工配字段映射。


🎯 何时使用 · When to Use

触发关键词 (中文): 清洗数据、数据清洗、合并数据、去重、缺失值、字段对齐、schema 合并、数据质量、数据预处理、ETL

触发关键词 (EN): clean data, data cleaning, deduplicate, missing values, schema reconcile, ETL, data quality, profile dataset

支持的数据源:

格式 / Format说明
CSV / TSV自动检测编码(UTF-8/GBK/BIG5)、分隔符、引号字符、标题行
Excel (.xlsx/.xls/.xlsm)支持多工作表、合并单元格、公式计算值
JSON / JSONL / NDJSON嵌套结构自动扁平化处理
Parquet / Feather原生列式读取
SQL dumps (.sql)提取 MySQL / PostgreSQL 的 INSERT 语句
日志文件通过模式识别提取结构化行

不适用场景:

  • 输入为非结构化自由文本(请先使用 NLP 提取技能)
  • 输入为二进制或专有格式且无解析器(如 Adobe Indesign、自定义 CAD 等)
  • 用户需要实时流式清洗(本工具为批处理模式)

📋 清洗流程 · Cleaning Pipeline

Step 1: 源剖析 · Source profiling

python3 scripts/profile.py --input <file-or-dir> --out profile.json

对每个源文件生成:

  • 文件格式、编码、换行符
  • Schema(列名、推断类型、空值率、基数)
  • 样本行数据
  • 质量标记:编码不匹配、类型不一致、可疑模式

Step 2: 类型推断与归一 · Type inference & normalization

scripts/normalize_types.py 执行标准化操作:

  • 数值:千位分隔符、科学计数法、货币符号 → 数值类型
  • 日期:支持 50+ 格式(如 2024-03-152024/3/1515 Mar 2024民国113年3月15日、Excel 序列号)→ ISO 8601 标准格式
  • 布尔值:Y/N/是/否/0/1/true/false/T/F/✓/✗ → boolean
  • 电话号码:统一为 E.164 格式
  • 中文姓名:全角/半角规范化
  • ID 字段:补零、前缀识别

Step 3: 缺失值处理 · Missing value handling

每列采用可配置策略(在 templates/missing_strategy.json 中定义):

  • drop_row — 该列为空时删除整行
  • mean|median|mode — 统计插补(附带插补标志列)
  • constant:<value> — 使用指定常量填充
  • forward_fill — 时间序列向前填充
  • interpolate — 数值序列线性/样条插值
  • keep_null — 保留为空(未知情况默认策略)

关键规则: 所有插补值均生成一个旁路列 <col>_imputed(布尔型),以便下游分析区分原始值与插补值。

Step 4: Schema 合并 · Schema reconciliation

scripts/reconcile_schema.py 实现跨源字段对齐,方法包括:

  • 精确名称匹配
  • 模糊匹配(Levenshtein 距离 + 中文拼音)
  • 类型兼容性检查
  • 用户提供的映射覆盖(通过 --mapping mapping.yaml 参数)

输出 crosswalk.json 记录所有列映射关系,便于审计。

Step 5: 模糊去重 · Fuzzy deduplication

scripts/dedup.py 使用可配置的阻塞 + 记录链接机制:

  • 阻塞键缩小候选范围(例如:姓名前 3 字 + 电话后 4 位)
  • 相似度评分:姓名用 Jaro-Winkler,地址用词集匹配,ID 用精确匹配
  • 阈值合并与冲突解决规则(最新者胜 / 非空最长者胜 / 权威来源优先)

生成合并组列表,供人工审查后再提交。

Step 6: 隐私字段处理 · PII handling

依据 CLEANER_PII_POLICY 设置:

  • keep — 保持原样(仅在用户明确授权时使用)
  • mask — 部分掩码(如 王*三138****56784400****1234
  • drop — 完全删除该列

自动识别常见敏感信息:姓名、身份证号、手机号、邮箱、地址、银行卡号、IP 地址、车牌号。

Step 7: 数据质量报告 · Data quality report

python3 scripts/quality_report.py --input cleaned.parquet --out dq_report.md

六项维度(参照 DAMA-DMBOK):

  • 完整性(Completeness)
  • 准确性(Accuracy,样本验证)
  • 一致性(Consistency,跨列规则)
  • 时效性(Timeliness)
  • 唯一性(Uniqueness,去重结果)
  • 有效性(Validity,正则表达式/范围校验)

每项评分 0–100 分,支持下钻查看详情。


📤 输出格式 · Output Format

output/
├── cleaned.parquet              # 主清洗数据集(如需也可输出 .csv)
├── crosswalk.json               # 源 → 目标 Schema 映射表
├── dedup_groups.json            # 待审核的合并记录组
├── dq_report.md                 # 可读性强的数据质量报告
├── dq_report.json               # 机器可读的数据质量指标
├── audit/
│   ├── per_source_profile.json
│   ├── imputation_log.csv
│   └── pii_actions.log
└── provenance.csv               # 行级溯源信息:每行数据来自哪个源

⚠️ 安全合规 · Safety & Compliance

  1. 不静默丢数据 — 所有删除/合并/填充操作均记录至 audit/ 目录。
  2. 插补标志强制启用 — 所有插补值均附加 <col>_imputed 布尔列,防止伪装成原始值。
  3. 隐私字段默认脱敏 — 除非用户明确授权 keep,否则 PII 字段默认进行掩码处理。
  4. 可逆性保障 — 原始源文件永不修改;清洗过程为非破坏性操作。
  5. 模糊去重人工介入 — 模糊合并置信度低于 0.95 的记录强制进入人工复核环节,不自动提交。
  6. 无外部网络调用 — 所有处理均本地完成;数据不会离开工作环境。

不静默丢数据,所有删除/合并/填充均记录到 audit/;填充值带标志列防止假冒原值;隐私字段默认脱敏;原始文件不修改;模糊去重低置信度合并强制人工复核;不向外部上传任何数据。


🚀 使用示例 · Usage Examples

示例 1:清洗单个混乱的 CSV 文件

python3 scripts/run_pipeline.py \
  --input sales_q1.csv \
  --output-dir ./cleaned_q1/ \
  --pii-policy mask

示例 2:合并 3 个源 CSV 文件生成统一客户表

python3 scripts/run_pipeline.py \
  --input ./customer_sources/ \
  --output-dir ./unified_customers/ \
  --dedup-keys name,phone \
  --priority-source crm_export.csv

示例 3:使用手动映射覆盖进行 Schema 合并

python3 scripts/run_pipeline.py \
  --input ./multi_team_data/ \
  --mapping mapping.yaml \
  --output-dir ./unified/

mapping.yaml:

target_schema:
  customer_id: { aliases: [客户ID, cust_id, ClientID, 编号] }
  phone:        { aliases: [手机, 联系电话, Mobile, tel] }
  signup_date:  { aliases: [注册日期, 开户日期, CreatedAt], type: date }

示例 4:仅质量扫描(只读审计)

python3 scripts/profile.py --input ./suspicious_dataset/ --out dq_audit.md --read-only

🧪 测试

cd tests && python3 -m pytest -v

测试用例包含:

  • 编码测试集(UTF-8 BOM、GBK、BIG5、Latin1)
  • 12 种日期格式变体
  • 跨 5 个源文件的模式漂移模拟
  • 合成去重数据集(10,000 条记录,含可控重复)
  • PII 回归测试套件

📚 参考资料

  • DAMA-DMBOK 数据质量维度
  • Fellegi-Sunter 概率记录关联算法
  • Jaro-Winkler 距离用于模糊匹配
  • pandaspyarrowrecordlinkage 库文档

🏷️ 标签

data ETL data-cleaning dedup schema-reconcile data-quality 数据清洗 多源整合 去重 数据质量

BJ
@boboy-j

已收录 1 个 Skill

相关推荐