关于 data-analysis
data-analysis 是用于探索数据集的 Skill,通过提出假设并独立复核来筛选结果。它生成可复现的发现报告和记录表,只保留效应量达到标准的结论。
主要功能
- 01数据集概况分析
- 02基于假设开展分析
- 03独立复核计算结果
- 04按效应量设定门槛
- 05生成发现报告与记录表
适用场景
- 01探索陌生数据集
- 02检验数据列间的模式
- 03记录可复现的验证结论
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ gaasher/ agent-loop-skills --skill data-analysis安装后在 Claude Code 中输入/data-analysis确认已加载。
附带文件examples/run.example.yaml
详细介绍
数据分析循环
围绕数据集进行 假设 → 验证 的反思循环。产物是一份发现报告;反馈信号是 验证——只有重新运行计算后,在有意义的效应量上得到确认,某项发现才算成立。这一纪律要求:洞见背后必须有数字支撑。 如果数据不支持某项看似合理的说法,就应舍弃,而不是弱化措辞;报告中的每一行都应能从数据集中复现。
何时使用
当需要对绑定的数据集进行开放式、自检式探索,且每项发现都必须经得起独立重新计算时,使用此工具。默认对各列进行广泛探索;如果用户提出了聚焦问题,就让它引导假设。不要用于诊断单个已知异常,也不要用于对照文献核查外部说法。
设置
以交互方式解析绑定项。如果工作目录中存在 loop.run.yaml,则加载它,用一行文字确认各项值,然后直接进入循环。否则:在 Claude Code 中(可使用 AskUserQuestion 工具),为每个绑定项推断一个可能的值,并将其作为推荐选项展示;在其他宿主环境中,则针对每项使用带引号的纯文本提示提问。然后写入 loop.run.yaml(格式:examples/run.example.yaml),并在创建任何其他文件前确认各项值。
| 绑定项 | 含义 | 默认值 | 推断方式 |
|---|---|---|---|
<dataset> | 要分析的数据文件(CSV/TSV/Parquet/…);只读的真实数据 | — | 扫描工作目录,查找数据文件 |
<question> | 可选的分析重点;省略则进行广泛探索 | — | 询问用户;否则保持未绑定 |
<report> | 发现报告的输出文件 | <sandbox_root>/findings.md | — |
<analysis_cmd> | 在用户环境中运行分析代码片段的解释器 | python3 | 检查工作目录中的 pyproject.toml/.venv/uv |
<sandbox_root> | 代码片段和记录文件的存放位置 | ./sandbox | — |
<budget> | 最大迭代次数 | 8 | — |
<patience> | 连续 N 次迭代未发现新的已验证结果后停止 | 2 | — |
分析代码片段会通过 <analysis_cmd> 在 用户的环境中 运行,因此可以使用用户已安装的任何内容。辅助代码应 优先使用标准库(csv、statistics):如果代码片段需要 pandas/numpy,应使用 try/except ImportError 进行探测,并在无法导入时退回标准库方案;或者在征得同意后执行 uv pip install "pandas==<ver>"——切勿假定已安装该软件包。
循环
复制此清单并逐项勾选:
- 第 0 轮迭代 — 对
<dataset>进行概况分析(形状、类型、范围、缺失情况);暂不记录任何发现。 - 提出一个具体、可检验的假设(由
<question>引导;尚未得出结论)。 - 计算:编写
<sandbox_root>/iter<N>/analysis.py,使用<analysis_cmd>运行,并将输出重定向到out.txt。 - 验证:用第二种方法重新推导关键数值;根据预先声明的效应量门槛进行判断。
- 若获支持 → 将发现追加到
<report>(标记为verified);否则记录为refuted,不要加入报告。 - 追加一行台账;达到平台期(
<patience>)或<budget>时停止。
第 0 轮迭代 — 概况分析。 编写并运行一段代码,报告 <dataset> 的形状:列、推断类型、行数和快速摘要(范围、类别计数、缺失情况)。这为假设提供依据;此时暂不记录任何发现。
然后,持续迭代直至停止(无新发现或达到预算):
- 提出一个假设。 提出一个具体、可检验的单一主张,例如“企业订单的平均价值高于消费者订单”“移动渠道的退货率高于其他渠道”“订单价值随注册时长增加”。由
<question>引导;不要重复已得出结论的假设。 - 计算。 编写
<sandbox_root>/iter<N>/analysis.py,加载<dataset>并计算相关统计量,以及效应量(组均值差、比率差、相关系数等,而不只是是非结论)。使用<analysis_cmd>运行,并将输出重定向到<sandbox_root>/iter<N>/out.txt(不要让输出淹没上下文)。 - 验证 — 把关。 使用第二种独立方法重新推导关键数值(不同的分组方式、重新计数或合理性核查),并确认两者一致。然后诚实判断:结果是否以有实际意义的效应量支持该假设,还是效应可忽略/处于噪声范围内?预先声明“有实际意义”的判断门槛,并始终如一地应用——根据组大小和噪声调整最低效应量(例如,|Cohen's d| ≳ 0.2、风险比 ≳ 1.5 或 |r| ≳ 0.1;组较小时提高门槛),以免在不同迭代中改变保留/驳回标准。
- 获支持 → 将一项发现追加到
<report>:包括主张、确切数值、效应量和方法(以便复现)。标记为verified。 - 不获支持/效应可忽略 → 在台账中将其记录为
refuted,不要加入报告。空结果也是实实在在的结论,并非需要掩盖的失败。
- 获支持 → 将一项发现追加到
- 记录一行台账,然后继续。
台账
<sandbox_root>/ledger.tsv,使用制表符分隔,文本中不得出现逗号。表头:
iter hypothesis effect status
status ∈ {profile, verified, refuted}。示例:
iter hypothesis effect status
0 dataset profile - profile
1 enterprise orders average higher value than consumer 185 vs 109 (+70%) verified
2 returns differ by region North 0.16 vs South 0.14 (negligible) refuted
3 mobile has a higher return rate than web/store 0.30 vs 0.10 verified
报告最佳结果:<report> 路径、已验证发现的数量,以及被驳回的假设(让用户看到检查并排除的内容,而不只是保留下来的结果)。
约束
- 没有计算出的数值就不能提出主张。
<report>中的每项发现都必须包含数值和生成这些数值的方法;无法计算就不能提出主张。 - 记录前先验证。 第 3 步中的独立重新推导是把关步骤——无法复现,或效应处于噪声范围内的发现,不得写入报告。
- 报告效应量,而不只是方向;不要把相关性夸大为因果关系——应表述为“与……相关”,并在数据无法排除混杂因素时加以说明。
- 每轮迭代只检验一个假设,以便将每项发现归因于对应假设;跳过已得出结论的假设。
- 只读取
<dataset>——绝不修改它,因为它是核验每项发现所依据的事实基准。沙盒必须自包含(不得通过../逃逸)。 - 不要暂停循环并询问是否继续;运行至无新发现或达到预算。
停止条件
- 无新发现 — 连续
<patience>轮迭代都没有新增已验证发现。 - 预算 — 已达到
<budget>轮迭代。