mcpField
D
data-analysis

data-analysis

github.com/gaasher数据与数据库17842 次安装17 周前更新
代码仓库

关于 data-analysis

data-analysis 是用于探索数据集的 Skill,通过提出假设并独立复核来筛选结果。它生成可复现的发现报告和记录表,只保留效应量达到标准的结论。

主要功能

  1. 01数据集概况分析
  2. 02基于假设开展分析
  3. 03独立复核计算结果
  4. 04按效应量设定门槛
  5. 05生成发现报告与记录表

适用场景

  1. 01探索陌生数据集
  2. 02检验数据列间的模式
  3. 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> 的形状:列、推断类型、行数和快速摘要(范围、类别计数、缺失情况)。这为假设提供依据;此时暂不记录任何发现。

然后,持续迭代直至停止(无新发现或达到预算):

  1. 提出一个假设。 提出一个具体、可检验的单一主张,例如“企业订单的平均价值高于消费者订单”“移动渠道的退货率高于其他渠道”“订单价值随注册时长增加”。由 <question> 引导;不要重复已得出结论的假设。
  2. 计算。 编写 <sandbox_root>/iter<N>/analysis.py,加载 <dataset> 并计算相关统计量,以及效应量(组均值差、比率差、相关系数等,而不只是是非结论)。使用 <analysis_cmd> 运行,并将输出重定向到 <sandbox_root>/iter<N>/out.txt(不要让输出淹没上下文)。
  3. 验证 — 把关。 使用第二种独立方法重新推导关键数值(不同的分组方式、重新计数或合理性核查),并确认两者一致。然后诚实判断:结果是否以有实际意义的效应量支持该假设,还是效应可忽略/处于噪声范围内?预先声明“有实际意义”的判断门槛,并始终如一地应用——根据组大小和噪声调整最低效应量(例如,|Cohen's d| ≳ 0.2、风险比 ≳ 1.5 或 |r| ≳ 0.1;组较小时提高门槛),以免在不同迭代中改变保留/驳回标准。
    • 获支持 → 将一项发现追加到 <report>:包括主张、确切数值、效应量和方法(以便复现)。标记为 verified。
    • 不获支持/效应可忽略 → 在台账中将其记录为 refuted,不要加入报告。空结果也是实实在在的结论,并非需要掩盖的失败。
  4. 记录一行台账,然后继续。

台账

<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> 轮迭代。

评论

支持 Markdown