关于 data_analysis
基于 Polars 的数据分析技能,供分析人员和开发者使用,提供工作流指导、参考资料及脚本,用于探索、转换、分析、可视化和导出数据集。
主要功能
- 01加载常见数据格式
- 02清理和转换表格
- 03聚合与分析数据
- 04分析时间序列
- 05创建图表并导出结果
- 06数据探索与统计脚本
适用场景
- 01分析陌生数据集的概况
- 02清理并连接数据
- 03汇总分组或时间序列数据
- 04准备图表和导出文件
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ artificialanalysis/ stirrup --skill data_analysis安装后在 Claude Code 中输入/data_analysis确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
reference/transformations.mdstatistics.mdloading.mdvisualization.mdtime_series.mdaggregations.mdscripts/summary_stats.pyexplore_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)
最佳实践
- 对大型数据集使用惰性求值:
pl.scan_csv()+.collect() - 尽早筛选,在执行耗时操作前减少数据量
- 只选择所需列,以尽量减少内存使用
- 优先使用 Parquet 存储——I/O 更快,压缩效果更好
- 使用
.explain()理解并优化查询计划
评论
支持 Markdown