睡眠・歩数・RHR・HRVデータの処理
1週間、1ヶ月といった単位で、行動・生理指標の変化を追う場合は、睡眠・歩数・RHR(安静時心拍)・HRV(心拍変動)データの日単位の取得が必要になります。
睡眠データの取得
ClientIDとClientSecretを用いて,過去4日分の睡眠データを取得し,csv形式で保存する。40~46行目の関数は,それぞれ「総睡眠時間,目覚め後の時間,入眠時間,覚醒時間,寝返りの回数,寝返り時間,睡眠効率」の7つを取得している。
「合計睡眠時間=Awake(起きている時間)+MainLen(寝ている時間)」
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 | """ getSleepSmple.py ClientIDとClientSecretで、Sleep関連データを取得するプログラム """ import sys import fitbit import pandas as pd import gather_keys_oauth2 as Oauth2 from datetime import datetime, date, timedelta print ( 'Hello FitbitSleepAPP1' ) USER_ID = "hoge" CLIENT_SECRET = "hoge" def requestFitbit(DATE): rval = "" global auth2_client #fitbit_stats = auth2_client.intraday_time_series('activities/minutesSedentary', DATE, detail_level='1min') #HRstats = fitbit_stats['activities-minutesSedentary-intraday']['dataset'] sleep_data = auth2_client.sleep(date = DATE) #print(DATE+"睡眠データ取得実行しました") OUTPUT_FILE = "SLEEP.csv" csv_file = open (OUTPUT_FILE, 'a' ) csv_file.write(DATE + "," ) sleepcnt = len (sleep_data[ "sleep" ]) #print(str(sleepcnt)+"回眠っています") totallength = 0 ; TAfter = 0 ; TFall = 0 ; TAwake = 0 ; TLessCnt = 0 ; TLessDur = 0 ; TEffi = 0 ; for var in range ( 0 , sleepcnt): #print("睡眠:"+str(var)) totallength + = sleep_data[ "sleep" ][var][ "minutesAsleep" ] #総睡眠時間 TAfter + = sleep_data[ "sleep" ][var][ "minutesAfterWakeup" ] TFall + = sleep_data[ "sleep" ][var][ "minutesToFallAsleep" ] TAwake + = sleep_data[ "sleep" ][var][ "minutesAwake" ] TLessCnt + = sleep_data[ "sleep" ][var][ "restlessCount" ] TLessDur + = sleep_data[ "sleep" ][var][ "restlessDuration" ] TEffi + = sleep_data[ "sleep" ][var][ "efficiency" ] AvgEffi = 1 if sleepcnt! = 0 : AvgEffi = TEffi / sleepcnt; print ( str (sleepcnt) + "回の睡眠で総睡眠時間は" + str (totallength) + "分です" ) csv_file.write( str (totallength) + "," + str (sleepcnt) + "," + str (TAfter) + "," + str (TFall) + "," + str (TAwake) + "," + str (TLessCnt) + "," + str (TLessDur) + "," + str (AvgEffi) + "," ) for var in range ( 0 , sleepcnt): if sleep_data[ "sleep" ][var][ "isMainSleep" ] = = True : csv_file.write(sleep_data[ "sleep" ][var][ "startTime" ] + "," + str (sleep_data[ "sleep" ][var][ "minutesAsleep" ]) + "," + str (sleep_data[ "sleep" ][var][ "efficiency" ])) csv_file.write( "\n" ) csv_file.close() return rval ################################################## def writeindex(): OUTPUT_FILE = "SLEEP.csv" csv_file = open (OUTPUT_FILE, 'a' ) csv_file.write( "date,totallength,count,AfterWakeup,FallAsleep,Awake,restlessCount,restlessDur,AvgEffic,MainStart,MainLen,MainEffic\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""" #requestFitbit("2022-02-22") writeindex(); #インデックス記入 today = datetime.today() for var in range ( 0 , 4 ): #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, end = ' ' ) requestFitbit(stamp) |
歩数データの取得
1日あたりの歩数を取得する
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | """ getStepSample.py 個人の1日の歩数データを取得するプログラム """ import sys import fitbit import gather_keys_oauth2 as Oauth2 from datetime import datetime, timedelta import json print ( 'Hello FitbitDailyStepsAPP' ) USER_ID = "hoge" CLIENT_SECRET = "hoge" def requestFitbit(DATE): global auth2_client # APIエンドポイントを使用して1日の歩数データを取得 steps_data = auth2_client.make_request(f 'https://api.fitbit.com/1/user/-/activities/steps/date/{DATE}/1d.json' ) OUTPUT_FILE = "Steps.csv" with open (OUTPUT_FILE, 'a' ) as csv_file: csv_file.write(f "{DATE}," ) if "activities-steps" in steps_data and len (steps_data[ "activities-steps" ]) > 0 : steps_info = steps_data[ "activities-steps" ][ 0 ] # リストの最初の要素を取得 csv_file.write(f "{steps_info['value']}\n" ) else : csv_file.write( "No steps data\n" ) def writeindex(): OUTPUT_FILE = "Steps.csv" with open (OUTPUT_FILE, 'w' ) as csv_file: csv_file.write( "date,steps\n" ) # トークンの取得 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 ( "AT:" + ACCESS_TOKEN) print ( "RT:" + REFRESH_TOKEN) # 認証 auth2_client = fitbit.Fitbit(USER_ID, CLIENT_SECRET, oauth2 = True , access_token = ACCESS_TOKEN, refresh_token = REFRESH_TOKEN) # インデックスの書き込み writeindex() # 1日の歩数データのリクエスト today = datetime.today() for var in range ( 0 , 7 ): stamp = datetime.strftime(today - timedelta(days = var), '%Y-%m-%d' ) print (f "target: {stamp}" , end = ' ' ) requestFitbit(stamp) |
RHR(安静時心拍数)の取得
RHRはその日の安静時の心拍数の評価値
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | """ getRHRsample.py 個人のHRVデータを取得するプログラム """ import sys import fitbit import gather_keys_oauth2 as Oauth2 from datetime import datetime, timedelta import json print ( 'Hello FitbitRHRAPP' ) USER_ID = "hoge" CLIENT_SECRET = "hoge" def requestFitbitRHR(DATE, ID ): global auth2_client # APIエンドポイントを使用して安静時心拍数データを取得 heart_data = auth2_client.make_request(f 'https://api.fitbit.com/1/user/-/activities/heart/date/{DATE}/1d.json' ) OUTPUT_FILE = ID + "_RHR.csv" with open (OUTPUT_FILE, 'a' ) as csv_file: csv_file.write(f "{DATE}," ) if "activities-heart" in heart_data and len (heart_data[ "activities-heart" ]) > 0 : heart_info = heart_data[ "activities-heart" ][ 0 ][ 'value' ] if 'restingHeartRate' in heart_info: rhr = heart_info[ 'restingHeartRate' ] csv_file.write(f "{rhr}\n" ) else : csv_file.write( "No resting heart rate data\n" ) else : csv_file.write( "No heart rate data\n" ) def writeindex( ID ): OUTPUT_FILE = ID + "_RHR.csv" with open (OUTPUT_FILE, 'w' ) as csv_file: csv_file.write( "date,restingHeartRate\n" ) # トークンの取得 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) # 認証 auth2_client = fitbit.Fitbit(USER_ID, CLIENT_SECRET, oauth2 = True , access_token = ACCESS_TOKEN, refresh_token = REFRESH_TOKEN) # インデックスの書き込み writeindex(USER_ID) # 安静時心拍数データのリクエスト today = datetime.today() for var in range ( 0 , 7 ): stamp = datetime.strftime(today - timedelta(days = var), '%Y-%m-%d' ) print (f "target: {stamp}" , end = ' ' ) requestFitbitRHR(stamp, USER_ID) |
HRV(心拍変動)データの取得
HRVは睡眠時のものとなるため、1日あたり一つ。評価値はrMSSDを示し単位はms。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | """ getHRVsample.py 個人のHRVデータを取得するプログラム """ import sys import fitbit import gather_keys_oauth2 as Oauth2 from datetime import datetime, timedelta import json print ( 'Hello FitbitHRVAPP' ) USER_ID = "hoge" CLIENT_SECRET = "hoge" def requestFitbit(DATE): global auth2_client # APIエンドポイントを使用してHRVデータを取得 OUTPUT_FILE = "HRV.csv" with open (OUTPUT_FILE, 'a' ) as csv_file: csv_file.write(f "{DATE}," ) if "hrv" in hrv_data and len (hrv_data[ "hrv" ]) > 0 : hrv_info = hrv_data[ "hrv" ][ 0 ] # リストの最初の要素を取得 csv_file.write(f "{hrv_info['value']['dailyRmssd']},{hrv_info['value']['deepRmssd']}\n" ) else : csv_file.write( "No HRV data\n" ) def writeindex(): OUTPUT_FILE = "HRV.csv" with open (OUTPUT_FILE, 'w' ) as csv_file: csv_file.write( "date,dailyRmssd,deepRmssd\n" ) # トークンの取得 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) # 認証 auth2_client = fitbit.Fitbit(USER_ID, CLIENT_SECRET, oauth2 = True , access_token = ACCESS_TOKEN, refresh_token = REFRESH_TOKEN) # インデックスの書き込み writeindex() # HRVデータのリクエスト today = datetime.today() for var in range ( 0 , 4 ): stamp = datetime.strftime(today - timedelta(days = var), '%Y-%m-%d' ) print (f "target: {stamp}" , end = ' ' ) requestFitbit(stamp) |