1仕組みと動作原理
全機能は182行のpandas関数 `summarize_csv(file_path)` に集約されています。CSVの読み込み → 列型に応じた固定分岐 → 文字列レポートの構築を行い、処理中に `plt.savefig` で**カレントワーキングディレクトリ**へ直接グラフ画像を出力します。
def summarize_csv(file_path): """ Comprehensively analyzes a CSV file and generates multiple visualizations. Args: file_path (str): Path to the CSV file Returns: str: Formatted comprehensive analysis of the dataset """ df = pd.read_csv(file_path)
分岐基準は業務・データの意味論ではなく、列型および列名の一部文字列に完全に基づいています。数値列は統計と相関、object列は値の出現頻度、列名に 'date' または 'time' を含む場合のみ時系列分析を実行します。
date_cols = [c for c in df.columns if 'date' in c.lower() or 'time' in c.lower()]
レポートの内容と順序は固定です:データ概要(行・列数/列名)→ 各列のdtype → 欠損値統計 → 数値のdescribe → 相関行列 → カテゴリ値Top 10 → 時系列区間 → 生成済みグラフ一覧。
summary.append("📊 DATA OVERVIEW")
可視化は4種類の条件付きグラフで構成されます:相関ヒートマップ(数値列≥2)、時系列折れ線グラフ(日付列かつ数値列が存在する場合、最大3系列)、数値分布ヒストグラム(2x2グリッド、最大4列)、カテゴリ横棒グラフ(2x2グリッド、最大4列)。
plt.savefig('correlation_heatmap.png', dpi=150) plt.close() charts_created.append('correlation_heatmap.png')
「ユーザーに質問しないこと」が最優先の厳格な行動要件として定義されています。SKILL.mdでは全大文字の段落ですべての質問や選択肢の提示を禁止し、初回で完全な分析を実行して一括納品することを要求しています。
**DO NOT ASK THE USER WHAT THEY WANT TO DO WITH THE DATA.** **DO NOT OFFER OPTIONS OR CHOICES.**
トリガーとなるコンテキストが明示されており(CSVのアップロード/参照、summarize/analyze/visualizeの要求、データ構造や品質の確認要求)、欠損値や日付列の検出ルールも規定されています。
Claude should use this Skill whenever the user: - Uploads or references a CSV file - Asks to summarize, analyze, or visualize tabular data
配布形式は Claude.ai Skills へのアップロード用ZIPパッケージであり、リポジトリ側にも同一のソースコードが保持されています。ZIP内のファイルはリポジトリのワークスペースとバイト単位で一致しています(検証済み)。
2. Go to [Claude.ai](https://claude.ai) → Settings → Capabilities → Skills 3. Upload the zip file 4. Enable the skill
2コア機能
3外部依存関係
| Kind | Dependency / Endpoint |
|---|---|
| package | pandas |
| package | matplotlib |
| package | seaborn |
| network | 无:脚本不发起任何网络请求(无 URL 取数、无遥测、无外部 API);仓库内 URL 仅出现在 README/resources 的徽章与社区链接中 |
4推奨統制措置と判定根拠
- scripts/: ローカルスクリプトまたはコマンドの実行: python analyze.py [csv_path](デフォルトは resources/sample.csv)
- scripts/ 或 SKILL.md: 外部言語パッケージ依存関係の動的インストール宣言
- 本地工作目录: ファイルの読み書きおよび成果物の出力: **カレントワーキングディレクトリ**直下に固定ファイル名でPNGを出力:correlation_heatmap.png、time_series_analysis.png、dis
5二重目の独立検証
- [ok] 『无网络外发/无凭证读取』结论 — analyze.py imports 仅 pandas/matplotlib.pyplot/seaborn/pathlib;全仓(排除 .git)关键词扫描 requests|urllib|socket|http|subprocess|os.system|getenv|os.environ 零命中;URL 仅出现在 README/resources/README 的徽章与社区链接。
- [discrepancy] 日期列判据与文档不符(实测) — SKILL.md Notes 写 'Automatically detects date columns (columns containing \'date\' in name)',实际代码是 "'date' in c.lower() or 'time' in c.lower()"。实测在仓库自带演示集上命中 **customer_lifetime_value**('life**time**' 含 'time'),随后 pd.to_datetime 把 2400 一类整数按纳秒解释成 1970 年,输出 'Date range: 1970-01-01 … to 1970-01-01 …'、'Span: 0 days',并据此画出无意义的时间序列图(实测 pandas 3.0.5;该行为与 pandas 2.x 一致:to_datetime(int) 亦按纳秒)。即 README 宣称该演示集『Perfect for showcasing time-series analysis』,实际触发的是误判列。
- [discrepancy] 『自适应/智能识别行业数据类型』的能力声明 — SKILL.md 列出 Sales/E-commerce、Customer、Financial、Operational、Survey 五类数据的『相应分析』,README 写 'Automatically detects data type (sales, customer, financial, survey, etc.) and applies relevant analysis';但 analyze.py 没有任何行业或语义分类代码,全部行为由 dtype 与列名子串决定(number→describe/corr/hist,object→value_counts/barh,含 date|time→区间)。属**能力夸大**:它确实会因列构成不同而产出不同报告,但没有『识别数据类型』这一步。
- [discrepancy] Notes『Generates visualizations only when date columns are present』 — 实际仅 time_series_analysis.png 需要日期列;distributions.png 只需数值列、categorical_distributions.png 只需分类列、correlation_heatmap.png 只需 ≥2 数值列。该句把条件说得比实现更严,属文档描述偏差(本身不影响使用)。
- [discrepancy] SKILL.md『Files』清单与仓库实际文件 — SKILL.md 只列 analyze.py、requirements.txt、resources/sample.csv、resources/README.md;仓库另有 examples/showcase_financial_pl_data.csv(README 重点宣传的演示集)与 csv-data-summarizer.zip(分发包)。清单不完整。
- [ok] 分发包与源码一致性 — zip 内 analyze.py(sha256 fa217db952541d59…)、SKILL.md(1599338ac2db52ba…)、requirements.txt(3787888dbf39eb94…)与工作区同名文件哈希完全相同;zip 结构为 SKILL.md/analyze.py/requirements.txt/resources/{sample.csv,README.md}。
- [ok] 依赖声明三重一致 — SKILL.md frontmatter metadata(python>=3.8, pandas>=2.0.0, matplotlib>=3.7.0, seaborn>=0.12.0)与 requirements.txt 三行、README Technical Details 段逐项吻合;实际运行时三项库均被 import(seaborn 用于 heatmap,matplotlib 用于绘图)。
- [ok] 写盘行为与覆盖风险 — 四处 plt.savefig 全部使用相对文件名(correlation_heatmap.png / time_series_analysis.png / distributions.png / categorical_distributions.png)+ dpi=150 + plt.close();不创建目录、不检查同名文件、不接受输出路径参数——已在 file_writes 与 risks 记入。
6結論
812ec659a4b533a8…