【Python, Google Drive】体重管理&解析アプリを作ろう3 ~登録フォーム~

前回記事から、Pythonをベースに、DockerfileとGoogle DriveおよびStreamlitを用いた体重管理及び体重トレンド解析を実装する自分だけのWebアプリを作成しています。

本アプリの体重アプリの特徴は以下です。

  • すべて無料で構築可能
  • HTML/CSSの知識不要
  • ご自身でアプリのカスタマイズが可能
  • 短時間で実装可能
  • 統計学知識不要

以上のように、誰でも取り掛かりやすい内容となっています。それでは早速やっていきましょう。

1. 登録用フォーマット

今回は、前回で作成した体重データを管理するclassオブジェクトを利用してデータ登録フォームの原型を作成します。

ここではinput関数を使用した入力フォーマットを作成しておきます。以下のコードを確認ください。

class Diet:
    """
    前回記事をご参照ください
    """

def main():
    print('Mode Select')
    mode = 'Registration'
    print(f'Weight {mode} \n')

    if mode == 'Registration':
        print('1. Enter Your Weight')
        weight = input('Enter your Weight [kg]:')
        fat = input('Enter your Fat [%]:')

        print('2. Enter Your Meal')
        breakfast = input('Breakfast Meal? (0, 1)')
        lunch = input('Lunch Meal? (0, 1)')
        dinner = input('Dinner Meal? (0, 1)')

        print('3. Enter Your Training')
        running = input('Running? (0, 1)')
        muscle = input('Muscle Training? (0, 1)')
        sports = input('Other Sports? (0, 1)')

        """ Diet class object """
        diet = Diet(weight, fat, breakfast, lunch, dinner, running, muscle, sports)

こちらは、”mode”が”Registration”の場合に、データ登録用のフォーマットに移行するようにしておきます。main()関数を実行すると、以下のような入力を実行することが可能です。

Mode Select
Weight Registration 

1. Enter Your Weight & Fat
Enter your Weight [kg]: 75
Enter your Fat [%]: 15
2. Enter Your Meal
Breakfast Meal? (0, 1) 1
Lunch Meal? (0, 1) 1
Dinner Meal? (0, 1) 1
3. Enter Your Training
Running? (0, 1) 0
Muscle Training? (0, 1) 1
Other Sports? (0, 1) 0

続いて、入力するフォーマットを確認して、データを登録する処理を記載します。こちらは、登録内容が正しい場合に、”Register”変数をTrueにして、データ登録を行います。

try-except文で、初回登録時はローカル環境に”sample.csv”としてデータを保存します。次回以降は保存したデータに新しいデータを追加するようにしています。

最終的にはこのデータはGoogle Driveに保存しますが、この段階ではローカル環境に保存しておきます。

class Diet:
    """
    前回記事をご参照ください
    """

def main():
    """
    中略
    """

    print('4. Registration From')
    print('Registered with this data. OK?')
    print(diet.trend_history[0])
    register = input('Register? (1, 0)')
    if register:
        try:
            df = pd.read_csv('sample.csv')
            df = df.append(diet.trend_history[0], ignore_index=True)
        except:
            df = pd.DataFrame(diet.trend_history[0].values(), index=diet.trend_history[0].keys()).T

        df.to_csv('sample.csv', index=False)

上記を実行すると、以下のように登録データを確認でき、登録するかどうかを選択できるようになりました。”Register”を”True”(ここでは1)にすることで、新しいデータを保存できるようになりました。

4. Registration From
Registered with this data. OK?
{'Date': '2022-1-22', 'Weight [kg]': '75', 'Fat [%]': '15', 'Breakfast': '1', 'Lunch': '1', 'Dinner': '1', 'Running': '0', 'Muscle': '1', 'Sports': '0'}
Register (1, 0) 1

登録されると以下のようなデータフォーマットが保存されているはずです。(10日間分のデータを入力した例です)

これでデータ登録フォーマットの原型が完成です。お疲れさまでした。

2. 本記事の全体コードまとめ

今回はデータ登録フォーマットの原型作成でしたが、今後にStreamlitを使用して、入力フォーマットをWebアプリ用に変更していきます。

次回は入力したデータをもとに簡単なデータ解析処理を実装していきます。

class Diet:
    """
    前回記事をご参照ください
    """

def main():
    print('Mode Select')
    mode = 'Registration'
    print(f'Weight {mode} \n')

    if mode == 'Registration':
        print('1. Enter Your Weight')
        weight = input('Enter your Weight [kg]:')
        fat = input('Enter your Fat [%]:')

        print('2. Enter Your Meal')
        breakfast = input('Breakfast Meal? (0, 1)')
        lunch = input('Lunch Meal? (0, 1)')
        dinner = input('Dinner Meal? (0, 1)')

        print('3. Enter Your Training')
        running = input('Running? (0, 1)')
        muscle = input('Muscle Training? (0, 1)')
        sports = input('Other Sports? (0, 1)')
        diet = Diet(weight, fat, breakfast, lunch, dinner, running, muscle, sports)

        print('4. Registration From')
        print('Registered with this data. OK?')
        print(diet.trend_history[0])
        register = input('Register (1, 0)')
        if register:
            try:
                df = pd.read_csv('sample.csv')
                df = df.append(diet.trend_history[0], ignore_index=True)
            except:
                df = pd.DataFrame(diet.trend_history[0].values(), index=diet.trend_history[0].keys()).T

            df.to_csv('sample.csv', index=False)

3. 関連記事

随時更新中です。公開次第、リンクを貼り付けていきます。

Baran

それでは、よいPythonライフを!

Baran

以下の記事も書いています。よかったらご覧ください。

Baran

Twitterもやってまーす。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

ABOUT US

Baran-gizagiza
経歴:浪人→理系大学院卒業→大手製造業に就職(技術職)→アメリカ赴任中 仕事は、研究・設計など上流工程の仕事に携わっています。企業勤務を継続しながら、新しいことにチャレンジしたいと思い、ブログを下記はじめました。 このブログでは、趣味である 筋トレ(健康、ダイエット) AIとデータ(高校数学、プログラミング) 読書(主に自己啓発系) を中心に、人生経験やおすすめ情報の発信しています。