Install
openclaw skills install iwatch-health-data-analysisApple Health 数据全景分析。从 export.zip 流式解析 XML(支持 1-2GB 大文件),提取 RHR/HRV/VO₂Max/睡眠/步数/血氧等核心指标,基于用户个人信息(年龄/性别/身高/体重/病史)动态校准参考范围,生成个性化交互式 HTML 报告(含 6 张 Chart.js 图表)。使用场景:用户说「帮我分析健康数据」「看看我的 Apple Health 数据」「生成健康报告」「分析运动/睡眠/心率趋势」时使用。
openclaw skills install iwatch-health-data-analysisscripts/
parse_health.py # 流式解析 export.zip → chart_data.json
generate_report.py # chart_data.json + 用户画像 → 个性化 HTML 报告
步骤(iOS):
export.zip数据规模参考:
标准库(zipfile, re, json, statistics),无需额外安装。
收到 export.zip 后,必须先向用户询问以下信息,再进行分析:
为了给你提供个性化的健康基准,我需要了解几个基本信息:
1. 性别(影响 RHR/HRV/VO₂Max/体脂参考范围)
2. 年龄或出生年份(参考范围随年龄变化显著)
3. 身高(计算 BMI,校准体重意义)
4. 体重单位(Apple Health 体重默认为 lb,需确认)
5. 有无已知慢性病/服药史(如甲亢、高血压、心律失常等)
6. 运动习惯(日常久坐/轻度活动/规律运动/专业训练)
以上信息不会离开对话,分析完成后不会保存。
将收到的信息存入 user_profile 字典,传给解析和报告脚本。
python3 scripts/parse_health.py /path/to/export.zip /tmp/chart_data.json
根据 Step 0 收集的信息,调用 scripts/generate_report.py 中的 build_reference() 函数:
profile = {
"gender": "female", # male / female / other
"age": 26, # 岁
"height_cm": 170, # 厘米
"weight_unit": "lb", # lb / kg
"conditions": ["hyperthyroidism"], # 已知病史,影响异常标注
"activity_level": "active" # sedentary / light / active / athlete
}
心血管系统
神经系统(自主神经)
ref.hrv_low → 交感亢奋ref.hrv_high → 副交感主导(迷走张力高者不追求过高)睡眠
代谢
异常检测
python3 scripts/generate_report.py \
/tmp/chart_data.json \
health_report.html \
--gender female \
--age 26 \
--height 170 \
--weight-unit lb \
--conditions "hyperthyroidism" \
--activity active \
--verdict "整体判断:亚健康恢复期..."
| 性别 | 年龄 | 优秀 | 良好 | 正常 | 偏高 | 过高 |
|---|---|---|---|---|---|---|
| 女 | 18-25 | <54 | 54-60 | 61-73 | 74-82 | >82 |
| 女 | 26-35 | <55 | 55-61 | 62-74 | 75-83 | >83 |
| 女 | 36-45 | <56 | 56-62 | 63-75 | 76-84 | >84 |
| 男 | 18-25 | <49 | 49-55 | 56-68 | 69-77 | >77 |
| 男 | 26-35 | <50 | 50-56 | 57-69 | 70-78 | >78 |
| 男 | 36-45 | <51 | 51-57 | 58-70 | 71-79 | >79 |
| 性别 | 年龄 | 差 | 一般 | 良好 | 优秀 | 精英 |
|---|---|---|---|---|---|---|
| 女 | 20-29 | <29 | 29-34 | 35-43 | 44-48 | >48 |
| 女 | 30-39 | <28 | 28-33 | 34-41 | 42-46 | >46 |
| 男 | 20-29 | <38 | 38-43 | 44-51 | 52-56 | >56 |
| 男 | 30-39 | <35 | 35-41 | 42-49 | 50-53 | >53 |
| 年龄 | 低(需关注) | 正常 | 良好 |
|---|---|---|---|
| 20-30 | <25 | 25-50 | >50 |
| 30-40 | <20 | 20-45 | >45 |
| 40-50 | <15 | 15-40 | >40 |
| 性别 | 18-30岁 | 31-40岁 |
|---|---|---|
| 女 | 21-32% | 23-34% |
| 男 | 8-20% | 11-22% |
| 病史 | 影响的指标 | 分析调整 |
|---|---|---|
| 甲亢/甲减 | RHR、HRV、VO₂Max、体重 | RHR偏高/偏低时先排除甲状腺因素;标注治疗前后对比 |
| 高血压 | RHR、血氧 | 加入血压数据(如有)分析;RHR目标更严格(<70) |
| 心律失常(早搏) | RHR、HRV | HRV数据可能失真;日常心率偏高有代偿机制解释 |
| 血管迷走性晕厥 | HRV | 不追求HRV越高越好;避免过高迷走张力风险 |
| 低血压 | RHR | 心率轻度代偿(75-85bpm)属正常,不作为异常标注 |
| 贫血 | RHR、VO₂Max、活动卡路里 | RHR偏高/VO₂Max偏低时排除贫血因素 |
| 糖尿病 | 步数、卡路里 | 步数目标提升至10000+;关注活动消耗稳定性 |
kg = lb × 0.4536,必须向用户确认单位sourceName 字段分段处理Q: 没有 HRV 数据? A: 需要 Apple Watch 且设置中开启「心率通知」。无 HRV 时跳过自主神经分析,其余正常生成。
Q: 为什么 HRV 早期数值异常高(80-160ms)? A: 旧 Apple Watch 测量 HRV 频率极低(每月1-2次),且算法不同,不可与新版连续监测数据对比。脚本会自动识别设备名称分段处理。
Q: XML 太大内存不足?
A: parse_health.py 流式解析,512KB 分块,1GB+ 文件正常。
Q: 分析多少时间跨度合适? A: 理论无限。月度聚合后每年12个数据点,图表不会过密。建议至少6个月才能做趋势分析。