iPhone 和 Apple Watch 每天都在记录心率、步数、睡眠、血氧等海量数据。如果你觉得“健康”App 里的图表不够用,想自己动手统计,这篇教程就是为你准备的。
无论是整理研究数据,还是浏览自己的记录,都用得上。
步骤 1:从“健康”App 导出所有数据
- 在 iPhone 上打开“健康”App
- 轻点右上角的圆形个人头像
- 在下方轻点“导出所有健康数据”
- 等待导出完成(视数据量而定,可能需要几分钟到十几分钟)
- 共享表单打开后,通过隔空投送或“邮件”等方式传到 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:使用转换应用
如果不想写代码,用专用应用是捷径。
我们开发的 HealthKit Parser 就是专为这项工作打造的 Mac 应用。
- 在 Mac 上打开 HealthKit Parser,点按“Import XML”(导入 XML),选择解压缩后文件夹里的
export.xml - 确认导入的记录
- 点按“Export CSV”(导出为 CSV)进行存储
关键在于它是基于文档的应用。只要导入一次并以 HealthKit Parser 的格式存储,之后无需重新解析 XML 就能立即打开。大文件第一次导入需要一些时间,之后就不用再等了。
数据不会被发送到任何地方。它只是读取你提供的文件,再把 CSV 导出到你指定的位置。一次性购买,支持 macOS 12 或更高版本。
步骤 3:分析 CSV
导出的 CSV 是每行一条记录的纯文本。Excel、Numbers 表格、R、Python 都能直接读取。
分析时记住以下几点,会轻松不少。
- 按
type列筛选:一个文件里混杂着几十种数据,先按类型缩小范围 - 检查
sourceName列:iPhone、Apple Watch 和第三方应用有时会重复记录同一项指标。合计步数时尤其要注意 - 日期带有时区:格式类似
2026-09-01 07:12:33 +0900。如果按天汇总,直接截取前 10 个字符最省事 - 单位在
unit列中:同一项指标,记录来源不同,单位也可能不同
注意事项
导出的是你本人的健康记录,分享和保存时请多加注意。此外,这些数值并不保证具备医疗器械级别的准确度。身体状况的判断请咨询医疗专业人员。
