
ゆうき( @BASEBALLY15 )です^^
最近,太ってきて困っているんですよね・・・
そうなんですか!?
そんな方のために,とにかく『適正体重』に近づけるためのアプリをPythonで作りましたよ^^
紹介してください・・・
分かりました^^

何のために『身長・体重記録アプリ』を作ったの?

私が,このアプリを作った理由は2つあります.
それは,
- 自分自身が,かなり細身で悩んでいたから!
- 現状と適正体重の差をグラフで確認したかったから!
です.
今回作ったアプリが,よくスマホなどで見るアプリを違うのは,
とにかく『適正体重に近づける』
ために作られていることだと思います^^
『適正体重』って何?
適正体重の前に,『BMI』は聞いたことがあるのではないでしょうか?
BMIという言葉を聞いたことがある方は,
BMIが高い=肥満
という意識があると思います.
実際に,日本肥満学会で以下の表のように,
BMIについてちゃんと定義づけが成されています.
BMI値 | 判定 |
---|---|
18.5未満 | 低体重(痩せ型) |
18.5〜25未満 | 普通体重 |
25〜30未満 | 肥満(1度) |
30〜35未満 | 肥満(2度) |
35〜40未満 | 肥満(3度) |
40以上 | 肥満(4度) |
ちなみに,BMI値の計算方法は以下の式の通りです.
BMI = 体重kg ÷ (身長m)2
この式の結果が25以上になると,肥満ということになります.
そして,BMIとともに使われるのが,今回のアプリで注目している『適正体重』です.
これは,一般的にBMIが22を適正体重として,25以上を肥満,18.5未満を低体重と分類分けを行っています.
ちなみに,適正体重の式は以下の通りです.
適正体重 = (身長m)2 ×22
今回は,自分の体重がこれに近づくためのアプリの作り方についてご紹介します⤵
Pythonで身長・体重記録アプリを作ってみた!
ライブラリ
#グラフを表示させるために用意
import matplotlib.pyplot as plt
#csvファイルを書き込んだり読み込んだりするために用意
import pandas as pd
#データフレームを作るために用意
from pandas import DataFrame
#日付を表示させるために用意
import datetime
次に,全体のコードを紹介します.
コード
最終的には,このような仕様になります.
身長と体重を書き込むと,自動でBMIと適正体重が計算されて,
自分の体重と適正体重との差をグラフで表示してくれます.
また,コード1行1行に説明を載せています.

#身長や体重,BMIを計算するための関数
def height_weight_bmi():
#繰り返し実行する
while True:
#----------------------------------------------------------------
#有効数字を指定する(小数第1位まで表示)
pd.options.display.float_format = '{:.1f}'.format
#データフレームの幅を合わせる
pd.set_option('display.unicode.east_asian_width', True)
#----------------------------------------------------------------
#今日の日付を用意(strftimeで何まで表示させるかを決める)
today = datetime.datetime.today().strftime("%Y/%m/%d/%H/%M")
#----------------------------------------------------------------
#身長を入力(標準入力)
height_in = int(input("あなたの身長は?>>"))
#体重を入力(標準入力)
weight_in = int(input("あなたの体重は?>>"))
#----------------------------------------------------------------
#身長の空のリストを用意
height_in_list = []
#空のリストに,入力した身長の値を格納
height_in_list.append(height_in)
#----------------------------------------------------------------
#体重の空のリストを用意
weight_in_list = []
#空のリストに,入力した体重の値を格納
weight_in_list.append(weight_in)
#----------------------------------------------------------------
#BMIの空のリストを用意
bmi_list = []
#BMIを求める
bmi = weight_in / ((height_in)/100)**2
#空のリストに,BMI値を格納
bmi_list.append(bmi)
#----------------------------------------------------------------
#適正体重の空のリストを用意
proper_weight_list = []
#適正体重を求める
proper_weight = ((height_in/100)**2)*22
#空のリストに適正体重の値を格納
proper_weight_list.append(proper_weight)
#----------------------------------------------------------------
print("------------------------------------------")
print("------------------------------------------")
#printで表示
print("身長=", height_in, "cm")
print("体重=", weight_in, "kg")
print("BMI= {}".format(int(bmi)))
#----------------------------------------------------------------
#肥満かどうかを表示させるための空のリストを用意
himan_list = []
#BMIによって,肥満かどうかを表示させる
if bmi < 18.5:
himan_list.append("やせ型")
print("判定結果= 『やせ型』")
elif bmi < 25:
himan_list.append("普通体重")
print("判定結果= 『普通体重』")
elif bmi < 30:
himan_list.append("肥満(1度)")
print("判定結果= 『肥満(1度)』")
elif bmi < 35:
himan_list.append("肥満(2度)")
print("判定結果= 『肥満(2度)』")
elif bmi < 40:
himan_list.append("肥満(3度)")
print("判定結果= 『肥満(3度)』")
elif bmi >= 40:
himan_list.append("肥満(4度)")
print("判定結果= 『肥満(4度)』")
#----------------------------------------------------------------
#適正体重との差のリストを用意
difference_weight_list = []
#実際の体重と適正体重の差を求める
difference_weight = weight_in - proper_weight
#空のリストに差の値を格納
difference_weight_list.append(difference_weight)
#----------------------------------------------------------------
#適正体重を表示
print("適正体重= {} kg".format(int(proper_weight)))
#1は切り捨て分の誤差を考慮
if difference_weight > 1:
#適正体重と現在の体重との差を表示
print("<<目標>>適正体重まで約 {} kg減量".format(int(difference_weight)))
elif -1 <= difference_weight <= 1 :
print("その調子!!")
elif difference_weight < -1:
print("<<目標>>適正体重まで約 {} kg増量".format(int(-(difference_weight))))
print("------------------------------------------")
print("------------------------------------------")
#----------------------------------------------------------------
#データフレームの作成(辞書型で作り,最終的にデータフレームにする)
df1 = DataFrame({"日付(年/月/日/時/分)":today,
"身長(cm)":height_in_list,
"体重(kg)":weight_in_list,
"BMI":bmi_list,
"判定結果":himan_list,
"適正体重(kg)":proper_weight_list,
"適正体重との差(kg)":difference_weight_list})
#----------------------------------------------------------------
#ディレクトリの場所
dir_place = "ディレクトリが存在する場所/"
#csvファイル名
csv_name = "height_weight.csv"
#csvの数値の部分のみをcsvに保存(encoding="utf_8_sig"で文字化け対策.mode=aで追記していく.header=Falseでカラムを付けずに書き込む.)
df1.to_csv(dir_place + csv_name, encoding="utf_8_sig", mode="a", header=False)
#----------------------------------------------------------------
#上で書き込んだcsvファイルを読み込んで,表示する
read_df = pd.read_csv(dir_place + csv_name, encoding="utf_8_sig")
#読み込んだcsvファイルをデータフレーム化する
read_df = DataFrame(read_df)
#データフレームを表示する
print(read_df[["日付(年/月/日/時/分)", "身長(cm)", "体重(kg)", "BMI", "判定結果", "適正体重(kg)","適正体重との差(kg)"]])
#----------------------------------------------------------------
#グラフで表示
graph = plt.scatter(read_df["日付(年/月/日/時/分)"], read_df["適正体重との差(kg)"], label="difference(kg)", color="r")
#タイトル
plt.title("weight-difference")
#x軸
plt.xlabel("Date")
#y軸
plt.ylabel("difference(kg)")
#補助線を引く
xmin, xmax = 0, len(read_df)
plt.hlines(0, xmin, xmax, "black", linestyle="dashed")
#誤差範囲の補助線を引く
plt.hlines(1, xmin, xmax, "blue", linestyle="dashed")
plt.hlines(-1, xmin, xmax, "blue", linestyle="dashed")
#グラフを保存する
plt.savefig("weight_defference.png")
#グラフを描写
plt.show(graph)
#----------------------------------------------------------------
#メインとなる部分
if __name__ == "__main__":
#関数height_weight_bmiを呼びだす
height_weight_bmi()
これで,身長と体重を記録するだけで,BMIや適正体重などを表示してくれます.
また,このようにcsvファイルにどんどん記録されていくので,
継続して適正体重に近づく努力が出来るのではないかと思います.

終わりに
今回は,細身の方や太り肉の方のために,『とにかく適正体重に近づける』ためのアプリを作りました.
また,コードを書き替えると,自分の目標体重に近づくためのグラフを表示させることも可能です.
ぜひ,試してみてください^^
それでは・・・