はじめに
現役の高校教員(数学)です。エンジニアではありません。
家計の見直しをしていて、「毎月の固定費はいくらか」を把握しようとしたのですが、家計簿アプリの画面をいくら眺めても数字がしっくり来ませんでした。
そこでマネーフォワードMEからCSVをエクスポートし、Claude Codeに分析させてみたところ、自分で作った家計プランの固定費が、実態より月2.4万円ほど低く見積もられていることがわかりました。
やったことは大したことではありませんが、非エンジニアがAIエージェントで実データを扱う一例として書いておきます。
※実際の家計データを扱っているため、一部の金額は伏せ字・概算にしています。処理の内容そのものは変えていません。
環境
- macOS
- Claude Code
- Python 3.9(Macに最初から入っているもの)
- マネーフォワードME からエクスポートしたCSV(月ごとに1ファイル)
追加インストールは何もしていません。
1. いきなり文字化けで詰まる
まずCSVを読もうとして、最初の壁がこれでした。
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x8c in position 1: invalid start byte
マネーフォワードのCSVは Shift-JIS(cp932) で出力されます。UTF-8前提で読むと1行目で落ちます。
Claude Codeに「文字化けする」と伝えたら、エンコーディングを試すところから切り分けてくれました。
# ダメ
with open("収入・支出詳細.csv", encoding="utf-8") as f:
...
# OK
with open("収入・支出詳細.csv", encoding="cp932") as f:
...
地味ですが、非エンジニアが最初に心を折られるポイントだと思います。ここを数十秒で抜けられたのは大きかったです。
2. カテゴリ別に集計する
マネーフォワードのCSVは、こういう列構成になっています。
計算対象, 日付, 内容, 金額(円), 保有金融機関, 大項目, 中項目, メモ, 振替, ID
ポイントは 「振替」列 です。ここが 1 の行は口座間のお金の移動なので、支出として数えてはいけません。自分で集計するとここを見落として、実際より支出が膨らみます。
import csv
from collections import defaultdict
with open("収入・支出詳細.csv", encoding="cp932") as f:
rows = list(csv.DictReader(f))
expense = defaultdict(int)
for r in rows:
if r["振替"] == "1": # 口座間移動は除外
continue
amt = int(r["金額(円)"].replace(",", "")) # カンマ区切りで来ることがある
if amt < 0: # 支出のみ
expense[(r["大項目"], r["中項目"])] += amt
for k, v in sorted(expense.items(), key=lambda x: x[1]):
print(k, f"{v:,}円")
出力:
('住宅', 'ローン返済') -1xx,xxx円 ※金額は一部伏せています
('衣服・美容', '車関係') -50,064円
('食費', '食費') -35,120円
('現金・カード', '電子マネー') -24,183円
('通信費', '放送視聴料') -12,276円
...
3. 見つかったもの
自分で作っていた家計プランには、固定費をこう書いていました。
固定費 約17万円(住宅ローン・保険・幼稚園代 等)
問題はこの「等」でした。
CSVから固定費に該当する項目を全部拾って足すと、約19万円台。差額は約2.4万円です。
原因を追うと、こういうものが「等」に丸められて消えていました。
- 放送視聴料 12,276円/月 ← そもそも家計プランのどの集計にも一度も登場していなかった
- 電気・水道・サブスク・通信費の合計が、ざっくり見積もった額より2万円以上多かった
特に放送視聴料は、何年も払い続けているのに、一度も家計の集計に入っていなかった項目でした。毎月の明細を眺めているだけでは、たぶん永遠に気づかなかったと思います。
4. 非エンジニアがClaude Codeを使ってよかったところ
「集計してほしい」だけで動く
Pythonの書き方を調べる必要がありませんでした。「このCSVを大項目・中項目別に集計して、振替は除外して」と日本語で伝えるだけで、動くコードが出てきます。
エラーの切り分けが速い
エンコーディングエラーのように、初心者が検索キーワードすら思いつかない類の問題を、そのまま貼れば解決してくれます。
データを外に出さなくていい
家計データは個人情報の塊です。Claude Codeは手元のファイルをそのまま読むので、どこかにアップロードする必要がありません。これは家計・業務データを扱ううえでかなり大きいと感じました。
「思い込み」を数字で殴ってくれる
一番効いたのはこれでした。自分が作った家計プランを疑うのは難しいのですが、実データを突き合わせると、思い込みが一瞬で崩れます。
5. ハマったポイントまとめ
| ハマり | 対処 |
|---|---|
UnicodeDecodeError |
encoding="cp932" で開く |
| 支出が実際より多い | 「振替」列が 1 の行を除外する |
| 金額がカンマ区切りの文字列 |
.replace(",", "") してから int()
|
| 同じ費目が複数の中項目に散っている | 大項目だけでなく中項目まで見る |
おわりに
やったことは「CSVを読んで集計する」だけです。エンジニアの方からすれば当たり前の処理だと思います。
ただ、非エンジニアにとっては「当たり前の処理」への到達コストが高いのが実情でした。Claude Codeはそのコストをほぼゼロにしてくれます。
家計簿アプリは「入力した数字を見せてくれる」ツールですが、「その数字が本当に全部なのか」は教えてくれません。そこを確かめるには、結局データを自分で触るしかないのだと思いました。
次は同じやり方で、17年分のAmazon注文履歴を分析してみる予定です。