FitbitデータをPythonで解析し、指定時刻の過去12時間分の歩数を計算する方法


活動データの分析では、特定の時刻から遡って過去12時間分のデータを抽出し、歩数を集計することがよくあります。本記事では、Fitbitデータのエクスポート方法から、Pythonを用いた解析手順を詳しく解説します。

---

### Fitbitデータのエクスポート手順

1. Fitbitのアカウントにログインします:
   [Fitbitエクスポートページ](https://accounts.fitbit.com/login?targetUrl=https%3A%2F%2Fwww.fitbit.com%2Flogin%2Ftransfer%3Fnext%3Dhttps%25253A%25252F%25252Fwww.fitbit.com%25252Fsettings%25252Fdata%25252Flegacy-export&lcl=ja_JP)

2. データエクスポート画面で対象の期間を選択します。
   - 例: 2024年12月のデータを取得したい場合、「2024-12-01」から「2024-12-31」の範囲を指定。

3. ダウンロードされたデータは以下のようなディレクトリに保存されます。
   ```
   /Users/ユーザー名/Downloads/Takeout/Fitbit/Physical Activity_GoogleData/
   ```

4. ファイル名は次のようになります：
   ```
   steps_YYYY-MM-DD.csv
   ```
   - 例: `steps_2024-12-01.csv`

---

### Pythonで指定時刻の過去12時間分の歩数を計算する

Fitbitデータから、指定した日時を基準に過去12時間分の歩数を計算する方法を以下に示します。

#### 必要なライブラリ

以下のライブラリを使用します。必要に応じてインストールしてください。

```bash
pip install pandas
```

---

#### Pythonコード例

```python
import pandas as pd
from datetime import datetime, timedelta

# CSVファイルのパス（エクスポートしたFitbitデータのパスを指定）
file_path = '/Users/ユーザー名/Downloads/Takeout/Fitbit/Physical Activity_GoogleData/steps_2024-12-01.csv'

# CSVファイルを読み込み
df = pd.read_csv(file_path)

# タイムスタンプ（UTC）をdatetime形式に変換
df['timestamp'] = pd.to_datetime(df['timestamp'], utc=True)

# 日本時間（UTC+9）に変換し、タイムゾーンを削除
df['jtc'] = df['timestamp'].dt.tz_convert('Asia/Tokyo').dt.tz_localize(None)

# 指定した日時（例: 2024-12-13 12:18:00 JST）
specified_time = datetime(2024, 12, 13, 12, 18, 0)

# 指定した日時の12時間前（日本時間）
start_time = specified_time - timedelta(hours=12)

# 過去12時間のデータを抽出
filtered_df = df[(df['jtc'] >= start_time) & (df['jtc'] <= specified_time)]

# 過去12時間分の歩数を合計
total_steps = filtered_df['steps'].sum()

# 結果を出力
print(f"指定した日時（日本時間）: {specified_time}")
print(f"指定した日時の12時間前（日本時間）: {start_time}")
print(f"過去12時間分の歩数の合計: {total_steps}")
```

---

### コードの説明

1. **UTCタイムスタンプの読み込み**:
   ```python
   df['timestamp'] = pd.to_datetime(df['timestamp'], utc=True)
   ```
   Fitbitの`timestamp`列はUTC形式で記録されているため、UTCタイムゾーン付きの日時型に変換します。

2. **日本時間への変換**:
   ```python
   df['jtc'] = df['timestamp'].dt.tz_convert('Asia/Tokyo').dt.tz_localize(None)
   ```
   UTCタイムスタンプを日本時間（JST: UTC+9）に変換し、タイムゾーン情報を削除します。

3. **過去12時間の範囲を計算**:
   ```python
   specified_time = datetime(2024, 12, 13, 12, 18, 0)
   start_time = specified_time - timedelta(hours=12)
   ```
   指定時刻を基準に、その12時間前の範囲を計算します。

4. **データの抽出と集計**:
   ```python
   filtered_df = df[(df['jtc'] >= start_time) & (df['jtc'] <= specified_time)]
   total_steps = filtered_df['steps'].sum()
   ```
   指定範囲内のデータを抽出し、`steps`列の合計を計算します。

---

### 実行結果

例えば、指定時刻を`2024-12-13 12:18:00 JST`とした場合、過去12時間（`2024-12-13 00:18:00 JST`から`2024-12-13 12:18:00 JST`まで）の歩数データを集計します。

出力例:
```
指定した日時（日本時間）: 2024-12-13 12:18:00
指定した日時の12時間前（日本時間）: 2024-12-13 00:18:00
過去12時間分の歩数の合計: 150
```

---

### 注意点

1. **ファイルパスの指定**:
   Fitbitのデータは以下のようなディレクトリに保存されるため、正しいパスを指定してください。
   ```
   /Users/ユーザー名/Downloads/Takeout/Fitbit/Physical Activity_GoogleData/steps_YYYY-MM-DD.csv
   ```

2. **複数日分のデータ**:
   複数日分のデータを処理したい場合は、すべてのCSVファイルを結合して解析する必要があります。

3. **範囲の調整**:
   計算対象の範囲を変更したい場合は、`timedelta(hours=12)`を変更してください。

---

### まとめ

この方法を使用すると、指定時刻を基準に過去12時間分の歩数データを効率的に集計できます。Fitbitデータの分析に役立ててください！