# 計測結果 — 第 02 章 example-1

実行環境: Linux 6.18 / pandas 3.0 / openpyxl 3.1 / Python 3.x

`make clean && make all` の出力。

## サイズ比較

| 形式 | ファイル数 | 行数 | 合計バイト | KB |
|------|-----------|------|-----------|-----|
| Excel (`.xlsx`) | 100 | 10,000 | 844,010 | 824 KB |
| CSV (`.csv`) | 100 | 10,000 | 389,606 | 380 KB |
| **比** | | | | **2.2 倍小さい** |

章本文では「4 分の 1」と書いている。今回の実演は openpyxl 生成で書式が
最小限のため 2.2 倍。Excel で人間がスタイル装飾を入れた典型的な業務ファイル
では 3〜5 倍に開くことが多い。

## 集計時間(主目的)

100 ファイル合計 10,000 行を商品別にグループ集計する pandas コード:

```python
df = pd.concat(pd.read_excel(f) for f in glob.glob('xlsx/*.xlsx'))
by_item = df.groupby('商品').agg(数量合計=('数量','sum'), 売上合計=('売上','sum'))
```

| 入力形式 | 100 ファイル読み込み + groupby |
|----------|-------------------------------|
| `.xlsx` 直 (`pd.read_excel`) | **1.216 秒** |
| `.csv` (`pd.read_csv`) | **0.071 秒** |

CSV だと **17 倍速い**。100 ファイル 10,000 行を 0.07 秒で集計し、
そのまま JSON で吐き出して翌月以降も使える。

章本文の「Excel VBA で半日 = 約 4 時間 = 14,400 秒」と比べると、
**約 200,000 倍速い**。

## 集計結果(`out/aggregate.log` と `out/summary.json`)

商品別売上ランキング(CSV 版):

```
商品       件数  数量合計  売上合計    平均単価
トマト     792  20,367   5,189,294  254.7
ズッキーニ  868  22,375   5,023,060  225.0
レタス     845  21,674   4,446,938  205.2
キャベツ    817  20,592   3,800,898  184.8
白菜       826  20,677   3,210,809  154.8
ナス       827  21,201   3,081,172  144.8
大根       844  21,530   2,887,280  134.4
にんじん    856  20,840   2,607,918  124.5
ピーマン    853  21,892   2,518,029  115.1
玉葱       858  22,874   2,310,949  100.9
きゅうり    805  20,477   1,968,428   95.8
じゃがいも   809  20,820   1,762,066   84.4
```

`out/summary.json`:

```json
[
  {"label": "Excel ...", "files": 100, "rows": 10000, "elapsed_seconds": 1.216, ...},
  {"label": "CSV ...",   "files": 100, "rows": 10000, "elapsed_seconds": 0.071, ...}
]
```

JSON で吐き出してあるので、後段の Python やシェルで再利用できる。

## awk で「キャベツ」だけ抽出

```bash
awk -F, '$3=="キャベツ"' csv/*.csv > out/cabbage.csv
```

- 抽出行数: **817 行**
- 実行時間: **0.004 秒**

100 個の `.xlsx` から「キャベツの行だけ取り出して」── これを Excel で
やろうとすると、フィルタ → コピー → 100 ファイル分繰り返し。awk 1 行で終わる。

## トークン経済(Claude に渡す場合の参考)

| 形式 | 1 ファイル平均サイズ | 全体合計 |
|------|-------------------|---------|
| `.xlsx` | 約 8.4 KB(ZIP+XML)| 824 KB |
| `.csv` | 約 3.8 KB(プレーン)| 380 KB |
| `.json` 集計結果 (`summary.json`) | 数百 byte | 1 ファイル |

**Claude に「全月の売上集計を出して」と頼むなら、`summary.json` を渡せば
数百バイトで済む**。元の Excel 100 ファイルを渡したらコンテキスト窓の
無駄遣い。

## 再現手順

```bash
pip install openpyxl pandas
make clean && make all
```
