測定結果の概観
FitbitCharge4とPolarUniteを装着し、学内を歩いたり多少走ったりしながら測定結果を比較した。位置情報はGPSを内蔵したCharge4の方が正確だ。心拍数も似たような変化を示していたものの、変化を観察していると、他サイトでも指摘されていたとおり、Fitbitの変化がやや遅れてやってくる印象であった。
測定結果取得方法の比較
Polarのデータ取得は、デバイスをPCに接続しPolarFlowSyncで同期を行い、WebアプリのPolarFlowにログインしてセッションを選択し、エクスポートを選ぶだけだ。非常に簡単だ。出力されるCSVデータの内容も極めて常識的である。対するFitbitのデータ取得は、自由度が高い反面、その手順は煩雑だ。Pythonを使って取得する方法が一般的なようだが、実行環境を整えたり、必要に応じてスクリプトを用意したりする必要がある。下に1秒単位でHRを取得するコードを掲載した。
import sys
import fitbit
import gather_keys_oauth2 as Oauth2
from datetime import datetime, date, timedelta
print('Fitbit02')
USER_ID = "ほげほげ"
CLIENT_SECRET = "ほげほげ"
DATE = "2023-03-24" # 取得したい日付
print('Hello fitbit02')
def requestFitbit(DATE):
rval=""
global auth2_client
fitbit_stats = auth2_client.intraday_time_series('activities/heart', DATE, detail_level='1sec')
HRstats = fitbit_stats['activities-heart-intraday']['dataset']
OUTPUT_FILE = "ALL2.csv"
csv_file = open(OUTPUT_FILE, 'a')
csv_file.write(DATE+",")
for num1 in range(24):
for num2 in range(60):
for num3 in range(60):
key='{:02}'.format(num1)+':{:02}'.format(num2)+':{:02}'.format(num3)
hr=""
for var in range(0, len(HRstats)):
#csv_file.write(str(HRstats[var]['time']))
#csv_file.write(",")
if str(HRstats[var]['time']) == key:
hr=str(HRstats[var]['value'])
#print("hit")
break
print(key+"/"+hr)
csv_file.write(key+","+hr)
csv_file.write("\n")
csv_file.write("\n")
csv_file.close()
return rval
##################################################
def writeindex():
OUTPUT_FILE = "ALL.csv"
csv_file = open(OUTPUT_FILE, 'a')
csv_file.write(",")
for num1 in range(24):
for num2 in range(60):
key='{:02}'.format(num1)+':{:02}'.format(num2)+':00'
csv_file.write(key)
csv_file.write(",")
csv_file.write("\n")
csv_file.close()
##################################################
"""Get tokens"""
server = Oauth2.OAuth2Server(USER_ID, CLIENT_SECRET)
server.browser_authorize()
ACCESS_TOKEN = str(server.fitbit.client.session.token['access_token'])
REFRESH_TOKEN = str(server.fitbit.client.session.token['refresh_token'])
#print(ACCESS_TOKEN)
#print(REFRESH_TOKEN)
"""Authorization"""
auth2_client = fitbit.Fitbit(USER_ID, CLIENT_SECRET, oauth2=True, access_token=ACCESS_TOKEN, refresh_token=REFRESH_TOKEN)
"""request"""
#writeindex()
today = datetime.today()
for var in range(0, 1):
#day=today + timedelta(days=1)
#print(var+":" + datetime.strftime(yesterday, '%Y-%m-%d'))
stamp=datetime.strftime(today - timedelta(days=var), '%Y-%m-%d')
print("target: " + stamp)
requestFitbit(stamp)
測定されたHRの比較
FitbitCharge4のデータをPythonで取得し、同区間のPolarUniteのデータに重ねてみた。PolatUniteは3色10点のPolar Precision Primeセンサー搭載でいかにも正確に測れそうだ。対するFitbitCharge4は単色で測定点数も少なくやや心もとない。結果を見比べると、概ね一緒なのだが、Charge4は中盤の走っている場面で値が低めというか、かなり遅れて変化している事が見て取れる。また、PolarUniteのデータが1秒間隔で全量取得できるのに対し、Fitbitは1~5秒程度の不定間隔データとなっている。走り終わって座っている後半区間に関しては、両者はほとんど一緒だ。動きが大きくなると正確な測定が難しくなるという研究もあり、その結果を裏付ける比較結果であった。動きが少ない場面ではFitbitでも良いと言えそうだが、心理学実験での利便性は、総合的にPolarが高いと言えそうだ。
追記:わー!!文献:Assessment of the Fitbit Charge 2 for monitoring heart rateでも同様の結果だ。Charge4と2は同じアルゴリズムと思われる。30BPM低く見積もることがある、と。
Polar UniteとH7の比較
Polarには旧来のチェストバンド型センサー(H7やH10など)もある。H7を保有しているため、胸部から心電図を測定するH7と、腕から脈波を測定するUniteでHRがどのように異なるか比較してみることにした。左が座位で3分ほど、右が屋外を走り休憩する12分ほどの比較。H7で測ったデータも、Uniteで測ったデータも、PolarFlow(Webアプリ)で参照可能になる。とても便利だ。
H7の値を真のHRとすると、Uniteの測定はかなり頑張っていると言える。特に走っている最中でも追従しているのは素晴らしい。しかし「やや遅れている」のも事実のようである。そもそもH7の心拍数データは正しいのだろうか?(後継機種のH10の売り文句は「Polar史上最も正確なHRセンサー」だ)正確に測れているかは、心電図を見ないと結局わからないので、H10を買う必要があるのかもしれない。