こんにちは、GMOアドマーケティングのS.Rです。
Fitbitは人気の活動量計の一つです。
昨年、FitbitのCharge2を購入し、日々のアクティビティデータ(運動、食事、体重、睡眠など)を記録していました。データ量が結構貯まっていたので、機械学習のエンジニアとして何かに利用してみようと思います。
Fitbitのデータと無料のデータ分析クラウドサービスColabと連携する方法を調べてみましたので、今回は、その方法について皆さんへ紹介させていただきます。
Fitbit側の権限設定
Fitbitの開発者センターで新しいAppを申請する
① Manage->Register An Appを選択してください。
② Fitbitのアカウントでログインしてください。
③ Appの情報を設定してください。下記は今回の設定例です。
項目名 | 内容 |
---|---|
Application Name | http://test.com |
Description | http://test.com |
Application Website | http://test.com |
Organization | http://test.com |
Organization Website | http://test.com |
OAuth 2.0 Application Type | Personal |
Callback URL | http://127.0.0.1:8080/ と入力 |
Default Access Type | Read-Only |
④ AppのClient IDとClient Secretを取得します。
Manage->Register An App->MANAGE MY APP-> hr_monitor でAppの詳細情報を確認します。
⑤ Access TokenとRefresh Tokenを生成します。
-
python環境がついているパソコンで下記のgithubをcloneしましょう。
1 |
git clone https://github.com/orcasgit/python-fitbit.git |
- cherrypyをインストールします。
1 |
!pip install cherrypy |
-
④で取っていたClient IDとClient Secretを入れて下記のコマンドを実行してください。
1 |
python-fitbit/gather_keys_oauth2.py {Client ID} {Client Secret} |
- 起動されたブラウザで権限を選びましょう。
- 許可を押すとAccess TokenとRefresh Tokenを生成できます。
これでFitbit側の権限設定が完了しました。Access TokenとRefresh Tokenのタイムアウト時間は8時間になるので注意してください。
ColabでFitbitのサーバーからアクティビティデータを読み込む
① まずはColabのinstanceを作ってください。Colabのリンクは下記です。
https://colab.research.google.com/notebooks/intro.ipynb
② Fitbitのpython版のSDKをインストールしましょう。
1 |
!pip install fitbit |
③ 下記のリブをimportします。
1 2 3 4 5 6 |
import fitbit import pandas as pd import seaborn as sns import matplotlib.pyplot as plt import numpy as np import matplotlib.pyplot as plt |
④ Fitbitの認証情報でFitbitのサーバーへアクセス権限を取得します。
1 2 3 4 5 6 7 |
#認証情報 CLIENT_ID = "xxxxx" CLIENT_SECRET = "xxxxx" ACCESS_TOKEN = "xxxxxx" REFRESH_TOKEN = "xxxxxxxxxxxxxx" authd_client = fitbit.Fitbit(CLIENT_ID, CLIENT_SECRET ,access_token=ACCESS_TOKEN, refresh_token=REFRESH_TOKEN) |
心拍数のデータの例
① 指定された日付の心拍データを読みこみます。
1 2 3 4 5 6 |
# 日付 DATE = "2020-10-17" # 心拍数を取得(1秒単位) data_sec = authd_client.intraday_time_series('activities/heart', DATE, detail_level='1sec') #'1sec', '1min', or '15min' heart_sec = data_sec["activities-heart-intraday"]["dataset"] heart_rat = pd.DataFrame.from_dict(heart_sec) |
② 心拍データ秒毎の分布図を表示します。
1 |
heart_rat.plot(y="value", figsize=(18,6)) |
睡眠の品質データの例
① 指定された日付の睡眠の品質データを読み込みます。
1 2 3 4 5 |
DATE = "2019-09-11" sleep_data = authd_client.sleep(date=DATE) sleep_df = pd.DataFrame.from_dict(sleep_data["sleep"][0]["minuteData"]) sleep_df["value"] = sleep_df["value"].astype('float') sleep_df["datetime"] = pd.to_datetime([ t for t in sleep_df.dateTime]) |
② 読み込んだデータに日付が付いてないので追加しましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
siz = sleep_df.datetime.shape[0] date = datetime.strptime(DATE,"%Y-%m-%d") if siz > 0: dates = [date.strftime("%Y-%m-%d ")] tmp = sleep_df.datetime[1:].reset_index() - sleep_df.datetime[:siz - 1].reset_index() reset_flags = tmp["datetime"] > pd.Timedelta(0,'h') reset_flags = reset_flags.tolist() reset_flags.reverse() for f in reset_flags: if f: dates = [date.strftime("%Y-%m-%d ")] + dates else: date -= pd.Timedelta(1,'d') dates = [date.strftime("%Y-%m-%d ")] + dates sleep_df["date"] = dates sleep_df["date"] = sleep_df["date"] + sleep_df["dateTime"] sleep_df["date"] = pd.to_datetime([ t for t in sleep_df.date]) sleep_df["date"] = sleep_df["date"].dt.strftime('%Y-%m-%d %H') |
③ 時間毎の睡眠の品質点数を表示しましょう。
1 2 3 4 |
sleep_df = sleep_df.groupby([ sleep_df.date]).value.mean().to_frame() fig, ax = plt.subplots(figsize=(15, 15)) ax.bar(sleep_df.index, sleep_df["value"]) ax.set_xticklabels(sleep_df.index, fontsize=12, rotation = 45) |
まとめ
今回はFitbitのアクティビティデータをColabで可視化する方法を皆さんへ紹介してみました。いかがでしたでしょうか。
Fitbitのデバイスで様々なアクティビティデータが取れます。
今回のブログが皆さんのFitbitのアクティビティデータの活用にお役に立てば幸いです。