mcpField
E
explore-data

explore-data

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

关于 explore-data

用于在分析前检查数据表和上传数据集的技能。它分析结构、分布、数据质量与关系,并建议适用的维度、指标和后续分析方向。

主要功能

  1. 01数据表与文件画像
  2. 02列类型和结构分析
  3. 03空值、分布与异常检查
  4. 04关系和模式发现
  5. 05后续分析建议

适用场景

  1. 01查询前检查数据仓库中的表
  2. 02检查上传的 CSV 或 Parquet 文件的数据质量
  3. 03寻找候选维度、指标和连接键

MCP 相关

连接数据仓库 MCP 服务后,该技能可解析表名、获取元数据,并针对实时数据运行画像查询。

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/anthropics/knowledge-work-plugins --skill explore-data

安装后在 Claude Code 中输入/explore-data确认已加载。

详细介绍

/explore-data - 分析并探索数据集

如果你看到不熟悉的占位符,或需要检查已连接的工具,请参阅 CONNECTORS.md。

为表或上传的文件生成全面的数据画像,在深入分析之前了解其形态、质量和模式。

用法

/explore-data <table_name or file>

工作流

1. 访问数据

如果已连接数据仓库 MCP 服务:

  1. 解析表名(处理 schema 前缀,如有歧义则提供匹配建议)
  2. 查询表元数据:列名、类型,以及可用的描述信息
  3. 对实时数据运行画像查询

如果提供了文件(CSV、Excel、Parquet、JSON):

  1. 读取文件并加载为工作数据集
  2. 根据数据推断列类型

如果两者都没有:

  1. 请用户提供表名(需已连接数据仓库)或上传文件
  2. 如果用户描述了表结构,则给出应运行哪些画像查询的指导
2. 理解结构

在分析任何数据之前,先了解其结构:

表级问题:

  • 有多少行和多少列?
  • 粒度是什么(每行代表什么)?
  • 主键是什么?是否唯一?
  • 数据最后一次更新是什么时候?
  • 数据覆盖的时间跨度有多长?

列分类,将每列归为以下类别之一:

  • 标识符:唯一键、外键、实体 ID
  • 维度:用于分组/筛选的分类属性(状态、类型、地区、类别)
  • 指标:用于度量的定量值(收入、计数、时长、分数)
  • 时间:日期和时间戳(created_at、updated_at、event_date)
  • 文本:自由格式的文本字段(描述、备注、名称)
  • 布尔:真/假标志
  • 结构化:JSON、数组、嵌套结构
3. 生成数据画像

运行以下画像检查:

表级指标:

  • 总行数
  • 列数及类型分布
  • 近似表大小(如元数据中可获取)
  • 日期范围覆盖(日期列的最小值/最大值)

所有列:

  • 空值数量和空值率
  • 去重计数和基数比(去重数 / 总数)
  • 最常见的值(前 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

将画像以简洁的汇总表呈现,按列类型分组(维度、指标、日期、标识符)。

4. 识别数据质量问题

应用下面的质量评估框架,标记潜在问题:

  • 高空值率:空值超过 5% 的列(警告),超过 20% 的列(告警)
  • 低基数异常:本应是高基数但实际并非如此的列(例如只有 50 个去重值的 "user_id")
  • 高基数异常:本应是分类型但去重值过多的列
  • 可疑值:本应只有正数时出现的负金额、历史数据中的未来日期,以及明显的占位值(例如 "N/A"、"TBD"、"test"、"999999")
  • 重复检测:检查是否存在自然键,以及该键是否有重复
  • 分布偏斜:极度偏斜的数值分布,可能影响平均值
  • 编码问题:分类字段中的大小写混用、末尾空格、格式不一致
5. 发现关系和模式

在对单列进行画像之后:

  • 外键候选:可能关联其他表的 ID 列
  • 层级结构:构成自然下钻路径的列(国家 > 省 > 市)
  • 相关性:变化趋势一致的数值列
  • 派生列:看起来由其他列计算而来的列
  • 冗余列:信息完全相同或高度相似的列
6. 推荐有价值的维度与指标

基于列画像,推荐以下内容:

  • 最佳维度列:适合切片分析的分类列(基数合理,3-50 个取值)
  • 关键指标列:适合度量的数值列(分布有意义)
  • 时间列:适合趋势分析的时间列
  • 自然分组或层级:数据中显现的分组或层级结构
  • 潜在关联键:可关联其他表的候选键(ID 列、外键)
7. 推荐后续分析

建议 3-5 项用户接下来可以执行的具体分析:

  • "按 [dimension] 分组,对 [time_column] 上的 [metric] 进行趋势分析"
  • "对 [skewed_column] 做分布深入分析,以理解异常值"
  • "对 [problematic_column] 做数据质量排查"
  • "分析 [metric_a] 与 [metric_b] 之间的相关性"
  • "使用 [date_column] 和 [status_column] 做队列分析"

输出格式

## Data Profile: [table_name]

### Overview
- Rows: 2,340,891
- Columns: 23 (8 dimensions, 6 metrics, 4 dates, 5 IDs)
- Date range: 2021-03-15 to 2024-01-22

### Column Details
[summary table]

### Data Quality Issues
[flagged issues with severity]

### Recommended Explorations
[numbered list of suggested follow-up analyses]

质量评估框架

完整度评分

为每一列评级:

  • 完整(非空率 >99%):绿色
  • 基本完整(95-99%):黄色 -- 排查空值原因
  • 不完整(80-95%):橙色 -- 分析原因并判断是否影响使用
  • 稀疏(<80%):红色 -- 若不进行填充可能无法使用
一致性检查

重点关注:

  • 值格式不一致:同一概念的表示方式不同("USA"、"US"、"United States"、"us")
  • 类型不一致:数字以字符串存储,日期格式混杂
  • 引用完整性:外键与任何父记录都不匹配
  • 业务规则违反:负数量、结束日期早于开始日期、百分比大于 100
  • 跨列一致性:status 为 "completed" 但 completed_at 为空
准确性指标

提示准确性问题的危险信号:

  • 占位值:0、-1、999999、"N/A"、"TBD"、"test"、"xxx"
  • 默认值:某个单一值出现频率异常偏高
  • 陈旧数据:在活跃系统中 updated_at 显示长时间无更新
  • 不可能的值:年龄 > 150、远未来日期、负时长
  • 整数偏好:所有值都以 0 或 5 结尾(说明数据为估算而非测量)
时效性评估
  • 该表最近一次更新是什么时候?
  • 预期的更新频率是多少?
  • 事件时间与加载时间之间是否存在延迟?
  • 时间序列中是否存在缺口?

模式发现技术

分布分析

对于数值列,描述其分布特征:

  • 正态分布:均值与中位数接近,呈钟形
  • 右偏:高值方向存在长尾(常见于收入、会话时长)
  • 左偏:低值方向存在长尾(较少见)
  • 双峰:两个峰值(暗示存在两类截然不同的群体)
  • 幂律分布:少数极大值,大量小值(常见于用户活跃度)
  • 均匀分布:各取值频次大致相等(常为合成数据或随机数据)
时间模式

对于时间序列数据,关注:

  • 趋势:持续的上升或下降走势
  • 季节性:重复出现的模式(每周、每月、每季度、每年)
  • 星期效应:工作日与周末的差异
  • 节假日效应:已知节假日前后的下跌或飙升
  • 变点:水平或趋势的突然转变
  • 异常点:打破整体模式的个别数据点
分群发现

通过以下方式识别自然分群:

  • 查找取值数为 3-20 的分类列
  • 比较各分群取值下的指标分布
  • 寻找行为显著不同的分群
  • 检验各分群是否同质,或是否包含子分群
相关性探索

针对数值列之间:

  • 计算所有指标对的相关系数矩阵
  • 标记强相关(|r| > 0.7)以供进一步调查
  • 注意:相关不等于因果,需明确标注这一点
  • 检查是否存在非线性关系(例如二次关系、对数关系)

数据结构理解与文档化

Schema 文档模板

为团队使用而记录数据集时:

## 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]
Schema 探索查询

连接到数据仓库时,可使用以下模式来发现 Schema:

-- 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. 记录数据在何处被丰富、过滤或聚合

提示

  • 对于超大表(1 亿行以上),剖析查询默认使用采样;如果需要精确计数,请说明
  • 如果是首次探索新数据集,此命令可在编写具体查询之前帮你快速了解整体情况
  • 质量标记基于启发式规则,并非每个标记都代表真正的问题,但每一项都值得快速检查一下

评论

支持 Markdown