スクリプトのお勉強 ダイエット

Python(prophet)で体重予測

投稿日:

最近ダイエットしていて、少しだけ成果が出たので、グラフ表示しようと思ってました。
そのついでにこれからの予測もしてみようということで、過去のデータを集め、グラフ表示してみます。

google Colaboratory とは

グラフ表示にgoogle Colaboratoryを使用しました。グラフ表示する実行環境を用意するより簡単だからです。

結果も残せますし、悪くない使い勝手です。

Prophet とは

Prophetは、fecebookが作ったライブラリで、時系列予測を行うライブラリです。

今回は、体重を予測できるかどうかやってみました。

体重データ

体重そのものは太り過ぎなので、公表するのはどうかと思い、BMIをデータとして使用します。

データは以下の感じです。

"ds","y"
"2006-06-19",24.2
"2007-06-21",24.4

ヘッダが、”ds”と”y”になっているのはProphet用です。

データの登録

上記のようにgoogle colabを起動したとして、体重データは、横の赤丸がついている、フォルダーのようなアイコンを選択し、アップロードは「+」が付いたアイコンを選択します。

/content/ds_bmi.csvに置いておきます。

ちなみに、この方法でデータを置いておくと、数時間でデータが無くなりますのでご注意ください。

体重時系列予測/グラフ表示プログラム

プログラムは、以下の感じにしてみました。

import pandas as pd
from fbprophet import Prophet
import matplotlib.pyplot as plt
!pip install japanize-matplotlib
import japanize_matplotlib #日本語化matplotlib
import seaborn as sns
sns.set(font="IPAexGothic")

weight_data = pd.read_csv("/content/ds_bmi.csv", index_col='ds', parse_dates=True)

fig, ax = plt.subplots()
# BMIグラフ
ax.plot(weight_data.index, weight_data["y"]);
ax.set_xlabel("日時");
ax.set_ylabel("BMI");

weight_data = pd.read_csv("/content/ds_bmi.csv")
# 飽和予測(増加)
m = Prophet(growth='logistic')
# BMI範囲 25 -35
weight_data['cap'] = 35
weight_data['floor'] = 25
m.fit(weight_data)
future = m.make_future_dataframe(periods=1000)
future['cap'] = 35
future['floor'] = 25
forecast = m.predict(future)
fig1 = m.plot(forecast)
fig2 = m.plot_components(forecast)

いろいろパラメータを変更してみた結果、以下にしてみました。

  • ロジスティック回帰(実はよく分かってない)
  • 3年周期(periods=1000)
  • cap/floorで最大と最小を定義した。
    • BMI的に、25 – 35 ととりあえず仮置

グラフについて

BMIグラフ

まず、BMIグラフです。以下のようになりました。

予測グラフ

予測グラフ(上記:fig1)は以下になりました。はっきり言って意味がありません。
どんなにパラメータを変えてもよく分かりませんでした。まぁ当然か。。季節性もないし、データが偏ってる。。

予測の構成要素グラフ

上記予測を行った際の補助資料(上記:fig2)をグラフ表示しました。こっちはなんとなく面白い結果が出ました。

要するに以下を予測している感じですか。

  • 夏は体重が減りやすい
  • 3年後には元に戻る

まぁそうなんだろうなと思います。

終わりに

あまり予測できませんでした。まぁしょうがありませんが。
3年後に戻らないように気をつけないと。。

-スクリプトのお勉強, ダイエット

執筆者:

関連記事

整形/文法チェック ツール インストールまとめ

1.はじめに 最近、仕事で複数スクリプトを組み合わせてコーディングすることが多くなりました。 それだと、各スクリプトの癖を忘れたり、そもそもどう書くのか忘れたりと、不良を作りこむ可能性が多くなります。 …

GLP-1 メディカルダイエット 114日目

メディカルダイエットして114日目の記録をしておこうと思います。 17回目。 今回はおなか臍右上に打ちました。 新型コロナワクチン(モデルナ)打ってきた 先週、新型コロナワクチンを打ってきました。一回 …

Python3/ある日付から日付までの月/日/時間ごとの時刻を算出する

小ネタです。 要するに、時刻A と 時刻B を指定したときの、各時間間隔での時刻取得したかったです。 当初はdateutilを使う方法でなく、自前で実装しようと思ったのですが、面倒なことに気づきました …

svelteをチュートリアルしてみる

年末の休みは、svelteのチュートリアルをしてみました。なんとなくやはりそう?なので。 svelteとは Webアプリのフロントエンド(UI)用フレームワークです。要するにReactみたいなもんです …

GLP-1 メディカルダイエット 8日目

メディカルダイエットして8日目の記録をしておこうと思います。 二回目の注射。。やっぱり痛い!! 朝起きて、二回目の注射です。まだ、あまり慣れてませんが失敗することはなく終わりました。でもやっぱり痛い。 …

google オプトアウト Click here to opt-out.