text
scripts/
parse_health.py # 流式解析 export.zip → chart_data.json
generate_report.py # chart_data.json + 用户画像 → 个性化 HTML 报告
步骤(iOS):
export.zip数据规模参考:
标准库( zipfile, re, json, statistics),无需额外安装。
收到 export.zip 后, 必须先向用户询问以下信息,再进行分析:
text
为了给你提供个性化的健康基准,我需要了解几个基本信息:
1. 性别(影响 RHR/HRV/VO₂Max/体脂参考范围)
2. 年龄或出生年份(参考范围随年龄变化显著)
3. 身高(计算 BMI,校准体重意义)
4. 体重单位(Apple Health 体重默认为 lb,需确认)
5. 有无已知慢性病/服药史(如甲亢、高血压、心律失常等)
6. 运动习惯(日常久坐/轻度活动/规律运动/专业训练)
以上信息不会离开对话,分析完成后不会保存。
将收到的信息存入 user_profile 字典,传给解析和报告脚本。
bash
python3 scripts/parse_health.py /path/to/export.zip /tmp/chart_data.json
根据 Step 0 收集的信息,调用 scripts/generate_report.py 中的 build_reference() 函数:
python
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 → 副交感主导(迷走张力高者不追求过高)睡眠
代谢
异常检测
bash
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<5454-6061-7374-82>82女26-35<5555-6162-7475-83>83女36-45<5656-6263-7576-84>84男18-25<4949-5556-6869-77>77男26-35<5050-5657-6970-78>78男36-45<5151-5758-7071-79>79
性别年龄差一般良好优秀精英女20-29<2929-3435-4344-48>48女30-39<2828-3334-4142-46>46男20-29<3838-4344-5152-56>56男30-39<3535-4142-4950-53>53
年龄低(需关注)正常良好20-30<2525-50>5030-40<2020-45>4540-50<1515-40>40
性别18-30岁31-40岁女21-32%23-34%男8-20%11-22%
病史影响的指标分析调整甲亢/甲减RHR、HRV、VO₂Max、体重RHR偏高/偏低时先排除甲状腺因素;标注治疗前后对比高血压RHR、血氧加入血压数据(如有)分析;RHR目标更严格(<70)心律失常(早搏)RHR、HRVHRV数据可能失真;日常心率偏高有代偿机制解释血管迷走性晕厥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个月才能做趋势分析。