近年様々なスマートデバイスが登場しておりますが、その中でもヘルスケアデータを取得できるスマートウォッチの先駆者としてしられるfitbitについてPythonでのローデータの取得・分析の仕方について紹介していきます。
fitbitは、2007年3月に米国において創業したフィットネス関連企業およびそのスマートデバイスの名前です。(正確には会社名はFitbit LLC、商品名はfitbit)2019年にGoogleによる買収が発表され、2021年に取引が完了し、現在はプロダクトのパッケージやサイトにて”by Google”の表記があります。
2015年にAppleから発売されたapple watchや他のデバイスに先駆けて早くから心拍数やカロリー消費、歩数などヘルスケアデータを取得できるスマートウォッチを発売し注目されました。近年もシリーズのアップデートが続けられております。apple watchがスマートウォッチとして決済や音楽再生、チャットアプリ連携など多機能であることに対して、fitbitはヘルスケアデータの取得に特化しています。その分、デバイスのインタフェースがスッキリしていることと、個人的には”付け感”がfitbitのほうが良いと思います。(睡眠時含め長時間つけていられる。apple watchは若干装着負荷を感じます。※個人的感想)ちなみに私はCharge2(2016年発売)、sense2(2022年発売)を所持しております。
fitbitはダッシュボードあるいはアプリ上でも運動や睡眠に関するいくつかの項目を確認することができます。例えば、運動についてはウォーキングやランニングごとの心拍数や歩数、移動距離、消費カロリーの推移を確認することができます。(運動ごとではなく1日を通した推移も確認できます)また睡眠についてはダッシュボードでは睡眠時間と、時間帯ごとの睡眠の深さのみですが、アプリでは睡眠ごとの血中酸素ウェルネス、安定時の心拍数、皮膚温を確認することができます。
このうちfitbit Web APIのページで公開されている取得できるデータのうち代表的なものは下記のとおりです。分単位のローデータとして取得できるもの、およびそれ以外の1日や1週間などの期間中の値として取得可能などがあり、すべての値が1秒単位や分単位で取得できるわけではない点に注意です。(※一部抜粋。2023年8月現在)
Get Activity Intraday by Date | calories(消費カロリー) | distance(移動距離) | elevation(上昇方向の移動距離) | floors(階数) | steps(歩数) | 1分/5分/15分単位で取得可 |
Get Activity Intraday by Date | heart(心拍数) | 1秒/1分/5分/15分単位で取得可 |
Get Sleep Log by Date | sleep(睡眠時スコア、睡眠の深さ、など) | 1日の睡眠 / 睡眠における睡眠の深さごとで取得可 |
Get SpO2 Summary by Date | spo2(睡眠中の血中酸素濃度) | 1日の睡眠ごとで取得可 |
まずはアカウント作成とアプリ登録を行い、Client IDとClient Secretを取得します。もしfitbitアカウントをお持ちでない場合はfitbitページにアクセスし、fitbitアカウントを取得します。アカウント作成が完了したら、developersページにアクセスし必要な項目を入力してアプリの登録をします。アプリの登録が完了したら、Client IDとClient Secretを取得します。
次に、上記情報を元に、アクセストークン、リフレッシュトークンを取得します。アクセストークン取得ページにアクセスし、step1から順にClient IDなど必要な情報を入力して「generate」を押していきます。詰まりやすいポイントがstep2からstep3となります。
“Authorization URL Display this URL in a browser to ask the user to authorize your app.”と表示された文の下のURLをクリックし、必要なデータを選択し許可するとエラーページが表示されます。しかし気にせずそのページのURLをコピーし、”Step 3: Handle the Redirect”の欄にペーストしてください。
これでアクセストークンとリフレッシュトークンがそれぞれ取得できます。(有効期限は8時間ほどとなります)
ではここからはpythonを用いて実際にいくつかのデータを取得してみます。まずはfitbitパッケージをインストールしておきます。
1 |
pip install fitbit |
無事インストールできたら、上記パッケージのimportおよび先程入手した情報を入力していきます。
1 2 3 4 5 6 |
import fitbit client_id = "***" client_secret = "***" access_token = "***" refresh_token = "***" |
あとは任意の項目を日付で指定して取得します。例えば2023/06/18の心拍数データを取得する場合は下記のとおりになります。
1 2 |
data_sec = authd_client.intraday_time_series('activities/heart', '2023-06-18', detail_level='1sec') heart_sec = data_sec["activities-heart-intraday"]["dataset"] |
取得したデータをDataFrameに変換してプロット表示する場合、下記のとおりになります。
1 2 3 4 5 |
import pandas as pd heart_df = pd.DataFrame(heart_sec) heart_df["time"] = "2023-06-14 " + heart_df["time"] heart_df["time"] = pd.to_datetime(heart_df["time"]) heart_df.plot(x="time", y="value") |
※その他、歩数や消費カロリーなどを取得する場合は、上記コードの”activities/heart”の箇所を”activities/calories”などに書き換えればよいです。
activities/heart | 心拍数 |
activities/steps | 歩数 |
activities/calories | 消費カロリー |
また睡眠データを取得する場合は下記のようにします。
1 |
sleep_data = authd_client.sleep(date="2023-06-18") |
ヘルスデータは運動や睡眠の記録を活用して、日々の行動の改善などに活用できるほか、その運動やリフレッシュなどの行為や、健康食品等の効果検証に用いることもできそうです。また、これらの取得されたデータは他のデータと組み合わせて分析することやchatGPTのcode interpriterなどの機能を用いることで従来のヘルスデータなどの活用とは異なる性格診断などのアウトプットをすることが期待できます。そちらはまた別の記事にて取り組みをご紹介させていただきます。
以上、fitbitデータの取得についての記事となります。