Apple Watch에서 얻은 생체 데이터를 CSV로 출력

이게 뭐야



애플 시계와 iOS 기기에서 얻은 생체 데이터를 출력 할 수 있다는 소문을 들었으므로 시도했습니다.

사용한 것



Apple Watch series3
iPhone11 (iOS14.0.1)

생체 데이터 출력



출력은 간단합니다. iPhone의 「헬스 케어」로부터 출력합니다.
먼저 '헬스케어' 앱을 열고 개요 페이지의 오른쪽 상단에 있는 자신의 AppleID 아이콘을 탭합니다.

탭 후 표시되는 메뉴 하단의 "모든 건강 관리 데이터 내보내기"를 탭합니다.


처리가 실행되기 때문에 잠시 기다립니다. 완료되면 공유 메뉴가 표시되므로 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가 취득한 생체 데이터를 출력해 보았습니다.

좋은 웹페이지 즐겨찾기