10
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Apple Watchで取得したバイタルデータをCSVで出力する

Posted at

なにこれ

apple watchやiOSデバイスで取得したバイタルデータを出力することができると言う噂を聞いたので,試してみました.

使用したもの

Apple Watch series3
iPhone11 (iOS14.0.1)

バイタルデータの出力

出力は簡単です.iPhoneの「ヘルスケア」から出力します.
まず「ヘルスケア」アプリを開き,概要ページの右上部分にある自信のAppleIDのアイコンをタップします.
IMG_8984.PNG
タップ後表示されるメニューの一番下にある「すべてのヘルスケアデータを書き出す」をタップします.
IMG_8985.PNG

処理が走るのでしばらく待ちます.完了すると共有メニューが表示されるので,Airdropなど好きな方法でPCへデータを持っていきます.

出力されたバイタルデータは書き出したデータ.zipとしてZIP圧縮されています.これを解凍してやるとxml形式のファイルexport.xmlexport_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が取得したバイタルデータを出力してみました.

10
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?