iPhone 和 Apple Watch 每天都在記錄心率、步數、睡眠、血氧等大量資料。如果你覺得「健康」App 裡的圖表不夠用,想自己動手統計,這篇教學就是為你準備的。
無論是整理研究資料,還是瀏覽自己的記錄,都用得上。
步驟 1:從「健康」App 輸出所有資料
- 在 iPhone 上開啟「健康」App
- 點一下右上角的圓形個人資料圖片
- 在下方點一下「輸出所有健康資料」
- 等待輸出完成(視資料量而定,可能需要幾分鐘到十幾分鐘)
- 分享表單開啟後,透過 AirDrop 或「郵件」等方式傳送到 Mac
輸出的是一個 Zip 檔。按兩下解壓縮後,會得到一個名為 apple_health_export 的資料夾,裡面有 export.xml,這就是主要的檔案。如果記錄過心電圖,裡面還會有 CSV 檔;如果有體能訓練的 GPS 路線,還會有 GPX 檔。
步驟 2:如何處理 export.xml
很多人會在這一步卡關。export.xml 是 Apple 專有的 XML 格式,而且非常龐大。如果有好幾年的記錄,檔案達到幾百 MB 甚至超過 1 GB 並不少見。Excel 和 Numbers 試算表都無法直接開啟它。
有兩種選擇。
選項 A:自己寫腳本
用 Python 的話,可以使用 iterparse,它不會把整個檔案讀進記憶體,而是一筆一筆處理記錄。
import csv
import xml.etree.ElementTree as ET
with open("records.csv", "w", newline="", encoding="utf-8") as f:
w = csv.writer(f)
w.writerow(["type", "sourceName", "unit", "startDate", "endDate", "value"])
for _, elem in ET.iterparse("export.xml", events=("end",)):
if elem.tag == "Record":
w.writerow([
elem.get("type"), elem.get("sourceName"), elem.get("unit"),
elem.get("startDate"), elem.get("endDate"), elem.get("value"),
])
elem.clear() # 釋放記憶體(忘了這一步程式就會當掉)
如果只想要特定類型,可以用 elem.get("type") 篩選(步數是 HKQuantityTypeIdentifierStepCount,心率是 HKQuantityTypeIdentifierHeartRate)。
- 適合的人:會寫程式、想精細控制擷取條件的人
- 注意:忘了
elem.clear()就會耗盡記憶體而當掉。體能訓練和睡眠使用的是和Record不同的標籤,如有需要請另外處理
選項 B:使用轉換 App
如果不想寫程式,用專用 App 是捷徑。
我們開發的 HealthKit Parser 就是專為這項工作打造的 Mac App。
- 在 Mac 上開啟 HealthKit Parser,按一下「Import XML」(匯入 XML),選擇解壓縮後資料夾裡的
export.xml - 確認匯入的記錄
- 按一下「Export CSV」(匯出為 CSV)並儲存
重點在於它是以文件為基礎的 App。只要匯入一次並以 HealthKit Parser 的格式儲存,之後不必重新解析 XML 就能立即開啟。大型檔案第一次匯入需要一些時間,之後就不必再等。
資料不會傳送到任何地方。它只會讀取你提供的檔案,再把 CSV 匯出到你指定的位置。一次性購買,支援 macOS 12 或以上版本。
步驟 3:分析 CSV
匯出的 CSV 是每行一筆記錄的純文字。Excel、Numbers 試算表、R、Python 都能直接讀取。
分析時記住以下幾點,會輕鬆不少。
- 依
type欄篩選:一個檔案裡混雜了數十種資料,先依類型縮小範圍 - 檢查
sourceName欄:iPhone、Apple Watch 和第三方 App 有時會重複記錄同一項指標。加總步數時尤其要注意 - 日期帶有時區:格式類似
2026-09-01 07:12:33 +0900。如果按日彙整,直接擷取前 10 個字元最省事 - 單位在
unit欄中:同一項指標,記錄來源不同,單位也可能不同
注意事項
輸出的是你本人的健康記錄,分享和保存時請多加留意。此外,這些數值並不保證具備醫療器材等級的準確度。身體狀況的判斷請諮詢醫療專業人員。
