なにこれ
apple watchやiOSデバイスで取得したバイタルデータを出力することができると言う噂を聞いたので,試してみました.
使用したもの
Apple Watch series3
iPhone11 (iOS14.0.1)
バイタルデータの出力
出力は簡単です.iPhoneの「ヘルスケア」から出力します.
まず「ヘルスケア」アプリを開き,概要ページの右上部分にある自信のAppleIDのアイコンをタップします.
タップ後表示されるメニューの一番下にある「すべてのヘルスケアデータを書き出す」をタップします.
処理が走るのでしばらく待ちます.完了すると共有メニューが表示されるので,Airdropなど好きな方法でPCへデータを持っていきます.
出力されたバイタルデータは書き出したデータ.zip
としてZIP圧縮されています.これを解凍してやるとxml形式のファイルexport.xml
とexport_cda.xml
が出てきます.export.xml
にデバイスが取得したバイタルデータがすべて記録されています.しかし,これはxml形式のデータであることや,歩数や心拍数など複数の情報がまとめて1つのファイルに記されているため,このままだとちょっと扱いにくいです.
CSVへ変換
今回はこのGithubリポジトリで提供されているPythonのプログラムを使ってcsvに変換してやりました.
準備
このGithubリポジトリのソースコードをクローンするなりダウンロードするなりして自身のPC上に持ってきます.
クローンしたリポジトリのapplehealthdata-master
内にバイタルデータのxmlファイルexport.xml
を入れます.
実行
applehealthdata.py
を実行することでexport.xml
をcsv形式に変換してくれます.引数に変換対象のxmlファイルのパスを指定する必要があります.つまり以下のような感じで実行します.
python applehealthdata.py ./export.xml
変換
カレントディレクトリ内にcsv形式のバイタルデータが出力されます.さらに嬉しいことに,バイタルデータの種類ごとにファイルを分けて出力されます.
中身の確認
どの様な感じで出力されているか確認してみました.今回はわざわざpandasを使って心拍数に関するcsvファイルHeartRate.csv
の上位5件を出力してみます.
import pandas as pd
data = pd.read_csv("HeartRate.csv")
print(data.head())
出力は以下の通り...
sourceName sourceVersion device ... startDate endDate value
0 〇〇のApple Watch 6.2.8 <<HKDevice: 0x000000000>, name:Apple Watch, ma... ... 2020-08-08 00:14:42 +0900 2020-08-08 00:14:42 +0900 67.0000
1 〇〇のApple Watch 6.2.8 <<HKDevice: 0x000000000>, name:Apple Watch, ma... ... 2020-08-08 00:26:27 +0900 2020-08-08 00:26:27 +0900 67.2445
2 〇〇のApple Watch 6.2.8 <<HKDevice: 0x000000000>, name:Apple Watch, ma... ... 2020-08-08 00:31:20 +0900 2020-08-08 00:31:20 +0900 60.0000
3 〇〇のApple Watch 6.2.8 <<HKDevice: 0x000000000>, name:Apple Watch, ma... ... 2020-08-08 00:38:25 +0900 2020-08-08 00:38:25 +0900 57.0000
4 〇〇のApple Watch 6.2.8 <<HKDevice: 0x000000000>, name:Apple Watch, ma... ... 2020-08-08 00:42:25 +0900 2020-08-08 00:42:25 +0900 62.0000
行が長すぎて途中で省略されていますが,取得したデバイスに関する情報,記録日時,計測日時,計測値が記録されています.
今回の場合,計測値は心拍数を示しています.
余談ですが,記録した心拍数の最大値を見てみます.
import pandas as pd
data = pd.read_csv("HeartRate.csv")
max_value = data['value'].idxmax()
print(data.loc[max_value])
sourceName 〇〇のApple Watch
sourceVersion 6.2.8
device <<HKDevice: 0x000000000>, name:Apple Watch, ma...
type HeartRate
unit count/min
creationDate 2020-09-25 12:20:29 +0900
startDate 2020-09-25 12:15:04 +0900
endDate 2020-09-25 12:15:04 +0900
value 153
Name: 2169, dtype: object
まとめ
今回はAppleWatchが取得したバイタルデータを出力してみました.