コース目次 / 第4章

自分のものにする

家計CSVの集計を足して、自分のデータで動かします。持ち帰りカードつき。

第4章 / 全5章目安 約40分この章のゴール: 自分のデータで動く道具になり、また明日から使える状態で残る
お使いのパソコン
手順が切り替わります

最後の章です。もう1つ道具を足して、それを自分のデータに向けます。

今日のゴール

家計簿のCSVを読んで、月ごと・分類ごとの合計を出すレポート。「データを自分の道具で読む」体験です。

1. データを用意する

kakei.csv を作ります。Excelやスプレッドシートから書き出したものでも構いませんが、まずはこのまま写して動かしてください。

kakei.csv
日付,分類,金額
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,趣味,2200

CSVは「カンマで区切っただけのテキスト」です。1行目が見出しで、2行目から中身。Excelが読めるものは、だいたいPythonでも読めます。

2. 書く

kakei.py
"""家計簿の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 をお使いの方

VS Codeのターミナルターミナル
python3 kakei.py

行頭の $ は「ここからコマンド」という目印です。$ は打たないでください。

Windows をお使いの方

VS Codeのターミナルターミナル
py kakei.py

行頭の $ は「ここからコマンド」という目印です。$ は打たないでください。

実行結果
== 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.pyFOLDERS に、自分がよく扱う拡張子を足してください。

seiri.py の FOLDERS に足す例
    ".heic": "画像",
    ".pptx": "書類",
    ".mp3": "音楽",

(3) 本物のフォルダに向ける(慎重に)

TARGET の行を、自分のダウンロードフォルダに変えられます。

seiri.py(この行だけ差し替える)
TARGET = Path.home() / "Downloads"

必ず、まず下見だけ実行してください。予定の一覧を最後まで読んで、おかしなものが混ざっていないか確かめてから –honban を付けます。
不安なら、ダウンロードフォルダの中身をどこかにコピーしてから試すのがいちばん安全です。プログラムは速いので、間違いも速いのです。

持ち帰りカード

フォルダに README.md を置いておきます。3か月後のあなたが読む用です。

README.md
# はるとの整理キット

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)をダウンロードして続きから進めても大丈夫です。

この章で卒業です。

この章はまだ完了していません。