Pythonで家計簿の処理をするプログラムを作った話

2024-08-14 by 内田裕之

こんにちは。

プログラミング言語Pythonで家計簿の処理をしているうっちゃんです。

うちは夫婦でお金を別々に管理しており、月末に割り勘や立て替えの金額を処理しています。

手計算ですべて行うのは面倒なので、Pythonで処理するようにコードを書きました。

今回はそのプログラムの内容を紹介します。

この記事は内容に広告・プロモーションを含みます。

家計簿の処理プログラム

アイディアの画像

夫婦でお金を別々に管理している家庭では、費用をどのように均等に負担するか難しいですよね。

うちはお互いに家計簿アプリで金額を入力しておいて、月末に私が処理をしています。

フローの概要

アプリは「らくな家計簿」(黄色のブタ貯金箱アイコン)を使っています。

お互いに家計簿をつけますが、費用項目を入れるようにしています。

費用項目は、食費、日用雑貨費、冠婚葬祭費、交通費、娯楽、教育などです。

さらに割り勘の項目には「わり」、立て替えの項目には「立て替え」と入れています。

そして月末に処理してお金のやりくりをしています。

支出や割り勘、立て替えを手計算するのは大変なので、Pythonで自動処理できるようにします。

Pythonコード

初めにコードを書きます。


#エクセルを操作するためにpandasをインポートする
import pandas as pd

#うっちゃんの家計簿に支払い者としてhiroを入れる
hiro = pd.read_csv('hiro.csv', encoding="utf-8", sep='\t')
hiro['payer'] = 'hiro'

#妻の家計簿に支払い者としてmisaを入れる
misa = pd.read_csv('misa.csv', encoding="utf-8", sep='\t')
misa['payer'] = 'misa'

#クレジットカード払などのデータを読み込む
credit = pd.read_csv('credit.csv', encoding="utf-8", sep='\t')

#3つのエクセルファイルを統合する
df = pd.concat([hiro,misa,credit])

#統合した家計簿をmerge_data.xlsとして保存する
df.to_excel('merge_data.xlsx',index=False)

# 出力内容を保存するファイルを開く
with open('output.txt', 'w', encoding='utf-8') as f:
    # 収入の合計額を計算・表示
    get_df = df.loc[df['収入/支出'] == '収入']
    get_money = get_df['合計'].sum()
    print('収入の合計:', file=f)
    print(get_money, file=f)

    # 支出の合計額を計算・表示
    pay_df = df.loc[df['収入/支出'] == '支出']
    pay_money = pay_df['合計'].sum()
    print('支出の合計:', file=f)
    print(pay_money, file=f)

    # 今月の収支を計算
    print('今月の収支:', file=f)
    print(get_money + pay_money, file=f)

    # 収支がプラスなら黒字、マイナスなら赤字と表示
    if (get_money + pay_money) >= 0:
        print('今月は黒字です', file=f)
    else:
        print('今月は赤字です', file=f)

    print('-' * 10, file=f)

    # 支出の項目を自動集計して計算する
    list = ['食費', '日用', '治療', '交通', '教育', '葬祭', '家賃', '水光熱', 'ローン', '通信', '投資', 'わり', '立て替え']
    for i in list:
        each_df = df.loc[df['メモ'].str.contains(i)]
        print(each_df, file=f)
        print(i + 'の小計:', file=f)
        print(each_df['合計'].sum(), file=f)

    print('-' * 10, file=f)

    # 割り勘の合計額を計算
    hiro_devide = df.loc[(df['メモ'].str.contains(list[11])) & (df['payer'] == 'hiro')]
    hiro1 = hiro_devide['合計'].sum()
    misa_devide = df.loc[(df['メモ'].str.contains(list[11])) & (df['payer'] == 'misa')]
    misa1 = misa_devide['合計'].sum()

    # 立て替えの合計額を計算
    hiro_back = df.loc[(df['メモ'].str.contains(list[12])) & (df['payer'] == 'hiro')]
    hiro2 = hiro_back['合計'].sum()
    misa_back = df.loc[(df['メモ'].str.contains(list[12])) & (df['payer'] == 'misa')]
    misa2 = misa_back['合計'].sum()

    # 割り勘と立て替えの合計額からうっちゃんと妻のどちらが多く支払っているか計算
    pay1 = (hiro1 + misa1) / 2 
    pay2 = pay1 - misa1
    pay3 = pay2 + misa2 - hiro2

    # 生活費を均等に払うためにお金を渡す額を表示
    if pay3 < 0:
        print('misa→hiroに支払い:', file=f)
        print(0 - pay3, file=f)
    elif pay3 > 0:
        print('hiro→misaに支払い:', file=f)
        print(pay3, file=f)
    else:
        print('支払いなし', file=f)
        

まずは家計簿アプリからcsvファイル形式でエクスポートします。

credit.csvはクレジットカードの費用で、これは事前に手入力しておきます。

私、妻、クレジットのcsvファイルをマージして、1つの.xlsxファイルを保存します。

そして各項目の費用を出して、割り勘、立て替えを計算します。

printで出力した内容は.txtファイルに保存します。

あとはGmailにコピーして送るだけです。

ちなみにプログラムからGmailの新規メールを出すことはできますが、ここでは省略します。

まとめ

今回は家計簿の処理をPythonで自動でする方法をまとめました。

この記事がおもしろいと感じた方はX(旧Twitter)やブログで紹介いただけますと嬉しいです。

おすすめ記事

PythonでFXのデータを取得する方法【ALPHA VANTAGE】

2023年iDeCoのベストな投資先は【コモディティ】Pythonで投資分析した話

【知らないと損】2023年にレバナスに投資してはいけない理由