关于 data-exploration
面向分析人员与团队的数据探索技能,用于系统检查陌生数据集。内容涵盖表与列分析、数据质量检查、模式和关系发现,以及架构文档编写。
主要功能
- 01表结构评估
- 02列级分析方法
- 03完整性与一致性检查
- 04分布与时间模式分析
- 05关系与相关性发现
- 06架构与数据血缘文档
适用场景
- 01分析前检查陌生数据集
- 02查找缺失、不一致或可疑值
- 03探索时间序列中的趋势与分群
- 04记录架构及上游数据依赖
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ anthropics/ knowledge-work-plugins --skill data-exploration安装后在 Claude Code 中输入/data-exploration确认已加载。
详细介绍
数据探索 Skill
用于系统化剖析数据集、评估数据质量、发现数据模式和理解数据模式结构的方法论。
数据剖析方法论
阶段 1:结构理解
在分析任何数据之前,先了解其结构:
表级问题:
- 有多少行和多少列?
- 粒度是什么(每行代表什么)?
- 主键是什么?是否唯一?
- 数据最后一次更新是什么时候?
- 数据可以追溯到多久以前?
列分类: 将每一列归类为以下之一:
- 标识符:唯一键、外键、实体 ID
- 维度:用于分组/筛选的分类属性(状态、类型、地区、类别)
- 指标:用于度量的定量值(收入、数量、时长、分数)
- 时间:日期和时间戳(created_at、updated_at、event_date)
- 文本:自由格式文本字段(描述、备注、名称)
- 布尔:真/假标志
- 结构化:JSON、数组、嵌套结构
阶段 2:列级剖析
对于每一列,计算:
所有列:
- 空值数量和空值率
- 去重计数和基数比率(去重数 / 总数)
- 最常见的值(前 5-10 个及其频率)
- 最不常见的值(后 5 个,用于发现异常)
数值列(指标):
min, max, mean, median (p50)
standard deviation
percentiles: p1, p5, p25, p75, p95, p99
zero count
negative count (if unexpected)
字符串列(维度、文本):
min length, max length, avg length
empty string count
pattern analysis (do values follow a format?)
case consistency (all upper, all lower, mixed?)
leading/trailing whitespace count
日期/时间戳列:
min date, max date
null dates
future dates (if unexpected)
distribution by month/week
gaps in time series
布尔列:
true count, false count, null count
true rate
阶段 3:关系发现
在对单个列进行剖析之后:
- 外键候选:可能关联其他表的 ID 列
- 层级结构:形成自然下钻路径的列(国家 > 省 > 市)
- 相关性:变化趋势一致的数值列
- 派生列:看起来由其他列计算得出的列
- 冗余列:信息完全相同或几乎相同的列
质量评估框架
完整性评分
为每一列评级:
- 完整(非空率 >99%):绿色
- 基本完整(95-99%):黄色 -- 调查空值原因
- 不完整(80-95%):橙色 -- 了解原因并判断是否重要
- 稀疏(<80%):红色 -- 若不进行填充插补,可能无法使用
一致性检查
注意以下情况:
- 值格式不一致:同一概念以不同方式表示("USA"、"US"、"United States"、"us")
- 类型不一致:数字存储为字符串,日期格式多样
- 引用完整性:外键与任何父记录都不匹配
- 业务规则违反:负数数量、结束日期早于开始日期、百分比超过 100
- 跨列一致性:状态为"completed"但 completed_at 为空
准确性指标
提示存在准确性问题的危险信号:
- 占位值:0、-1、999999、"N/A"、"TBD"、"test"、"xxx"
- 默认值:某个单一值出现频率异常偏高
- 陈旧数据:在活跃系统中,updated_at 显示没有近期变更
- 不可能的值:年龄 > 150、遥远未来的日期、负的持续时间
- 整数偏好:所有值都以 0 或 5 结尾(表明是估算而非测量得出)
时效性评估
- 表最后一次更新是什么时候?
- 预期的更新频率是多少?
- 事件时间与加载时间之间是否存在延迟?
- 时间序列中是否存在缺口?
模式发现技术
分布分析
对于数值列,刻画其分布特征:
- 正态:均值与中位数接近,呈钟形
- 右偏:高值端有长尾(常见于收入、会话时长)
- 左偏:低值端有长尾(较少见)
- 双峰:两个峰值(表明存在两个不同的群体)
- 幂律:少数极大值,大量小值(常见于用户活动)
- 均匀:各取值范围内频率大致相等(通常为合成或随机数据)
时间模式
对于时间序列数据,需关注:
- 趋势:持续的上升或下降走势
- 季节性:重复出现的模式(每周、每月、每季度、每年)
- 星期效应:工作日与周末的差异
- 节假日效应:已知节假日前后的下跌或飙升
- 变化点:水平或趋势的突然转变
- 异常:打破既有模式的个别数据点
分群探索
通过以下方式识别自然分群:
- 查找取值为 3 至 20 个不同值的分类列
- 比较各分群取值之间的指标分布
- 寻找行为存在显著差异的分群
- 检验各分群是同质的还是包含子分群
相关性探索
针对数值列:
- 计算所有指标对之间的相关矩阵
- 标记强相关(|r| > 0.7)以供进一步调查
- 注意:相关不等于因果,需明确标注这一点
- 检查是否存在非线性关系(例如二次关系、对数关系)
模式理解与文档编写
模式文档模板
为团队使用而记录数据集时:
## Table: [schema.table_name]
**Description**: [What this table represents]
**Grain**: [One row per...]
**Primary Key**: [column(s)]
**Row Count**: [approximate, with date]
**Update Frequency**: [real-time / hourly / daily / weekly]
**Owner**: [team or person responsible]
### Key Columns
| Column | Type | Description | Example Values | Notes |
|--------|------|-------------|----------------|-------|
| user_id | STRING | Unique user identifier | "usr_abc123" | FK to users.id |
| event_type | STRING | Type of event | "click", "view", "purchase" | 15 distinct values |
| revenue | DECIMAL | Transaction revenue in USD | 29.99, 149.00 | Null for non-purchase events |
| created_at | TIMESTAMP | When the event occurred | 2024-01-15 14:23:01 | Partitioned on this column |
### Relationships
- Joins to `users` on `user_id`
- Joins to `products` on `product_id`
- Parent of `event_details` (1:many on event_id)
### Known Issues
- [List any known data quality issues]
- [Note any gotchas for analysts]
### Common Query Patterns
- [Typical use cases for this table]
模式探索查询
连接到数据仓库时,可使用以下模式来发现数据结构:
-- List all tables in a schema (PostgreSQL)
SELECT table_name, table_type
FROM information_schema.tables
WHERE table_schema = 'public'
ORDER BY table_name;
-- Column details (PostgreSQL)
SELECT column_name, data_type, is_nullable, column_default
FROM information_schema.columns
WHERE table_name = 'my_table'
ORDER BY ordinal_position;
-- Table sizes (PostgreSQL)
SELECT relname, pg_size_pretty(pg_total_relation_size(relid))
FROM pg_catalog.pg_statio_user_tables
ORDER BY pg_total_relation_size(relid) DESC;
-- Row counts for all tables (general pattern)
-- Run per-table: SELECT COUNT(*) FROM table_name
血缘与依赖关系
探索不熟悉的数据环境时:
- 从“输出”表开始(即报表或仪表板所使用的表)
- 向上游追溯:哪些表为其提供数据?
- 识别原始层、暂存层和数据集市层
- 梳理从原始数据到分析表的转换链路
- 记录数据在哪些环节被丰富、过滤或聚合
评论
支持 Markdown