Fitbitは、ウェアラブルデバイスやアプリを通じて健康管理をサポートするプラットフォームです。本記事では、Fitbit APIを使用して心拍数データを取得し、時系列グラフで可視化する方法を初心者向けに解説します。
こちらの記事もおすすめ
PythonとGoogle Colabを使ってFitbitの睡眠データを可視化しよう
Fitbitは人気のフィットネストラッカーで、毎日の活動量や睡眠の質を記録してくれます。このデータを分析・可視化することで、自分の睡眠パターンを把握し、生活習慣の改善に役立てることができます。この記事では、PythonとGoogle Col...
Fitbit APIの認可フロー
Fitbit APIを使用してユーザーデータにアクセスするには、OAuth 2.0認可フレームワークに従って安全に認可を行う必要があります。この記事では、Fitbitが推奨するPKCEを使用した認可コード付与フローについて詳しく解説します。...
前提条件
- Fitbitのアカウントを持っていること
- Fitbit APIのアクセストークンを取得済みであること
- Pythonの基本的な知識があること
手順
1. 必要なライブラリをインストールする
以下のコマンドを実行して、必要なライブラリをインストールします。
pip install requests seaborn matplotlib pandas
2. 設定ファイルを準備する
token.json
という名前のファイルを作成し、以下の内容を記述します。XXXXXXXXXXXXXXXXXXXXXXXXX
、AAAAAAAAAAAAAAAAAAAAAAAAAAAAA
、YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY
は、実際のアクセストークン、リフレッシュトークン、ユーザーIDに置き換えてください。
{
"access_token": "XXXXXXXXXXXXXXXXXXXXXXXXX",
"expires_in": 28800,
"refresh_token": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
"scope": "respiratory_rate electrocardiogram location cardio_fitness social activity settings sleep temperature oxygen_saturation nutrition heartrate profile weight",
"token_type": "Bearer",
"user_id": "YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY"
}
3. 心拍数データを取得するスクリプトを作成する
以下のPythonスクリプトを作成します。このスクリプトは、Fitbit APIを使用して心拍数データを取得し、取得したデータを表示します。
import requests
import json
# 設定ファイルのパス
CONFIG_FILE = "token.json"
def load_config():
"""設定ファイルを読み込む"""
try:
with open(CONFIG_FILE, "r", encoding="utf-8") as f:
return json.load(f)
except FileNotFoundError:
print(f"設定ファイル {CONFIG_FILE} が見つかりません。")
exit(1)
def save_config(config):
"""設定ファイルを保存する"""
with open(CONFIG_FILE, "w", encoding="utf-8") as f:
json.dump(config, f, indent=2)
def create_auth_header(access_token):
"""認証用のヘッダを作成する"""
return {"Authorization": "Bearer " + access_token}
def refresh_access_token(config):
"""アクセストークンを更新する"""
url = "https://api.fitbit.com/oauth2/token"
params = {
"grant_type": "refresh_token",
"refresh_token": config["refresh_token"],
"client_id": config["client_id"],
}
response = requests.post(url, data=params)
data = response.json()
if "errors" in data:
print(f"アクセストークンの更新に失敗しました: {data['errors'][0]['message']}")
return False
config["access_token"] = data["access_token"]
config["refresh_token"] = data["refresh_token"]
save_config(config)
return True
def is_token_expired(response_data):
"""アクセストークンの有効期限が切れているかチェックする"""
if "errors" in response_data:
for error in response_data["errors"]:
if error.get("errorType") == "expired_token":
print("アクセストークンの有効期限が切れています。")
return True
return False
def make_api_request(url, headers):
"""APIリクエストを実行する"""
response = requests.get(url, headers=headers)
data = response.json()
if is_token_expired(data):
config = load_config()
if refresh_access_token(config):
headers = create_auth_header(config["access_token"])
response = requests.get(url, headers=headers)
else:
print("アクセストークンの更新に失敗したため、リクエストを中止します。")
exit(1)
return response
def get_heart_rate(date="today", period="1d"):
"""心拍数データを取得する"""
url = f"https://api.fitbit.com/1/user/-/activities/heart/date/{date}/{period}.json"
config = load_config()
headers = create_auth_header(config["access_token"])
return make_api_request(url, headers)
if __name__ == "__main__":
response = get_heart_rate(date="2024-03-09")
data = response.json()
print(data["activities-heart-intraday"]["dataset"][0])
4. 心拍数データを可視化するスクリプトを作成する
以下のPythonスクリプトを作成します。このスクリプトは、取得した心拍数データを時系列グラフで可視化します。
import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
# データをDataFrameに変換
heart_data = data["activities-heart-intraday"]["dataset"]
df = pd.DataFrame(heart_data)
# 'time'列をdatetime型に変換
df['time'] = pd.to_datetime(df['time'])
# グラフのスタイルを設定
sns.set_style("whitegrid")
# パステルカラーのカラーパレットを作成
pastel_colors = sns.color_palette("pastel")
# グラフを描画
plt.figure(figsize=(12, 6))
sns.lineplot(x='time', y='value', data=df, color=pastel_colors[0])
# グラフのタイトルと軸ラベルを設定
plt.title("Heart Rate Time Series", color='black')
plt.xlabel("Time", color='black')
plt.ylabel("Heart Rate", color='black')
# x軸の目盛りを設定
plt.xticks(rotation=45, color='black')
plt.yticks(color='black')
# グラフの背景色を設定
fig = plt.gcf()
fig.set_facecolor('#F0F0F0')
# グラフを表示
plt.tight_layout()
plt.show()
5. スクリプトを実行する
最初に作成したスクリプトを実行して、心拍数データを取得します。次に、2つ目のスクリプトを実行して、取得したデータを時系列グラフで可視化します。
まとめ
本記事では、Fitbit APIを使用して心拍数データを取得し、時系列グラフで可視化する方法を解説しました。APIの認証、データの取得、データの可視化の流れを理解することで、自分の健康管理に役立てることができます。今後は、他の健康データを取得・可視化したり、データ分析を行ったりすることで、さらに健康管理の幅を広げていくことができるでしょう。
ノートブック
Google Colaboratory
参考サイト
Fitbit Development: Web API
You'll fit in here. Using JavaScript, CSS, and SVG, developers now have a fast, easy way to build apps and clock faces for Fitbit OS.
リポジトリ
GitHub - Sunwood-ai-labs/fitbit-python-analyzer
Contribute to Sunwood-ai-labs/fitbit-python-analyzer development by creating an account on GitHub.
コメント