kuromasa96の日記

このブログは、日々の日常でいいな、と思ったことや、こんな記事あったらいいなをテーマに書いてます。

pythonで超簡易版家計簿作ってみた

まえがき

現在1年弱一人暮らしをしている中で、お金の管理ができないことに気づきました そのため、シンプルで長続きする家計簿を大学で学習しているプログラミング言語Pythonを使用して開発しました。

まずはじめに、今回一番重要なのは「長続きすること」です

どうすれば長続きするのか?

  • 入力の手間を極力省く
  • アプリを実行したい状況にもっていく

今回は、入力の手間を極力省くことで長続きすると仮定しました。

世の中には、家計簿アプリはたくさんあります。 じゃあなぜ、わざわざ自分で自作するのか?

1つは、前にも言った通り長続きしなかった。 入力のカテゴリが多く入力が憂鬱になってしまったことです。

2つ目は、自分で作れは愛着がわき、使うと思ったからです。

3つ目は、pythonのpandasの扱いが下手くそで、うまくデータを整理できない、だから自分で作ってpandasの扱いになれる のが自作する目的です

まえがきが長くなりました。 詳しく説明していきます。

開発環境

まず初めに、GUI(グラフィカルユーザインターフェイス)ではなく、今回はCUI(キャラクタユーザインターフェイス)を利用します。 そのため、入力はすべてキーボード入力です

今回はデータをすべてCSVファイルに保存するので、あらかじめ作成しておきます

家計簿全体フローチャート

f:id:kuromasa96:20210226143614p:plain
フローチャート

実行時画面

  • 数値を入力することでいずれかの処理を行う

    f:id:kuromasa96:20210226133012p:plain
    実行

  • 登録

    登録画面

  • 削除

    f:id:kuromasa96:20210228003356p:plain
    削除

  • 終了 プログラムを終了する

    ソースコード

    以下に今回作成したプログラムを示す。

import numpy as np
import pandas as pd
import csv
import datetime as dt


# データを読み込み
df = pd.read_csv("家計簿.csv",encoding='cp932')

# 削除
def deleted(df):
    print('削除する行番号を入力')
    print(df)
    deleted = int(input())
    df = df.drop(deleted,axis=0)
    return df

def entry():
    # 日付
    print('日付を入力してください')
    day = pd.to_datetime(input())
    day = day.strftime('%Y-%m-%d')

    # カテゴリ
    print('カテゴリ-を入力してください')
    cate = input()

    # 金額
    print('金額を入力してください')
    mane = int(input())

    df_inp = pd.DataFrame({'日付':day,'カテゴリ':cate, '金額':mane},index=[1])
    print(df_inp)

    return df_inp


if __name__ == '__main__':

    while True:
        print('1:登録\n2:削除\n3:終了')
        judg = input()
        if judg == '1':
            df_inp = entry()

            # 結合
            df = pd.concat([df,df_inp],ignore_index=True)

        elif judg == '2':
            df = deleted(df)
        elif judg == '3':
            break

        
        # 書き込み
        df.to_csv('家計簿.csv',columns=['日付','カテゴリ','金額'],index=False,encoding='cp932',mode='w')
        print(df)

改善点

  • グラフの作成を行い可視化する
  • exe化を行おうと試みたが、できなかったのでその問題を解決したい
  • いずれ、GUIでアプリにできれば最高