Pythonで家計簿を自動集計する方法!グラフ化までわかりやすく解説

python
自動化・詳細手順

Pythonで家計簿を自動集計する方法

CSVの用意からグラフ化まで、ステップごとに解説します

プログラミング未経験OK 所要時間の目安:1時間程度

この記事は、「Pythonでできる日常の自動化6選」で紹介した①家計簿の自動集計の詳しい作り方をまとめた記事です。

Excelや電卓を使った毎月の家計簿集計、地味に面倒ですよね。CSVファイルに支出を記録しておけば、あとはPythonが自動でカテゴリ別・月別に集計し、グラフまで作ってくれます。プログラミング未経験でも、コピペで真似できる内容です。

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5

用意するもの

  • Python本体
  • pandas(データ集計用ライブラリ)
  • matplotlib(グラフ作成用ライブラリ)
  • japanize-matplotlib(グラフの日本語文字化けを防ぐライブラリ)
INFO

Pythonのインストール、コードを書くためのエディタ(VS Code)の準備、コードの書き方・実行方法がまだの方は、先に「Pythonを始める前に:インストールとエディタの準備」を済ませてから、この続きに進んでください。

必要なライブラリをインストールする

Python本体には含まれていない、データ集計・グラフ作成用の追加の道具(ライブラリ)を用意します。先ほどのターミナルで、続けて以下のコマンドを実行してください。pipは、Pythonに標準で付属している「ライブラリを取り寄せるための道具」です。

pip install pandas matplotlib japanize-matplotlib
MEMO

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
MEMO

お使いの家計簿アプリに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として画像も保存されます。

MEMO

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つのグラフを横並びにできます。

MEMO

前のステップの円グラフ単体のコードと、ここでのコードは両方とも同じtkinterFigureFigureCanvasTkAggを使っています。実際に使うときは、このステップの「まとめて表示する」コードだけを1つのファイルに書いておけば十分です。

毎月の作業をもっと楽にするヒント

同じkakeibo.csvに支出を追記していくだけで、この仕組みをそのまま使い回せます。月末にコードを実行するだけで、最新のグラフがすぐに手に入ります。

POINT

「①データを追記する→②コードを実行する」の2ステップだけで済むようにしておくと、継続しやすくなります。

うまくいかないときのトラブルシューティング

CSVを読み込むと文字化けします
ExcelからCSV保存すると文字コードがShift-JISになっていることがあります。「CSV UTF-8」形式で保存するか、読み込み時にencoding="shift_jis"を試してください。
日付が正しく認識されません
CSV内の日付の書式を「2026-08-01」のような統一した形式にしてください。表記がバラバラだとparse_datesがうまく変換できないことがあります。
グラフの日本語が「□」のように文字化けします
matplotlibが日本語フォントに対応していないのが原因です。この記事のコードのようにjapanize_matplotlibをインポートするだけで解決します。

まとめ

PythonのpandasとmatplotlibでCSVの支出データを自動集計・グラフ化する方法を紹介しました。最初の設定さえ済ませてしまえば、あとはデータを追記してコードを実行するだけで、毎月の家計簿作業がぐっと楽になります。

他の自動化アイデアも見てみる

ファイル整理や通知の自動化など、Pythonでできる生活の自動化アイデアを6つ紹介しています。

6テーマ一覧を見る

コメント

タイトルとURLをコピーしました