iPhone 與 Apple Watch 每天都會自動記錄心率、步數、睡眠、血氧等資料。用上幾年,記錄就會達到數百萬筆。這些長期、真實的生活資料很難從別處取得,對研究與開發都很有價值。
不過,「健康」App 匯出的是一個有時超過 1 GB 的巨大 XML 檔案,Excel 等工具無法直接開啟。本文整理了 HealthKit 記錄的資料,並介紹如何用 Mac App HealthKit Parser 把它轉換為 CSV 進行分析。
什麼是 HealthKit
HealthKit 是 Apple 在 iPhone 上集中保存健康資料的框架。除了 iPhone 與 Apple Watch 自動測量的資料,體重計、血壓計的 App 以及記錄睡眠、飲食的 App 等寫入的資料也都匯集在這裡。「健康」App 就是檢視這些資料的 App。
其他 App 要讀取 HealthKit 的資料,需要使用者依資料類型逐一授權。自己開發 App 也可以直接從 HealthKit 讀取資料,但如果只是想把自己的記錄全部取出,使用「健康」App 的匯出功能最簡單。
HealthKit 記錄的資料一覽
HealthKit 的每種資料都有一個識別碼,例如 HKQuantityTypeIdentifierHeartRate(心率)。匯出的資料與 HealthKit Parser 產生的 CSV 的 type 欄中,都會原樣寫入這個識別碼。以下大致依照「健康」App 的分類,整理了主要的資料。
「單位(範例)」是匯出資料中的單位,可能會隨 iPhone 的設定而改變(例如 km 與 mi)。「主要記錄來源」表示資料通常來自哪裡,僅供參考。
活動
| 資料 | type 欄中的值 | 單位(範例) | 主要記錄來源 |
|---|---|---|---|
| 步數 | HKQuantityTypeIdentifier | count | iPhone、Apple Watch |
| 步行 + 跑步距離 | HKQuantityTypeIdentifier | km | iPhone、Apple Watch |
| 已爬樓層 | HKQuantityTypeIdentifier | count | iPhone、Apple Watch |
| 動態能量 | HKQuantityTypeIdentifier | kcal | Apple Watch |
| 靜態能量 | HKQuantityTypeIdentifier | kcal | Apple Watch |
| 運動分鐘數 | HKQuantityTypeIdentifier | min | Apple Watch |
| 站立分鐘數 | HKQuantityTypeIdentifier | min | Apple Watch |
| 站立時數 | HKCategoryTypeIdentifier | — | Apple Watch |
| 身體活動強度 | HKQuantityTypeIdentifier | kcal/hr·kg | Apple Watch |
| 心肺適能(最大攝氧量) | HKQuantityTypeIdentifier | mL/min·kg | Apple Watch |
| 日光下時間 | HKQuantityTypeIdentifier | min | Apple Watch |
| 騎車距離 | HKQuantityTypeIdentifier | km | Apple Watch、其他 App 與裝置 |
| 游泳距離、划水次數 | HKQuantityTypeIdentifierHKQuantityTypeIdentifier | m, count | Apple Watch |
| 跑步速度、功率、步幅、垂直振幅、觸地時間 | HKQuantityTypeIdentifierHKQuantityTypeIdentifierHKQuantityTypeIdentifierHKQuantityTypeIdentifierHKQuantityTypeIdentifier | W, m, cm, ms … | Apple Watch |
| 體能訓練強度(估算) | HKQuantityTypeIdentifier | appleEffortScore | Apple Watch |
心臟
| 資料 | type 欄中的值 | 單位(範例) | 主要記錄來源 |
|---|---|---|---|
| 心率 | HKQuantityTypeIdentifier | count/min | Apple Watch |
| 靜止心率 | HKQuantityTypeIdentifier | count/min | Apple Watch |
| 步行平均心率 | HKQuantityTypeIdentifier | count/min | Apple Watch |
| 心率變異性(HRV) | HKQuantityTypeIdentifier | ms | Apple Watch |
| 心率恢復(1 分鐘) | HKQuantityTypeIdentifier | count/min | Apple Watch |
| 心房顫動歷史 | HKQuantityTypeIdentifier | % | Apple Watch |
| 高心率、低心率與心律不整通知 | HKCategoryTypeIdentifierHKCategoryTypeIdentifierHKCategoryTypeIdentifier | — | Apple Watch |
呼吸
| 資料 | type 欄中的值 | 單位(範例) | 主要記錄來源 |
|---|---|---|---|
| 呼吸速率 | HKQuantityTypeIdentifier | count/min | Apple Watch |
| 血氧 | HKQuantityTypeIdentifier | % | Apple Watch |
| 呼吸干擾 | HKQuantityTypeIdentifier | count | Apple Watch |
| 睡眠呼吸中止通知 | HKCategoryTypeIdentifier | — | Apple Watch |
睡眠
| 資料 | type 欄中的值 | 單位(範例) | 主要記錄來源 |
|---|---|---|---|
| 睡眠(臥床、核心、深層、快速動眼期、清醒) | HKCategoryTypeIdentifier | — | Apple Watch、iPhone、其他 App 與裝置 |
| 睡眠手腕溫度 | HKQuantityTypeIdentifier | degC | Apple Watch |
| 睡眠時間目標 | HKData | hr | 「健康」App |
行動能力
| 資料 | type 欄中的值 | 單位(範例) | 主要記錄來源 |
|---|---|---|---|
| 步行速度 | HKQuantityTypeIdentifier | km/hr | iPhone |
| 步幅 | HKQuantityTypeIdentifier | cm | iPhone |
| 步行不對稱 | HKQuantityTypeIdentifier | % | iPhone |
| 雙腳支撐時間 | HKQuantityTypeIdentifier | % | iPhone |
| 步行穩定度 | HKQuantityTypeIdentifier | % | iPhone |
| 樓梯速度(上樓、下樓) | HKQuantityTypeIdentifierHKQuantityTypeIdentifier | m/s | iPhone、Apple Watch |
| 六分鐘步行距離(估算) | HKQuantityTypeIdentifier | m | iPhone |
聽力
| 資料 | type 欄中的值 | 單位(範例) | 主要記錄來源 |
|---|---|---|---|
| 環境音量 | HKQuantityTypeIdentifier | dBASPL | Apple Watch |
| 耳機音量 | HKQuantityTypeIdentifier | dBASPL | iPhone |
| 嘈雜環境通知 | HKCategoryTypeIdentifier | — | Apple Watch |
身體測量
| 資料 | type 欄中的值 | 單位(範例) | 主要記錄來源 |
|---|---|---|---|
| 身高 | HKQuantityTypeIdentifier | cm | 手動輸入、其他 App 與裝置 |
| 體重 | HKQuantityTypeIdentifier | kg | 其他 App 與裝置、手動輸入 |
| 身體質量指數(BMI) | HKQuantityTypeIdentifier | count | 其他 App 與裝置、手動輸入 |
| 體脂率 | HKQuantityTypeIdentifier | % | 其他 App 與裝置、手動輸入 |
| 淨體重 | HKQuantityTypeIdentifier | kg | 其他 App 與裝置、手動輸入 |
| 腰圍 | HKQuantityTypeIdentifier | cm | 手動輸入 |
生命徵象
| 資料 | type 欄中的值 | 單位(範例) | 主要記錄來源 |
|---|---|---|---|
| 血壓(收縮壓、舒張壓) | HKQuantityTypeIdentifierHKQuantityTypeIdentifier | mmHg | 其他 App 與裝置、手動輸入 |
| 體溫 | HKQuantityTypeIdentifier | degC | 其他 App 與裝置、手動輸入 |
| 基礎體溫 | HKQuantityTypeIdentifier | degC | 其他 App 與裝置、手動輸入 |
| 血糖 | HKQuantityTypeIdentifier | mg/dL | 其他 App 與裝置、手動輸入 |
營養
| 資料 | type 欄中的值 | 單位(範例) | 主要記錄來源 |
|---|---|---|---|
| 膳食能量、蛋白質、總脂肪、碳水化合物 | HKQuantityTypeIdentifierHKQuantityTypeIdentifierHKQuantityTypeIdentifierHKQuantityTypeIdentifier | kcal, g | 其他 App 與裝置、手動輸入 |
| 水、咖啡因 | HKQuantityTypeIdentifierHKQuantityTypeIdentifier | mL, mg | 其他 App 與裝置、手動輸入 |
| 膳食纖維、維生素、礦物質等(30 多種) | HKQuantityTypeIdentifierHKQuantityTypeIdentifier… | g, mg, µg … | 其他 App 與裝置、手動輸入 |
其他
| 資料 | type 欄中的值 | 單位(範例) | 主要記錄來源 |
|---|---|---|---|
| 正念時間 | HKCategoryTypeIdentifier | — | Apple Watch、其他 App 與裝置 |
| 洗手 | HKCategoryTypeIdentifier | — | Apple Watch |
| 刷牙 | HKCategoryTypeIdentifier | — | 其他 App 與裝置 |
| 跌倒次數 | HKQuantityTypeIdentifier | count | Apple Watch |
| 週期追蹤(月經等) | HKCategoryTypeIdentifier… | — | 手動輸入、其他 App 與裝置 |
| 症狀(頭痛、發燒、咳嗽等) | HKCategoryTypeIdentifierHKCategoryTypeIdentifierHKCategoryTypeIdentifier… | — | 手動輸入 |
| 紫外線指數 | HKQuantityTypeIdentifier | count | 其他 App 與裝置 |
單位為「—」的是類別資料,value 欄中是 HKCategoryValueSleepAnalysisAsleepCore(核心睡眠)這樣的類別值。
此外還有聽力測驗結果、體能訓練中的速度等,HealthKit 的資料類型總共超過 100 種。實際包含哪些資料,取決於你使用的裝置與 App。筆者約 9 年(2017–2026 年)的匯出資料中,共有 42 種、約 308 萬筆記錄,其中最多的是 Apple Watch 的動態能量與心率,各約 70 萬筆。
在 iPhone 上匯出健康資料
- 在 iPhone 上開啟「健康」App,點一下右上角的個人檔案圖示。
- 在頁面最下方點一下「匯出所有健康資料」,出現確認後點一下「匯出」。資料較多時,匯出需要幾分鐘。
- 出現分享選單後,用 AirDrop 傳送到 Mac,或儲存到「檔案」後再移到 Mac。
- 在 Mac 上按兩下 zip 檔案解壓縮。
解壓縮後會得到一個名為 apple_health_export 的資料夾,裡面包含:
export.xml:所有記錄。HealthKit Parser 讀取的就是這個檔案export_cda.xml:以醫療資訊標準格式(HL7 CDA)寫成的記錄electrocardiograms:用 Apple Watch 記錄的心電圖波形(CSV)workout-routes:體能訓練的路線(GPX)
用 HealthKit Parser 轉換為 CSV
HealthKit Parser 是一款讀取 export.xml、把記錄匯出為 CSV 的 Mac App。所有處理都在 Mac 上完成,資料不會被傳送到任何地方。
1. 匯入 export.xml
啟動 HealthKit Parser 後,會開啟一個新文件視窗。按一下工具列中的「Import XML」,選擇解壓縮後資料夾中的 export.xml。

匯入需要一些時間。筆者 1.4 GB 的 export.xml(約 308 萬筆記錄)在 MacBook Pro(M4)上用了約 14 分鐘。匯入完成前,視窗右下角會顯示「Parsing XML…」。
2. 確認資料類型與筆數
匯入完成後,視窗中會顯示記錄的期間(開始與結束)、記錄筆數,以及所有資料類型與各自的筆數。標題與備註可以自由填寫。

儲存文件後,下次不必重新匯入 export.xml 就能立即開啟。需要依不同期間多次匯出時很方便。
3. 匯出為 CSV
按一下工具列中的「Export CSV」,選擇要匯出的期間與資料類型,然後按一下「Export」。期間可以選「All Time」(全部),也可以用開始與結束日期縮小範圍。

也可以一次匯出所有類型,但記錄有數百萬筆時 CSV 會很大。只選擇分析需要的類型,處理起來會輕鬆許多。
CSV 的內容
CSV 中每一列是一筆記錄,包含以下各欄:
| 欄 | 內容 |
|---|---|
type | 資料類型(上表中的識別碼) |
unit | 單位 |
value | 值。睡眠等類別資料是表示類別的文字 |
start, end | 記錄的開始與結束時間,精確到分鐘,格式取決於 Mac 的「語言與地區」設定 |
start_UT, end_UT | 以 Unix 時間(秒)表示的開始與結束時間 |
creation, creation_UT | 記錄儲存到 HealthKit 的時間,以及對應的 Unix 時間 |
device | 記錄資料的裝置(型號與軟體版本) |
source name, source version | 記錄資料的 App 或裝置的名稱及其版本 |
以下是匯出的靜止心率範例(僅部分欄):
| type | unit | value | start_UT | end_UT |
|---|---|---|---|---|
HKQuantityTypeIdentifier | count/min | 63 | 1791559483.0 | 1791640198.0 |
HKQuantityTypeIdentifier | count/min | 63 | 1791645830.0 | 1791714436.0 |
HKQuantityTypeIdentifier | count/min | 58 | 1791737624.0 | 1791765440.0 |
_UT 欄(Unix 時間)
欄名以 _UT 結尾的欄,以 Unix 時間表示日期與時間。Unix 時間是從 1970 年 1 月 1 日 0 時 0 分 0 秒(世界協調時間,UTC)起經過的秒數,不受時區影響。
- 即使出國旅行或出差改變了時區,記錄的順序與間隔也不會錯亂
- 只要相減,就能得到睡眠階段等區間的長度(秒)
- 精確到秒(
start等欄只到分鐘) - 便於依時間與研究設備或其他感測器的資料對齊
- 顯示時可以轉換為任意時區
用 Python(pandas)可以這樣讀取。標題列的逗號後面有空格,因此要加上 skipinitialspace=True。
import pandas as pd
df = pd.read_csv("resting_heart_rate.csv", skipinitialspace=True)
# Unix 時間 → 日期時間(UTC)→ 台灣時間
df["start_local"] = (pd.to_datetime(df["start_UT"], unit="s", utc=True)
.dt.tz_convert("Asia/Taipei"))
# 區間長度(秒)
df["seconds"] = df["end_UT"] - df["start_UT"]
在 Excel 中,用 =E2/86400+DATE(1970,1,1) 計算並把儲存格格式設為日期時間,即可得到 UTC 時間(E 欄為 start_UT 時)。要換成台灣時間,再加上 8/24。
分析時的注意事項
- 同一資料可能重複:同時使用 iPhone 與 Apple Watch 時,步數與距離會被兩者分別記錄。「健康」App 顯示時會去除重複,但匯出的資料中兩者都有。加總前,請用
source name或device欄篩選記錄來源。 - 百分比是 0 到 1 的值:單位為 % 的資料(血氧、體脂率、步行不對稱等)中,97% 記作 0.97。
- 確認單位:單位可能隨 iPhone 的設定而改變。計算前請先確認
unit欄。 - 類別資料每列是一個區間:睡眠的
value欄中是HKCategoryValueSleepAnalysisAsleepCore(核心)、…AsleepDeep(深層)、…AsleepREM(快速動眼期)、…Awake(清醒)等值,每列是一個區間。區間長度為end_UT − start_UT。 - 處理他人的資料時:健康資料是非常敏感的個人資訊。在研究中使用參與者的資料時,請遵循所屬機構的倫理審查與知情同意程序。
CSV 中不包含的內容
HealthKit Parser 轉換的是 export.xml 中的各筆記錄。體能訓練的摘要(類型、時間長度、總距離等)、健身圓圈的每日統計,以及出生日期、血型等個人資料不包含在內。體能訓練中的心率、距離與消耗的能量,會作為各筆記錄包含在 CSV 中。
心電圖波形與體能訓練路線,已經以 CSV 與 GPX 檔案的形式放在解壓縮後的資料夾中,可以直接使用。
總結
把 iPhone 與 Apple Watch 的記錄匯出並轉換為 CSV 後,就可以在 Excel、R、Python 等中自由分析。利用 _UT 欄,可以不必擔心時區,把它與其他資料組合起來。
HealthKit Parser 在 Mac App Store 以買斷制販售(macOS 12 或以上版本),沒有訂閱。
