数据画像工具 (Data Profiler)
自动化数据质量体检工具。读入 CSV/Excel 文件,对每个字段做描述性统计,按 5 个维度打出质量分(0-100),标记数据问题,输出 HTML 报告。
能力边界
支持的能力
- 输入格式:CSV、XLSX、XLS
- 自动识别列类型:数值型(numeric)、分类型(categorical/text)、日期型(datetime)、布尔型(boolean)
- 数值列统计:均值/中位数/标准差/最小/最大/Q1/Q3/IQR/全距/偏度/峰度/变异系数(CV)/零值比例/负值比例
- 异常值检测:IQR 法(温和异常 1.5xIQR + 极端异常 3.0xIQR)
- 分类列统计:频率分布(Top 10)、高基数检测(>50 唯一值)
- 文本列统计:最短/最长/均值/中位数长度、空字符串计数
- 模式识别:自动检测 Email、URL、手机号(中国大陆)字段
- 日期列统计:最小/最大日期、时间跨度天数
- 布尔列统计:True/False 计数与比例
- Spearman/Pearson 相关系数矩阵:输出 Top 20 强相关列对
- 5 维质量评分(满分 100):完整性(30分)、唯一性(15分)、一致性(20分)、有效性(20分)、时效性(15分)
- 自动标记质量问题:高缺失率、日期格式不一致、大小写/空白重复、混入类型、极端异常值、年龄/百分比范围异常、数据超期
- 输出自包含 HTML 报告
- 自动跳过缺失率 > 90% 的列
--sample参数控制最大采样行数(默认 50000)
不支持的能力
- 不支持数据库直连(MySQL/PostgreSQL 等),需先导出为 CSV/Excel
- 不支持数据清洗/修复,仅诊断不治疗
- 不支持自定义质量规则/阈值(需修改源码中的常量)
- 不支持流式/增量分析,每次全量加载到内存(大文件建议降采样)
- 不生成图表(PNG/SVG/JS chart),HTML 报告为纯表格+文字
- 不支持多 Sheet Excel 自动合并(仅读取第一个 Sheet)
- 不支持除 CSV/XLSX/XLS 之外的数据格式(如 JSON、Parquet、Feather)
- 无 Web 界面,纯 CLI
触发条件
当用户提出以下意图时调用此 Skill:
- "帮我分析这个 CSV 的数据质量"
- "检查这个 Excel 文件有没有异常值"
- "生成数据体检报告"
- "数据画像" / "数据质量检测"
- "看看这个表有哪些问题"
- "统计一下每个字段的基本信息"
- "data profiling" / "数据描述统计"
使用示例
# 基本用法
python profile.py sales_data.csv
# 指定输出路径
python profile.py data.xlsx --output reports/sales_report.html
# 限制采样行数(处理大文件)
python profile.py large_file.csv --sample 50000
输出示例(质量评分)
数据质量评分: 82.5 / 100 [A (Very Good)]
维度分解:
完整性 28.5 / 30 (缺失率: 2.3%)
唯一性 13.0 / 15 (ID列唯一率: 99.2%)
一致性 16.0 / 20 (检测到2处日期格式不一致)
有效性 15.0 / 20 (金额列存在5个极端异常值)
时效性 9.0 / 15 (最新数据: 30天前)
问题标记 (Flags):
- Column 'birth_date' 有 3 种不同日期格式
- Column 'amount' 有 42 个极端异常值(5.2%)超出 3*IQR
- Column 'status' 存在大小写不一致的重复值
- Column 'user_rating' 存在超出 [0,100] 范围的值: 23 行
FAQ
Q1: 我的 Excel 有多个 Sheet,会分析哪些?
当前只分析第一个 Sheet。如需分析其他 Sheet,请先将其导出为独立 CSV 文件。
Q2: 数据量很大(>100万行)会怎样?
默认采样前 50000 行(可通过 --sample 调整)。全量加载会受内存限制,建议对大文件使用默认采样值。
Q3: 质量评分各维度权重能自定义吗?
当前权重固定(完整性30/唯一性15/一致性20/有效性20/时效性15)。需修改 data_profiler/quality.py 中各 _score_* 函数的系数。
Q4: 报告中的异常值是怎么判定的?
数值列使用 Tukey IQR 方法:温和异常 = 超出 Q1-1.5*IQR 或 Q3+1.5*IQR,极端异常 = 超出 Q1-3*IQR 或 Q3+3*IQR。有效性维度还额外检查年龄(>120)、百分比率(>100)、极端异常值占比(>5%)等情况。
Q5: 相关性分析用的是哪种方法?
默认 Spearman 秩相关(对非线性关系更鲁棒),可通过 compute_correlation(method="pearson") 切换为 Pearson 线性相关。仅对数值列计算。
Q6: 输出报告里包含原始数据吗?
不包含。报告仅包含聚合统计值(计数、比例、频率 Top-N 等),不会泄露原始数据行。
Q7: 能否跳过某些列?
当前版本没有内置的列过滤参数。如需跳过,可预先在 Excel/CSV 中删除不需要分析的列再运行。
技术栈
| 组件 | 技术 |
|------|------|
| 数据加载 | pandas (CSV: read_csv, Excel: read_excel) |
| 统计计算 | numpy + scipy.stats (偏度/峰度) |
| 相关性 | pandas.DataFrame.corr (Spearman/Pearson) |
| HTML 报告 | 纯 Python 字符串模板,内嵌 CSS |
| CLI | argparse + rich (进度条) |
| 输出格式 | 自包含 HTML (无外部 JS/CSS 依赖) |
Scan to join WeChat group