[fitbit] 4.Fitbit APIで睡眠時の心拍数データを取得してmatplotlibで表示

fitbit

はじめに

fitbitとは、心拍数、歩数や睡眠をトラッキングするために腕に着用するタイプのスマートウォッチです。ここでは、Fitbit APIを使って睡眠時の心拍数データを取得してmatplotlibで表示する方法を解説します。

手順

APIの登録など

その1を参照してください。

[fitbit] 1. PythonでFitbit APIを使ってデータ取得 その1 アプリの登録とtokenの取得
fitbitとは、心拍数、歩数や睡眠をトラッキングするために腕に着用するタイプのスマートウォッチです。日々の健康状態を把握するのにとても役立っています。ここでは、Fitbit APIを使ってデータを取得するために、アプリの登録からtokenの取得まで解説します。

fitbit-pythonのインストールなど

その2を参照してください。

[fitbit] 2. PythonでFitbit APIを使ってデータ取得 その2 fitbit-pythonによる睡眠データの取得とmatplotlibによる表示
fitbitとは、心拍数、歩数や睡眠をトラッキングするために腕に着用するタイプのスマートウォッチです。日々の健康状態を把握するのにとても役立っています。ここでは、アプリの登録からtokenの取得までを解説したその1の続きとして、Fitbit APIを使って睡眠データを取得してmatplotlibで表示するところまで解説します。

モジュールのインポート

バージョン

APIの認証

CLIENT_ID, tokenなどを定義

その1で取得したCLIENT_IDとCLIENT_SECRETとtoken.txtをここで使います。token.txtは実行ファイルと同じ場所に置いておきます。

認証

fitbit.Fitbit()により、認証を行います。updateToken関数はtokenの更新用の関数でrefresh_cbupdateTokenとすることでtokenが期限切れの際に随時更新してくれるようになります。

睡眠データの取得

DATEを設定し、client.sleep(DATE)とすることで睡眠データが得られます。

睡眠の開始・終了時間の取得

data_sleep["sleep"][0]["startTime"]で睡眠開始時間が、data_sleep["sleep"][0]["endTime"]で睡眠終了時間が取得できます。np.datetime64でdatetime型に変換しときます。

安静時心拍数の取得

安静時心拍数のデータは、client.time_series('activities/heart')で取得できます。

睡眠終了日の心拍数の取得

intraday_time_seriesでdetail_level=’1min’とすることで1分間隔でデータを取得できます。
pd.DataFrame.from_dictでデータフレームにします。

日付つき時刻データの作成

日付つき時刻データと心拍数のデータフレームの作成

pd.concatでデータフレームを結合して日付つき時刻データと心拍数のデータフレームを作成します。

睡眠開始日の心拍数データの取得

睡眠終了日と同様の方法で取得します。

開始日と終了日のデータフレームの結合

pd.concatで結合して、df.set_indexで時刻データをインデックスにします。

開始時間と終了時間でスライスしてデータ抽出

indexがDatetimeIndexなので、スライスによるデータ抽出ができます。

睡眠時の心拍数変化の表示

上で得られた結果を表示すると以下のようになります。

睡眠時の心拍数変化と安静時心拍数の表示

安静時心拍数以下をfill_betweenで塗りつぶして表示しています。安静時心拍数より心拍数が低いところにある時に安らかな眠りについているらしいです。

コードをダウンロード(.pyファイル)

コードをダウンロード(.ipynbファイル)

参考

Overview — Python-Fitbit 0.3.0 documentation
Datetimes and timedeltas — NumPy v2.2 Manual
What's sleep score in the Fitbit app? - Fitbit Help Center
Check your daily sleep score for better insight into your sleep quality. To review additional insights into your sleep d...
matplotlib.pyplot.fill_between — Matplotlib 3.9.3 documentation

コメント