Streamlitで家計簿アプリを作ろう!

Python

今回は家計簿アプリをStreamlitを使って作成していきたいと思います。
まずはベースの部分を作成し、少しずつ様々な改良を加えていきます。
今回は最初ですので、家計簿アプリの根幹となる収入と支出の入力と記録部分を作成しています。

今回作成するアプリのイメージ

このように要素を追加できるようにします
アプリイメージ

収入の追加

収入はプラスで入力します。
収入の追加
支出はマイナスで入力することで、登録できます。
支出の追加
データのクリアですべてのデータを消去し初期化します。
データのクリア

コード全体

import streamlit as st
import pandas as pd

# セッション状態を初期化
if 'data' not in st.session_state:
    st.session_state.data = pd.DataFrame(columns=["日付", "項目", "金額"])
    st.session_state.clear_data = False  # クリアフラグを初期化

# Streamlitアプリケーションのタイトル
st.title("家計簿アプリ")

# 収支データの入力フォーム
st.header("収支の記録")
date = st.date_input("日付", pd.to_datetime("today"))
item = st.text_input("項目")
amount = st.number_input("金額", value=0, step=1)  # 金額を整数として入力

# データをデータフレームに追加
if st.button("記録する"):
    st.session_state.data = st.session_state.data.append({"日付": date, "項目": item, "金額": int(amount)}, ignore_index=True)

# 収支データの表示
st.header("収支データ")
st.write(st.session_state.data)

# 統計情報の表示
st.header("統計情報")
st.write("合計支出:", st.session_state.data[st.session_state.data["金額"] < 0]["金額"].sum())
st.write("合計収入:", st.session_state.data[st.session_state.data["金額"] > 0]["金額"].sum())

# アプリのクリアボタン
if st.button("データをクリア"):
    st.session_state.data = pd.DataFrame(columns=["日付", "項目", "金額"])
    st.session_state.clear_data = True  # クリアフラグをTrueに設定
    st.success("データがクリアされました。")

# データがクリアされた場合、初期画面を表示
if st.session_state.clear_data:
    st.session_state.clear_data = False
    st.experimental_rerun()  # アプリを再実行して初期画面を表示

# データの保存
st.session_state.data.to_csv("家計簿データ.csv", index=False)

コードの詳細

ライブラリのインポートとセッション状態の初期化

import streamlit as st
import pandas as pd

# セッション状態を初期化
if 'data' not in st.session_state:
    st.session_state.data = pd.DataFrame(columns=["日付", "項目", "金額"])
    st.session_state.clear_data = False  # クリアフラグを初期化

この部分では、StreamlitライブラリとPandasライブラリをインポートし、セッション状態を初期化しています。セッション状態はアプリのデータを保持するために使用され、data変数とclear_dataフラグが初期化されます。

アプリケーションのタイトルとデータ入力フォーム

# Streamlitアプリケーションのタイトル
st.title("家計簿アプリ")

# 収支データの入力フォーム
st.header("収支の記録")
date = st.date_input("日付", pd.to_datetime("today"))
item = st.text_input("項目")
amount = st.number_input("金額", value=0, step=1)  # 金額を整数として入力

この部分では、アプリのタイトルと収支データの入力フォームを表示しています。日付、項目、金額をユーザーに入力させます。金額は整数として入力できるようになっています。

データの記録と表示

# データをデータフレームに追加
if st.button("記録する"):
    st.session_state.data = st.session_state.data.append({"日付": date, "項目": item, "金額": int(amount)}, ignore_index=True)

# 収支データの表示
st.header("収支データ")
st.write(st.session_state.data)

この部分では、ユーザーが記録ボタンを押すと、入力されたデータがデータフレームに追加されます。また、収支データが表示されます。

統計情報の表示とデータのクリア

# 統計情報の表示
st.header("統計情報")
st.write("合計支出:", st.session_state.data[st.session_state.data["金額"] < 0]["金額"].sum())
st.write("合計収入:", st.session_state.data[st.session_state.data["金額"] > 0]["金額"].sum())

# アプリのクリアボタン
if st.button("データをクリア"):
    st.session_state.data = pd.DataFrame(columns=["日付", "項目", "金額"])
    st.session_state.clear_data = True  # クリアフラグをTrueに設定
    st.success("データがクリアされました。")

この部分では、収支データの合計支出と合計収入を表示し、データをクリアするためのボタンが提供されています。ユーザーがクリアボタンを押すと、clear_dataフラグがTrueに設定され、アプリが再実行されて初期画面が表示されます。

データの保存

# データがクリアされた場合、初期画面を表示
if st.session_state.clear_data:
    st.session_state.clear_data = False
    st.experimental_rerun()  # アプリを再実行して初期画面を表示

# データの保存
st.session_state.data.to_csv("家計簿データ.csv", index=False)

最後の部分では、データがクリアされた場合にアプリを再実行し、データをCSVファイルに保存します。セッション状態の管理を行い、アプリの挙動を調整しています。

これにより、家計簿アプリがデータの記録、表示、統計情報の計算、データのクリア、データの保存などの機能を持つことができます。

GoogleColabのコード

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