Appleのヘルスケアアプリのデータを使って、他のアプリでグラフを描こうと思ったが、エクスポートされるデータはXMLのため、そのままでは扱いにくい。
このため、XMLファイルから体重データを抜き出してCSVを出力するRubyスクリプトを書いた。
require 'nokogiri'
require 'date'
reader = Nokogiri::XML::Reader File.read('export.xml')
data = []
reader.each do |node|
if node.name == 'Record' && node.attributes['type'] == 'HKQuantityTypeIdentifierBodyMass'
d = Date.parse(node.attributes['startDate']).strftime("%Y-%m-%d")
data << [d, node.attributes['value']]
end
end
data.sort.each {|d|
puts d.join(',')
}
=begin
<Record type="HKQuantityTypeIdentifierBodyMass" sourceName="1byone Health" sourceVersion="63" device="<<HKDevice: 0x3013e9b30>, name:iPhone, manufacturer:Apple, model:iPhone, hardware:iPhone, firmware:iPhone, software:17.5.1, localIdentifier:ja_JP, UDIDeviceIdentifier:ja_JP, creation date:2024-06-02 22:17:36 +0000>" unit="kg" creationDate="2024-06-17 07:17:17 +0900" startDate="2024-06-17 07:17:17 +0900" endDate="2024-06-17 07:17:17 +0900" value="71.9"/>
=end
以下、ChatGPTにヘルスケアデータの構造を聞いた回答
Appleのヘルスケアアプリでエクスポートされるデータは、XML (Extensible Markup Language) フォーマットで提供されます。このフォーマットは、ヘルスデータを構造化して格納するための標準的な形式です。
データの構造と内容
-
XMLヘッダー エクスポートされたファイルは、XMLヘッダーから始まります。
<?xml version="1.0" encoding="UTF-8"?>
-
全体のルート要素 データ全体は
<HealthData>
というルート要素でラップされています。<HealthData locale="en_US"> ... </HealthData>
-
データの各エントリー ヘルスケアのデータは、それぞれの記録を
<Record>
要素として格納します。主な属性は以下の通りです:- type: データの種類(例: 歩数、心拍数など)。
- sourceName: データのソース名(iPhone、Apple Watchなど)。
- sourceVersion: ソースのバージョン情報。
- unit: データの単位(例:
count
,bpm
,kcal
など)。 - creationDate: データが作成された日時。
- startDate: データの開始日時(測定期間の開始)。
- endDate: データの終了日時(測定期間の終了)。
- value: データの値(例: 歩数の数値、体重の値など)。
例:
<Record type="HKQuantityTypeIdentifierStepCount" sourceName="iPhone" sourceVersion="16.2" unit="count" creationDate="2024-12-10 07:30:00 +0000" startDate="2024-12-10 07:00:00 +0000" endDate="2024-12-10 07:05:00 +0000" value="1200"/>
-
ワークアウトデータ ワークアウトデータは
<Workout>
要素で表されます。これには以下の属性が含まれます:- workoutActivityType: ワークアウトの種類(例: ランニング、サイクリングなど)。
- duration: ワークアウトの継続時間。
- totalDistance: 総移動距離。
- totalEnergyBurned: 総消費カロリー。
- startDate: ワークアウト開始日時。
- endDate: ワークアウト終了日時。
例:
<Workout workoutActivityType="HKWorkoutActivityTypeRunning" duration="1800" totalDistance="5.0" totalEnergyBurned="300" startDate="2024-12-10 06:30:00 +0000" endDate="2024-12-10 07:00:00 +0000" />
-
メタデータ 各エントリーには
<MetadataEntry>
要素が付属している場合があります。この要素には、追加情報がキー・バリュー形式で格納されます。例: 1
<MetadataEntry key="HKMetadataKeyHeartRateMotionContext" value="1"/>
-
ファイルの最後 エクスポートされたデータの最後には、ヘルスデータの概要を示す
<ExportDate>
要素が含まれます。<ExportDate value="2024-12-11 08:00:00 +0000"/>
主なデータ種類と識別子
- 歩数:
HKQuantityTypeIdentifierStepCount
- 心拍数:
HKQuantityTypeIdentifierHeartRate
- 体重:
HKQuantityTypeIdentifierBodyMass
- 睡眠分析:
HKCategoryTypeIdentifierSleepAnalysis
使用例と注意点
- データ解析: このXMLファイルを解析するには、プログラミング言語(例: Python, JavaScript, R)や専用ツールを使用します。
- プライバシー: エクスポートされたデータには個人情報が含まれるため、取り扱いには注意が必要です。
- データ量: データが大量になる場合があるので、解析時にはパフォーマンスを考慮してください。
これがAppleのヘルスケアアプリでエクスポートされるデータのフォーマットの概要です。