mcpField
D
data-exploration

data-exploration

github.com/anthropics数据与数据库33.6k227 次安装1 天前更新
代码仓库

关于 data-exploration

面向分析人员与团队的数据探索技能,用于系统检查陌生数据集。内容涵盖表与列分析、数据质量检查、模式和关系发现,以及架构文档编写。

主要功能

  1. 01表结构评估
  2. 02列级分析方法
  3. 03完整性与一致性检查
  4. 04分布与时间模式分析
  5. 05关系与相关性发现
  6. 06架构与数据血缘文档

适用场景

  1. 01分析前检查陌生数据集
  2. 02查找缺失、不一致或可疑值
  3. 03探索时间序列中的趋势与分群
  4. 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
血缘与依赖关系

探索不熟悉的数据环境时:

  1. 从“输出”表开始(即报表或仪表板所使用的表)
  2. 向上游追溯:哪些表为其提供数据?
  3. 识别原始层、暂存层和数据集市层
  4. 梳理从原始数据到分析表的转换链路
  5. 记录数据在哪些环节被丰富、过滤或聚合

评论

支持 Markdown