Pythonで家計簿を自動集計する方法
CSVの用意からグラフ化まで、ステップごとに解説します
この記事は、「Pythonでできる日常の自動化6選」で紹介した①家計簿の自動集計の詳しい作り方をまとめた記事です。
Excelや電卓を使った毎月の家計簿集計、地味に面倒ですよね。CSVファイルに支出を記録しておけば、あとはPythonが自動でカテゴリ別・月別に集計し、グラフまで作ってくれます。プログラミング未経験でも、コピペで真似できる内容です。
- 1
- 2
- 3
- 4
- 5
用意するもの
- Python本体
- pandas(データ集計用ライブラリ)
- matplotlib(グラフ作成用ライブラリ)
- japanize-matplotlib(グラフの日本語文字化けを防ぐライブラリ)
Pythonのインストール、コードを書くためのエディタ(VS Code)の準備、コードの書き方・実行方法がまだの方は、先に「Pythonを始める前に:インストールとエディタの準備」を済ませてから、この続きに進んでください。
必要なライブラリをインストールする
Python本体には含まれていない、データ集計・グラフ作成用の追加の道具(ライブラリ)を用意します。先ほどのターミナルで、続けて以下のコマンドを実行してください。pipは、Pythonに標準で付属している「ライブラリを取り寄せるための道具」です。
pip install pandas matplotlib japanize-matplotlib
1行にライブラリ名が3つ並んでいますが、これでpandas・matplotlib・japanize-matplotlibの3つが一度にインストールされます。pip installの後ろに、半角スペースで区切って複数のライブラリ名を並べると、まとめてインストールできる仕組みです。3回に分けて実行する必要はありません。
実行すると自動でダウンロード・インストールが進み、しばらくすると完了します。エラーが出ずに元のターミナルの入力待ち状態に戻れば準備完了です。
支出データをCSVに用意する
まずは支出を記録するCSVファイルを用意します。「日付」「カテゴリ」「金額」の3列だけのシンプルな形式にします。kakeibo.csvという名前で、以下のような内容を保存してください(Excelで作成し「CSV UTF-8」形式で保存するのがおすすめです)。
| 日付 | カテゴリ | 金額 |
|---|---|---|
| 2026-08-01 | 食費 | 1200 |
| 2026-08-02 | 交通費 | 400 |
| 2026-08-03 | 食費 | 850 |
| 2026-08-05 | 日用品 | 2100 |
お使いの家計簿アプリにCSVエクスポート機能があれば、それを活用してこの形式に整えるのもおすすめです。
CSVを読み込んで集計する
pandasを使って、CSVを読み込みカテゴリ別に金額を合計します。
import pandas as pd
df = pd.read_csv("kakeibo.csv", encoding="utf-8-sig", parse_dates=["日付"])
category_sum = df.groupby("カテゴリ")["金額"].sum()
print(category_sum)
実行すると、カテゴリごとの合計金額が一覧で表示されます。
カテゴリ別の支出を円グラフにする
先ほど集計したcategory_sumを使って、円グラフを作成します。グラフを表示するウィンドウには、Python標準の画面作成ライブラリ「tkinter」を使います。
import tkinter as tk
from matplotlib.figure import Figure
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
import japanize_matplotlib
fig = Figure(figsize=(6, 6))
ax = fig.add_subplot(111)
category_sum.plot.pie(ax=ax, autopct="%1.1f%%")
ax.set_ylabel("")
ax.set_title("カテゴリ別支出割合")
fig.savefig("category_pie.png")
root = tk.Tk()
root.title("カテゴリ別支出割合")
canvas = FigureCanvasTkAgg(fig, master=root)
canvas.draw()
canvas.get_tk_widget().pack()
root.mainloop()
実行すると、カテゴリごとの支出割合を表示するウィンドウが開き、category_pie.pngとして画像も保存されます。
tkinterはPythonに標準で付属しているため、追加のインストールは不要です。Figureでグラフの中身を作り、FigureCanvasTkAggでそれをtkinterのウィンドウに貼り付ける、という流れです。
月ごとの支出推移を折れ線グラフにする
次に、月ごとの支出合計を折れ線グラフにして、支出の推移を確認できるようにします。ここでは、先ほどの円グラフと折れ線グラフを1つのウィンドウにまとめて同時に表示します。
df["月"] = df["日付"].dt.to_period("M").astype(str)
monthly_sum = df.groupby("月")["金額"].sum()
fig = Figure(figsize=(11, 4))
# 左側:円グラフ
ax1 = fig.add_subplot(1, 2, 1)
category_sum.plot.pie(ax=ax1, autopct="%1.1f%%")
ax1.set_ylabel("")
ax1.set_title("カテゴリ別支出割合")
# 右側:折れ線グラフ
ax2 = fig.add_subplot(1, 2, 2)
monthly_sum.plot(ax=ax2, marker="o")
ax2.set_title("月別支出推移")
ax2.set_ylabel("金額(円)")
ax2.set_xlabel("月")
fig.tight_layout()
fig.savefig("kakeibo_graphs.png")
root = tk.Tk()
root.title("家計簿グラフ")
canvas = FigureCanvasTkAgg(fig, master=root)
canvas.draw()
canvas.get_tk_widget().pack()
root.mainloop()
実行すると、円グラフと折れ線グラフが横に並んだ1つのウィンドウが表示され、kakeibo_graphs.pngとして2つのグラフをまとめた画像も保存されます。fig.add_subplot(1, 2, 1)は「1行2列に並べたグラフのうち1番目」という意味で、2番目を指定したfig.add_subplot(1, 2, 2)と組み合わせることで、2つのグラフを横並びにできます。
前のステップの円グラフ単体のコードと、ここでのコードは両方とも同じtkinter・Figure・FigureCanvasTkAggを使っています。実際に使うときは、このステップの「まとめて表示する」コードだけを1つのファイルに書いておけば十分です。
毎月の作業をもっと楽にするヒント
同じkakeibo.csvに支出を追記していくだけで、この仕組みをそのまま使い回せます。月末にコードを実行するだけで、最新のグラフがすぐに手に入ります。
「①データを追記する→②コードを実行する」の2ステップだけで済むようにしておくと、継続しやすくなります。
うまくいかないときのトラブルシューティング
encoding="shift_jis"を試してください。parse_datesがうまく変換できないことがあります。japanize_matplotlibをインポートするだけで解決します。まとめ
PythonのpandasとmatplotlibでCSVの支出データを自動集計・グラフ化する方法を紹介しました。最初の設定さえ済ませてしまえば、あとはデータを追記してコードを実行するだけで、毎月の家計簿作業がぐっと楽になります。


コメント