mcpField
D
data_analysis

data_analysis

github.com/artificialanalysis数据与数据库686237 次安装1 周前更新
代码仓库

关于 data_analysis

基于 Polars 的数据分析技能,供分析人员和开发者使用,提供工作流指导、参考资料及脚本,用于探索、转换、分析、可视化和导出数据集。

主要功能

  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/artificialanalysis/stirrup --skill data_analysis

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

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

reference/
transformations.md
statistics.md
loading.md
visualization.md
time_series.md
aggregations.md
scripts/
summary_stats.py
explore_data.py

详细介绍

数据分析技能

使用 Polars(一款速度极快的 DataFrame 库)的综合数据分析工具包。本技能提供常见数据分析任务的说明、参考文档和可直接使用的脚本。

迭代检查点
步骤展示内容用户输入类型
数据加载形状、列、样例行“这是正确的数据吗?”
数据探索汇总统计、数据质量问题“有哪些列需要重点关注吗?”
转换转换前后对比“这个转换看起来正确吗?”
分析关键发现、图表“有什么内容需要我进一步深入分析吗?”
导出输出预览“可以保存了,还是需要做些修改?”

快速开始

import polars as pl
from polars import col

# Load data
df = pl.read_csv("data.csv")

# Explore
print(df.shape, df.schema)
df.describe()

# Transform and analyze
result = (
    df.filter(col("value") > 0)
    .group_by("category")
    .agg(col("value").sum().alias("total"))
    .sort("total", descending=True)
)

# Export
result.write_csv("output.csv")

适用场景

  • 加载数据集(CSV、JSON、Parquet、Excel、数据库)
  • 数据清理、筛选和转换
  • 聚合、分组和数据透视表
  • 统计分析和汇总统计
  • 时间序列分析和重采样
  • 连接和合并多个数据集
  • 创建可视化图表
  • 将结果导出为各种格式

技能内容

参考文档

针对特定操作的详细 API 参考和模式:

  • reference/loading.md - 从所有支持的格式加载数据
  • reference/transformations.md - 列操作、筛选、排序、类型转换
  • reference/aggregations.md - 分组、窗口函数、累计总计
  • reference/time_series.md - 日期解析、重采样、滞后特征
  • reference/statistics.md - 相关性、分布、假设检验设置
  • reference/visualization.md - 使用 matplotlib/plotly 创建图表
可直接使用的脚本

适用于常见任务的可执行 Python 脚本:

  • scripts/explore_data.py - 快速探索和分析数据集概况
  • scripts/summary_stats.py - 生成全面的统计报告

核心模式

加载数据
# CSV (most common)
df = pl.read_csv("data.csv")

# Lazy loading for large files
df = pl.scan_csv("large.csv").filter(col("x") > 0).collect()

# Parquet (recommended for large datasets)
df = pl.read_parquet("data.parquet")

# JSON
df = pl.read_json("data.json")
df = pl.read_ndjson("data.ndjson")  # Newline-delimited
筛选和选择
# Select columns
df.select("col1", "col2")
df.select(col("name"), col("value") * 2)

# Filter rows
df.filter(col("age") > 25)
df.filter((col("status") == "active") & (col("value") > 100))
df.filter(col("name").str.contains("Smith"))
转换
# Add/modify columns
df = df.with_columns(
    (col("price") * col("qty")).alias("total"),
    col("date_str").str.to_date("%Y-%m-%d").alias("date"),
)

# Conditional values
df = df.with_columns(
    pl.when(col("score") >= 90).then(pl.lit("A"))
    .when(col("score") >= 80).then(pl.lit("B"))
    .otherwise(pl.lit("C"))
    .alias("grade")
)
聚合
# Group by
df.group_by("category").agg(
    col("value").sum().alias("total"),
    col("value").mean().alias("avg"),
    pl.len().alias("count"),
)

# Window functions
df.with_columns(
    col("value").sum().over("group").alias("group_total"),
    col("value").rank().over("group").alias("rank_in_group"),
)
导出
df.write_csv("output.csv")
df.write_parquet("output.parquet")
df.write_json("output.json", row_oriented=True)

最佳实践

  1. 对大型数据集使用惰性求值:pl.scan_csv() + .collect()
  2. 尽早筛选,在执行耗时操作前减少数据量
  3. 只选择所需列,以尽量减少内存使用
  4. 优先使用 Parquet 存储——I/O 更快,压缩效果更好
  5. 使用 .explain() 理解并优化查询计划

评论

支持 Markdown