2023-2026 wearable signal vs travel epochs. цель — ответить на OQ3 (что сработало в LA 2020), увидеть 2024-Q4 inflection в HRV terms, измерить residual cost после Strep 2025-07.
investigation: allostatic_signatureresolves: H7 retrospective + OQ3cost: 5 мин user + ~2h agentblocking: whoop CSV export
как получить доступ к данным whoop
whoop даёт экспорт — это политика с 2023 года. четыре пути от простого к сложному.
01in-app data export
recommended
самый простой путь. whoop ОБЯЗАН выдать данные по GDPR / California CCPA. ZIP с CSV файлами на email.
как сделать
open whoop app
Profile (top right) → Settings (⚙️)
scroll to Account section
tap Export My Data (или Download My Data в свежих версиях)
выбираешь period: All Time
через 5-30 минут на email приходит письмо с ZIP archive
pagination до 25 records/page, нужен loop по start_date
я могу написать pull-скрипт когда дашь client_id + secret. но #1 быстрее для одноразового анализа.
03third-party integrations
backup
несколько services уже сделали whoop API integration и экспортируют в google sheets / csv:
HRV4Training — pulls whoop HRV, экспортирует в csv
Whoop2Sheets (community Apps Script) — pull in google sheets
Trainerize / Athletigen — спортивные платформы с whoop sync
даёт меньше детализации чем native export. использовать только если #1+#2 заблокированы.
04browser DOM scrape
last resort
через app.whoop.com (если есть web-app) или mobile-mirror — DOM extraction. fragile, нарушает ToS, не рекомендую.
только если whoop откажется выдать данные in-app (что нарушит GDPR — но политики меняются).
важно: в whoop app → Profile → видна дата подключения устройства. найди её. это определяет scope: если whoop с 2020 — full retrospective включая LA anchor (золото для OQ3); если с 2023 — post-2023 only, OQ3 разрешается через proxy (Bali #1 vs #2 same-geography сравнение).
пошаговый план
step 00 · pre-check
узнать дату подключения whoop
тыblocking — 30 сек
open whoop app → Profile → видна или дата signup, или «member since». пиши мне год. это решает: full retrospective vs post-2023.
почему важно: LA 2020 anchor = единственный confirmed случай восстановления оси. whoop signal оттуда — direct evidence для OQ3. без него — proxy через Bali #1 vs #2.
step 01 · export
выгрузить raw csv
тыblocking — 5 мин
путь #01 (in-app export) → ZIP на email → положить в labs/04_wearables_and_performance/whoop/raw/
не требует whoop. только state/ledgers/travel_history.yaml. epoch skeleton становится reusable input для любого wearable анализа (apple watch, oura, eight sleep).
алгоритм классификации
for each row in travel_history.rows:
compute tz_offset(city)
compute tz_swing_from_prev = abs(tz_now - tz_prev)
if days >= 14:
type = ANCHOR
elif tz_swing >= 4 and total_transit_days_in_window(14d) >= 3:
type = TRANSIT
else:
type = NEUTRAL
# overlay layer
acute_events = [
('2013-XX-XX', 'cholecystectomy'),
('2020-03-XX', 'covid lockdown'),
('2022-02-XX', 'war / emigration'),
('2025-07-XX', 'strep + 14-city'),
]
for event in acute_events:
mark days within ±14 with overlay=event
HRV baseline timeline 2020-2026 — main chart. epoch shading (anchor/transit/neutral), vertical lines на compound events (Strep, war, ковид), median + IQR ribbon.
recovery score boxplot по epoch type (anchor/transit/neutral) — visual «anchor восстанавливает?»
REM % vs anchor duration scatter — есть ли threshold длительности после которого REM normalize
cross-epoch heatmap — epochs × metrics, z-scored. находит outlier epochs.
что я могу запустить ПРЯМО СЕЙЧАС
два предзаготовительных шага не требуют whoop. могу делать пока ты запускаешь export.
(а) сгенерировать travel_epochs.tsv
ready
epoch skeleton из travel_history.yaml. reusable для любого wearable.
~30 минут agent time
(б) написать tools/whoop_longitudinal_parse.py
ready
argparse, ждёт ZIP path или папку CSV. вся epoch-логика, metric extraction, chart rendering. unit-tested на mock data.
~1.5 часа agent time
caveats и unknowns
algorithm drift: whoop менял HRV алгоритм минимум раз (2023-ish). check release notes. возможно потребуется normalization для cross-period сравнений.
wear-time gaps: некоторые anchor windows могут иметь incomplete wear. flag epochs с <60% coverage и интерпретировать осторожно.
timezone-of-record: whoop иногда стампит в device-tz, иногда в account-tz. при travel может быть mismatch. проверить на 2-3 known TZ swings перед aggregation.
OQ3 scope conditional: если whoop у тебя с 2023 — LA 2020 не разрешается напрямую. это снижает leverage parse'а на ~30%, но не убивает — Bali #1 vs #2 (same geography) даёт сильный proxy для processing × duration question.