管理人Kのひとりごと

デジモノレビューやプログラミングや写真など

Fitbit APIを叩いて2019年と2020年の歩数を比べてみた

2020年はコロナで在宅勤務中心となり、歩くことが減りましたね。
常に身に着けているFitbitのデータを使って2019年と2020年の歩数を比べてみました。

確認環境

Python 3.8.5
curl 7.29.0

歩数JSONの取得

# 2020/1/1から2020/12/31までの歩数を日ごとに取得
curl -i -H "Authorization: Bearer <発行したアクセストークン>"  \
 https://api.fitbit.com/1/user/-/activities/steps/date/2020-01-01/2020-12-31.json -o year_2020.json

2019年も同様に取得

JSON→CSVに変換

# 上記のJSONを基にCSVを作成するpython3プログラム
# yyyy-mm-dd形式の日付,月,週番号,歩数 の形式で出力
#!/usr/bin/python3
# -*- coding:utf8 -*-

import os
import codecs
import json
from datetime import datetime

# yyyy-mm-dd形式の文字列日付から週番号を返す
# 新年最初の日曜日の週が1、それより前は0週目
def get_week_no(date_str):
    date = datetime.strptime(date_str, '%Y-%m-%d')
    # 年の週番号(週の最初の日は日曜日) 新年の最初の日曜日より前の日付は第0週
    return date.strftime("%U")

# yyyy-mm-dd形式の文字列日付から月を返す
def get_month(date_str):
    date = datetime.strptime(date_str, '%Y-%m-%d')
    return date.strftime("%m")

def parse_json_csv(in_json_path, out_csv_path):
  with codecs.open(in_json_path) as fr, codecs.open(out_csv_path, 'w', 'utf-8') as fw:
    json_doc = json.load(fr)

    for elem in json_doc['activities-steps']:
      # CSV形式で出力
      fw.write('{},{},{},{}\r\n'.format(elem['dateTime'],get_month(elem['dateTime']) , get_week_no(elem['dateTime']) , elem['value']))

if __name__ == '__main__':
  # 環境変数から各種パラメータを取得
  in_json_path = os.environ['IN_JSON_PATH']
  out_csv_path = os.environ['OUT_CSV_PATH']

  parse_json_csv(in_json_path, out_csv_path)

Excelでグラフ描画

Excelで月単位で平均歩数をグラフ描画しました。
やはり2020年4月はテレワーク開始と緊急事態宣言とでガクっと減りました。解除された5月以降は多少増えたものの、2019年と比較すると各月で2,000歩くらい減ってますね。2020年10月以降はさらに出勤頻度が減ったので歩数が減っていってます。2019年の10-12月以降が増加傾向のは何でだったっけな。
感覚的に減ったのはわかってましたが、このように可視化すると良いですね。あの頃は...なんて振り返ったりもできますし。Fitbitでは睡眠記録も取れているので、今度は睡眠時間編をやってみようかな。
f:id:ksk1130:20210105224127p:plain

参考にしました