コース目次 / 第4章
自分のものにする
家計CSVの集計を足して、自分のデータで動かします。持ち帰りカードつき。
最後の章です。もう1つ道具を足して、それを自分のデータに向けます。
今日のゴール
家計簿のCSVを読んで、月ごと・分類ごとの合計を出すレポート。「データを自分の道具で読む」体験です。
1. データを用意する
kakei.csv を作ります。Excelやスプレッドシートから書き出したものでも構いませんが、まずはこのまま写して動かしてください。
日付,分類,金額
2026-07-03,食費,1280
2026-07-05,交通費,420
2026-07-11,食費,2340
2026-07-18,趣味,3800
2026-07-25,食費,980
2026-08-02,食費,1560
2026-08-04,交通費,1200
2026-08-09,趣味,2200CSVは「カンマで区切っただけのテキスト」です。1行目が見出しで、2行目から中身。Excelが読めるものは、だいたいPythonでも読めます。
2. 書く
"""家計簿のCSVを読んで、月ごと・分類ごとの合計を出す。"""
import csv
from collections import defaultdict
from pathlib import Path
CSV_PATH = Path("kakei.csv")
def read_rows(path):
"""CSVを読んで、(年月, 分類, 金額) の一覧にして返す。"""
rows = []
with open(path, encoding="utf-8", newline="") as f:
for row in csv.DictReader(f):
month = row["日付"][:7]
rows.append((month, row["分類"], int(row["金額"])))
return rows
def main():
if not CSV_PATH.exists():
print(f"{CSV_PATH} が見つかりません")
return
rows = read_rows(CSV_PATH)
totals = defaultdict(int)
for month, category, amount in rows:
totals[(month, category)] += amount
months = sorted({month for month, _, _ in rows})
for month in months:
print(f"== {month} ==")
target = {c: a for (m, c), a in totals.items() if m == month}
for category in sorted(target, key=lambda c: -target[c]):
print(f" {category}: {target[category]:,} 円")
print(f" 合計: {sum(target.values()):,} 円")
print()
main()csv.DictReader は1行を辞書にしてくれます。 row["金額"] のように見出しの名前で取り出せるので、列の順番を覚えなくて済みます。
defaultdict(int) は「まだ無いキーは0から始まる辞書」です。totals[key] += amount を、キーの有無を気にせず書けます。
3. 走らせる
Mac をお使いの方
行頭の $ は「ここからコマンド」という目印です。$ は打たないでください。
Windows をお使いの方
行頭の $ は「ここからコマンド」という目印です。$ は打たないでください。
== 2026-07 ==
食費: 4,600 円
趣味: 3,800 円
交通費: 420 円
合計: 8,820 円
== 2026-08 ==
趣味: 2,200 円
食費: 1,560 円
交通費: 1,200 円
合計: 4,960 円金額にカンマが入っているのに気づきましたか。{amount:,} と書くだけです。こういう細かい気配りが、道具の使い心地を決めます。
あなたの番
ここからが本番です。3つとも、値を変えるだけです。
(1) 自分の家計データにする
kakei.csv の中身を、自分の先月の支出に書き換えてください。分類は「食費」でなくても構いません。行は何行あっても動きます。
(2) 仕分けルールを自分用にする
seiri.py の FOLDERS に、自分がよく扱う拡張子を足してください。
".heic": "画像",
".pptx": "書類",
".mp3": "音楽",(3) 本物のフォルダに向ける(慎重に)
TARGET の行を、自分のダウンロードフォルダに変えられます。
TARGET = Path.home() / "Downloads"必ず、まず下見だけ実行してください。予定の一覧を最後まで読んで、おかしなものが混ざっていないか確かめてから –honban を付けます。
不安なら、ダウンロードフォルダの中身をどこかにコピーしてから試すのがいちばん安全です。プログラムは速いので、間違いも速いのです。
持ち帰りカード
フォルダに README.md を置いておきます。3か月後のあなたが読む用です。
# はるとの整理キット
Tsumiki のミニ体験コース「Python — 面倒ごとを自動化する」の成果物です。
## また動かすとき(3行)
1. ターミナルを開く
2. `cd` でこのフォルダに入る(VS Code なら「フォルダーを開く」でこのフォルダを開いてから「ターミナル」→「新しいターミナル」)
3. `python3 seiri.py` と打つ(Windowsは `py seiri.py`)
## 中身
| ファイル | 何をするか |
|---|---|
| `seiri.py` | フォルダの中身を拡張子ごとに仕分ける。`--honban` を付けたときだけ本当に動かす。同名ファイルがある場合と、ドットで始まるファイルは触らない |
| `kakei.py` | `kakei.csv` を読んで、月ごと・分類ごとの合計を出す |
| `sample/` | 練習用のフォルダ。まずはここで試す |
## この先に進むなら
- Python公式チュートリアル(日本語) https://docs.python.org/ja/3/tutorial/
- `pathlib` と `csv` は今日使った標準ライブラリです。同じ棚に `json` `datetime` `re` があります
- グラフにしたくなったら `pip install matplotlib`(このコースでは扱いませんでした)試食レポート
おつかれさまでした。ここまでで、あなたの手元には動く道具が2つ残っています。
Pythonは「面倒ごとを片づける」用途で最も選ばれている言語です。今日やったフォルダ整理とCSV集計は、その入口としてはかなり実務に近いことをしています。
この言語、合いそうでしたか?
字下げが文法になっているところ、標準ライブラリだけで実用が完結するところ。合いそうなら、公式チュートリアル(日本語)がそのまま次の一歩になります。
ぴんと来なかったなら、それも収穫です。別の言語を試食してみてください。同じ「道具を作る」でも、言語によって手ざわりはずいぶん違います。
ハマったら
ZIPで戻したい
このページの下のZIPは、この章を終えた状態のフォルダです。解凍して、その中で作業を続けられます。自分で書き換えた部分は消えてしまうので、先に自分のファイルを別の場所へ待避してから使ってください。
こうなっていればOK
うまくいかないときは、この章の完成ファイル一式(ZIP)をダウンロードして続きから進めても大丈夫です。
この章で卒業です。
この章はまだ完了していません。