PR

Pythonで家計簿を自動作成する方法!初心者向けに支出集計・グラフ化まで解説

本ページにはプロモーションが含まれます。

python-household-budget 生活の知恵
スポンサーリンク

毎月の食費や日用品費、光熱費などを家計簿に記録していても、支出を集計したり、前月と比較したりする作業は意外と面倒ですよね。

「家計簿をつける時間を減らしたい」
「毎月、何にお金を使っているのか簡単に把握したい」
「Pythonを使って日常生活に役立つプログラムを作ってみたい」

このような方におすすめなのが、Pythonを使った家計簿の自動化です。

Pythonを使えば、支出データの合計計算や費目別の集計、月ごとの比較、グラフ作成などを自動化できます。さらに、CSVファイルに保存した家計簿データを読み込めば、毎回手作業で計算する必要もありません。

この記事では、Python初心者向けに、家計簿を自動作成する方法を基礎から詳しく解説します。

実際に動かせるPythonコードやサンプルデータ、実行結果も紹介するので、プログラミングの経験が少ない方も順番に取り組んでみてください。

  1. Pythonで家計簿を自動作成するメリット
    1. 手作業の家計簿でよくある悩み
    2. Pythonで自動化できること
    3. この記事で作成する家計簿ツール
  2. Pythonで家計簿を作るための準備
    1. Pythonの実行環境を準備する
    2. 必要なライブラリを確認する
    3. 家計簿データの保存形式を決める
  3. Pythonで簡単な家計簿を作る方法【基礎編】
    1. 支出データをPythonで管理する
    2. 支出の合計金額を計算する
    3. 費目別に支出を集計する
    4. 予算と実際の支出を比較する
  4. CSVファイルを読み込んで家計簿を自動集計する
    1. 家計簿のサンプルCSVを作成する
    2. PythonでCSVファイルを読み込む
    3. CSVから支出合計と費目別集計を計算する
    4. 月ごとの支出を計算する
    5. 集計結果をCSVファイルに保存する
  5. pandasを使って家計簿を効率よく分析する
    1. pandasをインストールする
    2. pandasでCSVファイルを読み込む
    3. 費目別に支出を集計する
    4. 月ごとの支出を集計する
    5. 支出額の多い費目を調べる
    6. 集計結果をExcelで確認できる形式にする
  6. Pythonで家計簿のグラフを作成する
    1. matplotlibをインストールする
    2. 費目別の支出を円グラフで表示する
    3. 月ごとの支出を棒グラフで比較する
    4. グラフを画像ファイルとして保存する
  7. 家計簿プログラムを実用的にする応用編
    1. 収入と支出から収支を計算する
    2. 費目ごとに月間予算を設定する
    3. 予算超過を自動で通知する
    4. 複数月のデータをまとめて分析する
    5. 家計簿を定期的に自動実行する
  8. Pythonで家計簿を作るときの注意点
    1. CSVの文字化けに対処する
    2. 日付や金額の入力ミスを防ぐ
    3. データのバックアップを取る
    4. 個人情報や金融情報を安全に管理する
  9. Pythonの家計簿でよくあるエラーと対処法
    1. ファイルが見つからないエラー
    2. 必要なライブラリが見つからないエラー
    3. CSVの列名や金額データが正しく読み込めない場合
    4. グラフが日本語に対応しない場合
  10. まとめ

Pythonで家計簿を自動作成するメリット

Pythonは、データの計算や整理、ファイルの読み書きなどを得意とするプログラミング言語です。

家計簿と組み合わせることで、毎日の支出記録を活用し、家計管理を効率化できます。

手作業の家計簿でよくある悩み

家計簿を手作業で管理していると、次のような悩みが生まれがちです。

  • 毎月の支出を計算するのに時間がかかる
  • 食費や日用品費など、費目ごとの合計を出すのが面倒
  • 前月と今月の支出を比較しにくい
  • 予算を超えていないか確認するのが大変
  • 支出の傾向をグラフで確認したい
  • 過去の家計簿を分析するために何度も計算し直している

支出データが増えるほど、こうした作業の負担は大きくなります。

Pythonを使って集計処理をプログラムにしておけば、同じ計算を何度も手作業で行わずに済みます。

Pythonで自動化できること

Pythonを使った家計簿では、次のような機能を作成できます。

機能できること
支出合計の計算1か月に使った金額を自動計算する
費目別集計食費、日用品費、交通費などを集計する
月別集計月ごとの支出を計算して比較する
CSV読み込みファイルに保存した家計簿データを読み込む
グラフ作成費目別や月別の支出を視覚化する
予算管理予算と実際の支出を比較する
結果の保存集計結果をCSVファイルなどに保存する

最初からすべての機能を作る必要はありません。

まずは支出の合計を計算する簡単なプログラムから始め、慣れてきたらCSVの読み込みやグラフ化に挑戦するとよいでしょう。

この記事で作成する家計簿ツール

この記事では、次の順番で家計簿を作成していきます。

  1. Pythonの基本機能で支出を集計する
  2. CSVファイルから家計簿データを読み込む
  3. pandasを使って費目別・月別に集計する
  4. matplotlibを使って支出をグラフ化する
  5. 予算超過をチェックする機能を追加する

最後まで進めると、家計簿データを読み込んで集計し、結果を保存したり、グラフで確認したりする仕組みを作れるようになります。

Pythonで家計簿を作るための準備

まずは、Pythonでプログラムを実行できる環境を準備しましょう。

Pythonの実行環境を準備する

Pythonを実行するには、パソコンにPythonをインストールする方法や、オンラインの実行環境を利用する方法があります。

初めてPythonを使う場合は、次のような選択肢があります。

  • パソコンにPythonをインストールして実行する
  • Visual Studio Codeなどのエディターを使って実行する
  • Google Colabなどのオンライン環境を利用する

この記事では、Pythonの基本的な文法を理解していることを前提にしつつ、コードをコピーして試せるように説明します。

Pythonをパソコンにインストールしている場合は、ターミナルやコマンドプロンプトで次のコマンドを実行してください。

python --version

環境によっては、次のコマンドで確認します。

python3 --version

Pythonのバージョンが表示されれば、実行環境を確認できています。

必要なライブラリを確認する

最初の家計簿プログラムでは、Pythonに標準で用意されている機能を使用します。

そのため、追加のライブラリをインストールする必要はありません。

後半で紹介するデータ分析やグラフ作成では、次のライブラリを使用します。

ライブラリ用途
pandasデータの読み込み・集計・分析
matplotlibグラフの作成

必要になった段階で、次のコマンドを実行してインストールしましょう。

python -m pip install pandas matplotlib

環境によっては、python3 -m pip install pandas matplotlib を使用してください。

家計簿データの保存形式を決める

家計簿を自動化する場合、支出データをどのような形式で保存するかが重要です。

今回は、CSVファイルを使用します。

CSVは、表形式のデータをカンマ区切りで保存するファイル形式です。表計算ソフトでも開けるため、家計簿の管理に適しています。

例えば、次のようなデータを保存できます。

date,type,category,amount,memo
2026-01-05,expense,食費,1200,スーパー
2026-01-06,expense,交通費,500,電車
2026-01-07,expense,日用品費,800,洗剤

このデータには、日付、収支の種類、費目、金額、メモを記録しています。

金額は円単位の整数で保存するため、小数点以下の計算誤差を気にせず管理しやすい形式です。

Pythonで簡単な家計簿を作る方法【基礎編】

最初はCSVファイルを使わず、Pythonのコードに支出データを直接記述してみましょう。

この方法なら、ファイル操作や外部ライブラリの知識がなくても、家計簿の基本的な仕組みを理解できます。

支出データをPythonで管理する

まずは、食費、交通費、日用品費の3種類の支出を登録してみます。

次のコードを実行してください。

expenses = [
    {"category": "食費", "amount": 1200},
    {"category": "交通費", "amount": 500},
    {"category": "日用品費", "amount": 800},
    {"category": "食費", "amount": 1800},
]

for expense in expenses:
    print(expense["category"], expense["amount"], "円")

実行結果は次のとおりです。

食費 1200 円
交通費 500 円
日用品費 800 円
食費 1800 円

ここでは、支出1件を辞書形式で管理しています。

辞書は、項目名と値を組み合わせてデータを保存する仕組みです。

例えば、次の部分では費目と金額を登録しています。

{"category": "食費", "amount": 1200}

category は費目、amount は金額を表します。

複数の支出データをリストにまとめておくことで、繰り返し処理を使って一覧表示したり、合計金額を計算したりできます。

支出の合計金額を計算する

次に、登録した支出の合計を計算しましょう。

先ほどの expenses を利用して、次のコードを実行します。

total = 0

for expense in expenses:
    total += expense["amount"]

print(f"支出合計:{total:,}円")

実行結果は次のとおりです。

支出合計:4,300円

total = 0 は、合計金額を保存する変数を用意する処理です。

for 文で支出データを1件ずつ取り出し、total += expense["amount"] で金額を加算しています。

最後に、合計金額を表示します。

この方法を使えば、支出データが増えても、登録された金額を自動的に合計できます。

費目別に支出を集計する

家計簿では、支出全体の合計だけでなく、食費や交通費などの費目別集計も重要です。

例えば、食費がいくらかかっているのか分かれば、食費の予算を見直すときに役立ちます。

次のコードで、費目ごとの合計を計算してみましょう。

category_totals = {}

for expense in expenses:
    category = expense["category"]
    amount = expense["amount"]

    if category not in category_totals:
        category_totals[category] = 0

    category_totals[category] += amount

for category, total in category_totals.items():
    print(f"{category}:{total:,}円")

実行結果は次のとおりです。

食費:3,000円
交通費:500円
日用品費:800円

このプログラムでは、category_totals という辞書に費目ごとの合計を保存しています。

同じ費目が登場した場合は、既存の合計に金額を加算します。

この仕組みを使うと、支出データが増えても費目別に自動集計できます。

予算と実際の支出を比較する

次は、費目ごとに予算を設定し、実際の支出と比較する機能を追加しましょう。

例えば、食費の予算を30,000円、交通費を10,000円、日用品費を5,000円に設定します。

budgets = {
    "食費": 30000,
    "交通費": 10000,
    "日用品費": 5000,
}

for category, budget in budgets.items():
    actual = category_totals.get(category, 0)
    remaining = budget - actual

    print(f"{category}")
    print(f"  予算:{budget:,}円")
    print(f"  支出:{actual:,}円")
    print(f"  残り:{remaining:,}円")

実行結果は次のとおりです。

食費
  予算:30,000円
  支出:3,000円
  残り:27,000円
交通費
  予算:10,000円
  支出:500円
  残り:9,500円
日用品費
  予算:5,000円
  支出:800円
  残り:4,200円

category_totals.get(category, 0) は、該当する費目の集計結果を取得する処理です。

まだ支出が登録されていない費目については、0円として扱います。

なお、予算から支出を引いた結果がマイナスになった場合は、予算を超過していることを意味します。

ここまでで、Pythonを使った基本的な家計簿の仕組みができました。

CSVファイルを読み込んで家計簿を自動集計する

ここからは、実際の家計簿に近い仕組みを作ります。

プログラムの中に支出データを直接記述する方法では、支出を追加するたびにコードを変更しなければなりません。

そこで、支出データをCSVファイルに保存し、Pythonから読み込む方法に切り替えます。

家計簿のサンプルCSVを作成する

まず、次の内容をコピーして、kakeibo.csv という名前で保存してください。

文字コードはUTF-8を使用します。

date,type,category,amount,memo
2026-01-05,expense,食費,1200,スーパー
2026-01-06,expense,交通費,500,電車
2026-01-07,expense,日用品費,800,洗剤
2026-01-10,expense,食費,1800,食材
2026-01-15,expense,光熱費,6500,電気代
2026-01-20,income,給与,250000,給与
2026-02-03,expense,食費,1500,スーパー
2026-02-06,expense,交通費,700,電車
2026-02-10,expense,日用品費,1200,日用品
2026-02-15,expense,光熱費,7200,電気代
2026-02-20,income,給与,250000,給与

このCSVには、1月と2月の収入・支出データを記録しています。

type の値は、収入を income、支出を expense としています。

実際の家計簿では、日付や費目、金額などを自分のデータに置き換えて利用できます。

PythonでCSVファイルを読み込む

Pythonには、CSVファイルを読み書きするための csv モジュールが標準で用意されています。

追加のライブラリをインストールせずに利用できるため、初心者にもおすすめです。

次のコードを kakeibo.py という名前で保存します。

import csv

with open("kakeibo.csv", "r", encoding="utf-8-sig", newline="") as file:
    reader = csv.DictReader(file)

    for row in reader:
        print(row)

kakeibo.py と kakeibo.csv は、同じフォルダに保存してください。

実行すると、CSVの各行が辞書として表示されます。

{'date': '2026-01-05', 'type': 'expense', 'category': '食費', 'amount': '1200', 'memo': 'スーパー'}
{'date': '2026-01-06', 'type': 'expense', 'category': '交通費', 'amount': '500', 'memo': '電車'}
...

csv.DictReader() は、CSVの見出しを使って各行のデータを辞書形式で読み込む機能です。

ここで注意したいのが、CSVから読み込んだ金額は文字列として扱われる点です。

合計を計算する場合は、int() などを使って数値に変換する必要があります。

また、encoding="utf-8-sig" を指定しておくと、Excelなどで作成したUTF-8のCSVに含まれるBOMへの対処に役立ちます。

CSVから支出合計と費目別集計を計算する

次は、CSVファイルを読み込み、支出合計と費目別の合計を計算するプログラムを作ります。

import csv

total_expense = 0
category_totals = {}

with open("kakeibo.csv", "r", encoding="utf-8-sig", newline="") as file:
    reader = csv.DictReader(file)

    for row in reader:
        if row["type"] != "expense":
            continue

        category = row["category"]
        amount = int(row["amount"])

        total_expense += amount

        if category not in category_totals:
            category_totals[category] = 0

        category_totals[category] += amount

print(f"支出合計:{total_expense:,}円")
print()
print("費目別支出")

for category, total in category_totals.items():
    print(f"{category}:{total:,}円")

実行結果は次のとおりです。

支出合計:19,700円

費目別支出
食費:4,500円
交通費:1,200円
日用品費:2,000円
光熱費:13,000円

このプログラムでは、type が expense のデータだけを集計しています。

給与などの収入を除外することで、支出の合計を正しく計算できます。

また、費目別の集計結果を辞書に保存することで、食費や光熱費などの合計を自動で算出しています。

サンプルデータを追加しても、プログラムを書き換える必要はありません。CSVに新しい支出を記録すれば、次回の実行時に集計結果へ反映されます。

月ごとの支出を計算する

続いて、月ごとの支出を集計する機能を追加しましょう。

家計簿では、1か月の支出を把握することが大切です。

次のコードでは、日付の先頭7文字を利用して年月を取り出し、月別の支出を集計します。

import csv

monthly_totals = {}

with open("kakeibo.csv", "r", encoding="utf-8-sig", newline="") as file:
    reader = csv.DictReader(file)

    for row in reader:
        if row["type"] != "expense":
            continue

        month = row["date"][:7]
        amount = int(row["amount"])

        monthly_totals[month] = monthly_totals.get(month, 0) + amount

print("月別支出")

for month, total in sorted(monthly_totals.items()):
    print(f"{month}:{total:,}円")

実行結果は次のとおりです。

月別支出
2026-01:10,800円
2026-02:10,600円

row["date"][:7] は、日付の文字列から年月に相当する部分を取り出しています。

今回のデータは YYYY-MM-DD 形式で統一しているため、この方法で年月を取得できます。

sorted() を使用すると、年月の順に結果を表示できます。

実際に利用するときは、日付の入力形式を統一しておくことが重要です。

集計結果をCSVファイルに保存する

集計結果を画面に表示するだけでなく、別のCSVファイルに保存することもできます。

次のコードでは、費目別の集計結果を category_summary.csv に保存します。

import csv

category_totals = {}

with open("kakeibo.csv", "r", encoding="utf-8-sig", newline="") as file:
    reader = csv.DictReader(file)

    for row in reader:
        if row["type"] != "expense":
            continue

        category = row["category"]
        amount = int(row["amount"])

        category_totals[category] = (
            category_totals.get(category, 0) + amount
        )

with open(
    "category_summary.csv",
    "w",
    encoding="utf-8-sig",
    newline=""
) as file:
    writer = csv.writer(file)
    writer.writerow(["category", "total"])

    for category, total in sorted(category_totals.items()):
        writer.writerow([category, total])

print("集計結果をcategory_summary.csvに保存しました。")

実行すると、集計結果が新しいCSVファイルとして保存されます。

このファイルは表計算ソフトで開いて確認することもできます。

元の家計簿データと集計結果を別々に保存しておけば、元データを残したまま分析結果を管理できます。

pandasを使って家計簿を効率よく分析する

ここまでは、Pythonの標準機能を使って家計簿を作成してきました。

さらに効率よくデータを扱いたい場合は、pandasというライブラリが便利です。

pandasは、表形式のデータを読み込み、抽出、集計、加工するためのライブラリです。

家計簿のように、日付、費目、金額などの項目を持つデータと相性がよい特徴があります。

pandasをインストールする

まだインストールしていない場合は、ターミナルやコマンドプロンプトで次のコマンドを実行します。

python -m pip install pandas

インストールが完了したら、Pythonコードから読み込めるようになります。

pandasでCSVファイルを読み込む

次のコードを実行して、家計簿データを読み込んでみましょう。

import pandas as pd

df = pd.read_csv(
    "kakeibo.csv",
    encoding="utf-8-sig"
)

print(df.head())

pd.read_csv() は、CSVファイルを読み込んでDataFrameという表形式のデータに変換する関数です。

df.head() を実行すると、先頭の5行を確認できます。

実行結果のイメージは次のとおりです。

         date     type category  amount   memo
0  2026-01-05  expense       食費    1200  スーパー
1  2026-01-06  expense      交通費     500     電車
2  2026-01-07  expense     日用品費     800     洗剤
3  2026-01-10  expense       食費    1800     食材
4  2026-01-15  expense      光熱費    6500    電気代

表示形式や列幅は、実行環境によって異なります。

費目別に支出を集計する

pandasを使うと、費目別の集計を簡潔に記述できます。

import pandas as pd

df = pd.read_csv("kakeibo.csv", encoding="utf-8-sig")

expenses = df[df["type"] == "expense"]

category_totals = (
    expenses.groupby("category")["amount"]
    .sum()
    .sort_values(ascending=False)
)

print(category_totals)

実行結果は次のとおりです。

category
光熱費      13000
食費         4500
日用品費      2000
交通費        1200
Name: amount, dtype: int64

df[df["type"] == "expense"] は、支出のデータだけを抽出する処理です。

groupby("category") で費目ごとにデータをまとめ、sum() で金額を合計しています。

さらに、sort_values(ascending=False) を使うことで、支出額の多い順に並べ替えています。

この方法なら、費目が増えた場合も、費目名を一つずつ指定することなく集計できます。

月ごとの支出を集計する

次は、月別の支出を集計してみましょう。

import pandas as pd

df = pd.read_csv("kakeibo.csv", encoding="utf-8-sig")

expenses = df[df["type"] == "expense"].copy()

expenses["date"] = pd.to_datetime(
    expenses["date"],
    errors="raise"
)

expenses["month"] = expenses["date"].dt.to_period("M")

monthly_totals = expenses.groupby("month")["amount"].sum()

print(monthly_totals)

実行結果は次のとおりです。

month
2026-01    10800
2026-02    10600
Freq: M, Name: amount, dtype: int64

ここでは、日付を日時データに変換してから、年月の情報を取り出しています。

pd.to_datetime() を使うと、文字列の日付を日時として扱えるようになります。

.dt.to_period("M") は、年月単位でデータをまとめるための処理です。

日付の形式が正しくない場合はエラーになることがあるため、CSVに記録する日付は統一しておきましょう。

支出額の多い費目を調べる

家計簿を分析する際は、支出額の多い費目を確認することも重要です。

例えば、光熱費が多い月や、食費が増えている月を見つければ、家計を見直すきっかけになります。

先ほどのコードにある category_totals を利用すると、支出額の多い順に費目を確認できます。

print("支出額の多い費目")

for category, amount in category_totals.items():
    print(f"{category}:{amount:,}円")

ここでの category_totals は、pandasで費目別に集計したSeriesです。

.items() を使うと、費目名と金額を順番に取り出せます。

なお、家計簿の集計結果は支出の傾向を把握するためのものであり、金額が多いことだけで無駄な支出と判断する必要はありません。必要な支出と見直せる支出を分けて考えることが大切です。

集計結果をExcelで確認できる形式にする

pandasでは、集計結果をCSVファイルに保存できます。

category_totals.to_csv(
    "category_summary.csv",
    encoding="utf-8-sig",
    header=["total"]
)

print("費目別集計を保存しました。")

この例では、費目別集計をCSVとして保存しています。

Excel形式のファイルに保存したい場合は、to_excel() も利用できます。ただし、Excelファイルを扱うには、環境に応じて openpyxl などの追加ライブラリが必要になることがあります。

python -m pip install openpyxl

インストール後は、次のように保存できます。

category_totals.to_excel("category_summary.xlsx")

CSVとExcel形式のどちらを利用するかは、普段の家計簿の管理方法に合わせて選びましょう。

Pythonで家計簿のグラフを作成する

集計した金額をグラフにすると、支出の傾向を直感的に把握しやすくなります。

例えば、費目別の支出を円グラフにしたり、月ごとの支出を棒グラフにしたりする方法があります。

ここでは、matplotlibを使ったグラフ作成を紹介します。

matplotlibをインストールする

まだインストールしていない場合は、次のコマンドを実行します。

python -m pip install matplotlib

インストールできたら、Pythonから matplotlib.pyplot を読み込んで使用します。

費目別の支出を円グラフで表示する

まずは、費目別の支出を円グラフで表示しましょう。

次のコードは、CSVから支出データを読み込み、費目別の支出を集計してグラフを作成する例です。

import pandas as pd
import matplotlib.pyplot as plt

df = pd.read_csv("kakeibo.csv", encoding="utf-8-sig")

expenses = df[df["type"] == "expense"]

category_totals = (
    expenses.groupby("category")["amount"]
    .sum()
    .sort_values(ascending=False)
)

plt.figure(figsize=(8, 8))

plt.pie(
    category_totals,
    labels=category_totals.index,
    autopct="%1.1f%%",
    startangle=90
)

plt.title("Category-wise Expenses")
plt.tight_layout()
plt.savefig("category_expenses.png", dpi=150)
plt.show()

このプログラムでは、費目ごとの支出額を集計した後、円グラフを作成しています。

labels はグラフに表示する費目名、autopct は各費目が全体に占める割合を表示するための設定です。

plt.savefig() を使うことで、作成したグラフを画像ファイルとして保存できます。

実行すると、category_expenses.png というファイルが作成されます。

このグラフを見ると、どの費目が支出全体の大きな割合を占めているのかを確認できます。

なお、上のコードではグラフのタイトルを英語にしています。日本語のタイトルやラベルを使用する場合は、実行環境に日本語フォントを設定してください。

月ごとの支出を棒グラフで比較する

次に、月別の支出を棒グラフで比較してみましょう。

import pandas as pd
import matplotlib.pyplot as plt

df = pd.read_csv("kakeibo.csv", encoding="utf-8-sig")

expenses = df[df["type"] == "expense"].copy()

expenses["date"] = pd.to_datetime(expenses["date"])
expenses["month"] = expenses["date"].dt.to_period("M").astype(str)

monthly_totals = expenses.groupby("month")["amount"].sum()

plt.figure(figsize=(8, 5))

plt.bar(monthly_totals.index, monthly_totals.values)

plt.title("Monthly Expenses")
plt.xlabel("Month")
plt.ylabel("Amount (JPY)")
plt.tight_layout()
plt.savefig("monthly_expenses.png", dpi=150)
plt.show()

このプログラムでは、月別に集計した支出額を棒グラフで表示します。

plt.bar() は棒グラフを作成する関数です。

横軸には年月、縦軸には支出額が表示されます。

サンプルデータでは、2026年1月の支出は10,800円、2026年2月の支出は10,600円です。

実行結果のグラフでは、2か月の支出額の違いを視覚的に比較できます。

ただし、比較できるのは登録されたデータの範囲です。実際の家計を分析する際は、入力漏れがないか確認しておきましょう。

グラフを画像ファイルとして保存する

家計簿のグラフを画像ファイルに保存しておけば、毎月の支出を記録したり、レポートに利用したりできます。

例えば、次の処理を追加すると、グラフをPNG形式で保存できます。

plt.savefig("monthly_expenses.png", dpi=150)

dpi=150 は、画像の解像度を指定する設定です。

同じファイル名で保存すると、既存の画像が上書きされるため注意してください。

毎月の結果を残したい場合は、ファイル名に年月を含める方法もあります。

例えば、monthly_expenses_2026-02.png のように保存すると、月ごとのグラフを整理しやすくなります。

家計簿プログラムを実用的にする応用編

ここまでの機能を組み合わせると、基本的な家計簿の自動集計ができるようになります。

さらに実用性を高めるために、収支計算や予算超過のチェック機能を追加してみましょう。

収入と支出から収支を計算する

家計管理では、支出だけでなく収入も記録することが重要です。

収入から支出を差し引くと、指定した期間の収支を計算できます。

次のコードでは、CSVに登録された収入と支出をそれぞれ集計します。

import csv

total_income = 0
total_expense = 0

with open("kakeibo.csv", "r", encoding="utf-8-sig", newline="") as file:
    reader = csv.DictReader(file)

    for row in reader:
        amount = int(row["amount"])

        if row["type"] == "income":
            total_income += amount
        elif row["type"] == "expense":
            total_expense += amount

balance = total_income - total_expense

print(f"収入合計:{total_income:,}円")
print(f"支出合計:{total_expense:,}円")
print(f"収支:{balance:,}円")

サンプルデータでの実行結果は次のとおりです。

収入合計:500,000円
支出合計:21,400円
収支:478,600円

このコードは、サンプルCSVに記録された2か月分のデータを合算しています。

1か月ごとの収支を確認したい場合は、月別集計のコードと組み合わせて、年月ごとに収入と支出を計算するとよいでしょう。

費目ごとに月間予算を設定する

次に、費目ごとの予算を設定して、実際の支出と比較します。

例えば、次のような予算を設定します。

budgets = {
    "食費": 30000,
    "交通費": 10000,
    "日用品費": 5000,
    "光熱費": 15000,
}

ここでは、費目名をキー、予算金額を値として辞書に保存しています。

CSVから集計した費目別の支出データと組み合わせれば、予算との差額を計算できます。

for category, budget in budgets.items():
    actual = category_totals.get(category, 0)
    difference = budget - actual

    if difference >= 0:
        print(
            f"{category}:予算内 "
            f"(残り{difference:,}円)"
        )
    else:
        print(
            f"{category}:予算超過 "
            f"(超過額{-difference:,}円)"
        )

このコードは、category_totals に費目別の支出額が保存されていることを前提としています。

予算と実際の支出を比較することで、どの費目に余裕があるか、どの費目を見直す必要があるかを確認できます。

予算超過を自動で通知する

予算を超えたときにメッセージを表示する機能を追加すると、家計簿の確認がさらに簡単になります。

for category, budget in budgets.items():
    actual = category_totals.get(category, 0)

    if actual > budget:
        print(
            f"注意:{category}が予算を"
            f"{actual - budget:,}円超えています。"
        )
    else:
        print(f"{category}は予算内です。")

このプログラムでは、実際の支出が予算を超えた場合だけ注意メッセージを表示します。

なお、ここで使用している category_totals は、あらかじめCSVから費目別に集計したデータです。

予算超過を正しく判定するには、予算と支出を同じ期間で比較することが大切です。例えば、1か月の予算と比較する場合は、対象月の支出だけを集計してから判定しましょう。

複数月のデータをまとめて分析する

家計簿のデータが数か月分、数年分と増えてきた場合は、複数月のデータをまとめて分析すると便利です。

pandasで年月ごとの支出を集計すれば、月ごとの変化を把握できます。

import pandas as pd

df = pd.read_csv("kakeibo.csv", encoding="utf-8-sig")

expenses = df[df["type"] == "expense"].copy()

expenses["date"] = pd.to_datetime(expenses["date"])
expenses["month"] = expenses["date"].dt.to_period("M")

monthly_category_totals = pd.pivot_table(
    expenses,
    index="month",
    columns="category",
    values="amount",
    aggfunc="sum",
    fill_value=0
)

print(monthly_category_totals)

このコードでは、行に年月、列に費目を配置した表を作成します。

例えば、1月と2月の食費や光熱費を横並びで比較できます。

fill_value=0 を指定すると、該当する月に支出がない費目は0として表示されます。

このような表を作成すると、特定の費目が増えているかどうかを確認しやすくなります。

家計簿を定期的に自動実行する

家計簿のプログラムを作成したら、定期的に実行する方法も検討できます。

例えば、毎月の集計を自動化する場合は、次のような方法があります。

  • Windowsのタスクスケジューラを使う
  • macOSやLinuxのcronを使う
  • 必要なタイミングで手動実行する

ただし、プログラムを定期実行するだけで支出データが自動的に集まるわけではありません。

CSVに支出データを入力する仕組みや、データを安全に保存する仕組みも必要です。

最初は手動でデータを入力して集計し、慣れてきたら定期実行などの機能を追加していくとよいでしょう。

Pythonで家計簿を作るときの注意点

Pythonで家計簿を自動化すると便利ですが、正確に管理するためにはいくつかの注意点があります。

CSVの文字化けに対処する

CSVファイルを読み込んだときに、日本語の費目名やメモが文字化けすることがあります。

このような場合は、ファイルの文字コードを確認してください。

この記事では、次のように読み込んでいます。

df = pd.read_csv(
    "kakeibo.csv",
    encoding="utf-8-sig"
)

UTF-8のCSVでBOMが付いている場合は、utf-8-sig が役立ちます。

ただし、ファイルの実際の文字コードが異なる場合は、適切な文字コードを指定する必要があります。

文字化けした場合は、保存時の文字コードと読み込み時の設定を確認しましょう。

日付や金額の入力ミスを防ぐ

家計簿の集計結果を正しくするには、データの入力ルールを統一することが大切です。

例えば、日付は 2026-01-05 のような形式に統一します。

金額は、カンマや通貨記号を含めず、1200 のような整数で保存すると扱いやすくなります。

次のような入力は、数値変換の際にエラーになる可能性があります。

1,200円
約500円
未入力

CSVに保存する金額は数値だけにし、必要な説明はメモ欄に記録しましょう。

また、金額が空欄になっていたり、日付が正しく入力されていなかったりすると、集計結果が正しくならないことがあります。

プログラムに慣れてきたら、入力内容をチェックする処理を追加すると安心です。

データのバックアップを取る

家計簿には、日々の収支や生活に関する情報が含まれます。

誤ってファイルを削除したり、プログラムで元のデータを上書きしたりすると、記録を失う可能性があります。

次のような対策を心がけましょう。

  • 元の家計簿CSVを定期的にバックアップする
  • 集計結果は別のファイルに保存する
  • 大きな変更を行う前にコピーを作成する
  • ファイルの保存先を分かりやすく整理する

元データを残しておけば、プログラムの修正や集計方法の変更を行う場合にも安心です。

個人情報や金融情報を安全に管理する

家計簿のデータには、収入、支出、購入履歴など、個人的な情報が含まれる場合があります。

そのため、CSVファイルの保存先や共有方法にも注意が必要です。

特に、家計簿データをオンラインサービスにアップロードする場合は、サービスの利用条件やプライバシー設定を確認しましょう。

実際の銀行口座番号、カード番号、ログイン情報などを家計簿のメモ欄に記録することは避けてください。

また、この記事のサンプルデータは説明用の架空データです。実際の家計簿を作る場合は、自分のデータを適切に管理しましょう。

Pythonの家計簿でよくあるエラーと対処法

最後に、Python初心者が家計簿プログラムを実行するときに遭遇しやすいエラーと、その対処法を紹介します。

ファイルが見つからないエラー

CSVファイルを読み込むときに、次のようなエラーが発生することがあります。

FileNotFoundError

これは、指定したファイルが見つからない場合に発生するエラーです。

次の点を確認してください。

  • kakeibo.csv という名前になっているか
  • PythonのプログラムとCSVファイルが同じフォルダにあるか
  • プログラムを実行している場所が正しいか
  • ファイル名のスペルが一致しているか

ファイルの保存先を正しく指定すれば、解決できる場合が多いです。

必要なライブラリが見つからないエラー

pandasやmatplotlibを読み込む際に、次のようなエラーが発生することがあります。

ModuleNotFoundError

この場合は、必要なライブラリがインストールされていないか、使用しているPython環境が異なっている可能性があります。

次のコマンドを実行してみましょう。

python -m pip install pandas matplotlib

それでも解決しない場合は、プログラムを実行しているPythonと、ライブラリをインストールしたPythonが同じ環境かどうかを確認してください。

CSVの列名や金額データが正しく読み込めない場合

CSVの列名がプログラムと異なる場合、データを取得できないことがあります。

例えば、プログラムでは amount という列を使用しているのに、CSV側では 金額 という列名になっていると、正しく処理できません。

CSVの見出しとコードで使用している列名を一致させましょう。

また、金額に文字列が含まれていると、数値への変換時にエラーになる場合があります。

CSVの金額欄には数字だけを入力するようにし、必要に応じて入力チェックを追加してください。

グラフが日本語に対応しない場合

matplotlibで日本語の費目名やタイトルを表示すると、環境によっては文字化けしたり、文字が正しく表示されなかったりすることがあります。

この場合は、使用している環境に日本語フォントを設定する必要があります。

例えば、Windowsでは環境によって Meiryo などの日本語フォントを利用できます。

import matplotlib.pyplot as plt

plt.rcParams["font.family"] = "Meiryo"

この設定は、対象のフォントがインストールされている環境で使用してください。

macOS、Linux、Google Colabなどでは、利用できるフォントが異なるため、それぞれの環境に合わせて設定しましょう。

まとめ

この記事では、Pythonを使って家計簿を自動作成する方法を、基礎から応用まで紹介しました。

Pythonを活用すると、毎月の支出を手作業で集計する負担を減らし、費目別や月別の支出を効率よく管理できます。

今回紹介した主な内容は次のとおりです。

  • Pythonの基本機能を使った支出合計の計算
  • 費目別の支出集計と予算管理
  • CSVファイルの読み込みと集計結果の保存
  • pandasを使った月別・費目別のデータ分析
  • matplotlibによる支出グラフの作成
  • 収入と支出の比較、予算超過のチェック
  • エラーへの対処方法とデータ管理の注意点

最初からすべての機能を実装する必要はありません。

まずは少量の支出データを使って合計金額を計算し、次にCSVの読み込み、費目別集計、グラフ作成へと進めてみてください。

自分の生活に合わせて少しずつ機能を追加すれば、実用的な家計簿プログラムに育てていくことができます。

Pythonは、家計簿だけでなく、旅行費用の計算や写真の整理など、さまざまな日常作業の自動化にも活用できます。

今回の家計簿作成をきっかけに、身近な作業をPythonで効率化することにも挑戦してみてはいかがでしょうか。

スポンサーリンク
タイトルとURLをコピーしました