Apple Watch + Apple Health:
полное руководство для исследователя
От нативного экспорта до Python-пайплайнов — как работать с физиологическими данными на любом уровне подготовки.
Что такое Apple Health и как это устроено
Прежде чем работать с данными, важно понять архитектуру системы. Без этого понимания многие вещи будут казаться странными — например, почему данные иногда дублируются, почему пульс фиксируется не каждую секунду или почему файл экспорта весит полгигабайта.
Apple Health — это не просто приложение. Это централизованная база данных физиологической информации, развёрнутая локально на вашем iPhone. Техническое название — HealthKit. Приложение Health, которое вы видите на экране, является лишь пользовательским интерфейсом к этой базе.
Ключевой принцип: данные хранятся на устройстве, а не на серверах Apple. Это означает, что у Apple нет облачного API, через который исследователь мог бы удалённо подключиться и скачать чьи-то данные. Весь доступ происходит только через iPhone конкретного пользователя, с его явного разрешения. При включённой двухфакторной аутентификации даже сама Apple не имеет ключей для расшифровки данных — они защищены сквозным шифрованием.
Как данные попадают в базу: любое устройство или приложение, имеющее разрешение пользователя, может записывать данные в HealthKit. Apple Watch делает это автоматически и непрерывно. Garmin, Oura, Polar и другие устройства — через свои приложения. Пользователь также может вводить данные вручную. Каждая запись содержит четыре обязательных поля: тип данных, числовое значение, единицу измерения и источник — устройство или приложение, которое создало запись.
Модель хранения данных важна для понимания того, что происходит при наличии нескольких устройств. Apple Health не усредняет и не смешивает данные от разных источников — она хранит все записи изолированно. Когда вы запрашиваете суточный итог (например, количество шагов за день), система применяет иерархию приоритетов и выбирает значение от источника с наибольшим приоритетом. По умолчанию Apple Watch стоит выше iPhone, iPhone выше сторонних приложений. Пользователь может изменить этот порядок вручную в настройках раздела «Источники данных».
Это имеет практическое следствие для исследователя: если участник носит одновременно Apple Watch и Garmin, шаги будут записаны дважды, но в суммарную статистику попадут только от приоритетного источника. В сыром экспорте, однако, будут видны обе записи — и это нужно учитывать при очистке данных.
Что на самом деле хранится внутри — природа данных
Это один из самых важных разделов для исследователя. Разница между тем, что вы ожидаете получить, и тем, что реально хранится в Apple Health, может полностью изменить дизайн вашего исследования.
Apple Watch считывает фотоплетизмограмму (PPG) — оптический сигнал отражения зелёного света от кровеносных сосудов — и обрабатывает его с помощью встроенных алгоритмов машинного обучения. В базу данных попадает уже результат: значение пульса в ударах в минуту, а не сам волновой сигнал. То же самое происходит с акселерометром: вместо исходного потока значений ускорения по трём осям в HealthKit записывается количество шагов или факт тренировки.
Для исследователя это означает следующее: вы работаете с обработанными показателями, а не с первичными физиологическими сигналами. Это не делает данные бесполезными — они отлично подходят для трендового анализа, корреляций, наблюдательных исследований и работы с большими выборками. Но если ваша задача — анализировать качество самого сигнала или получать R-R интервалы с миллисекундной точностью, стандартных возможностей HealthKit будет недостаточно.
Каждая запись в базе сопровождается метаданными: источник (название устройства или приложения), идентификатор устройства, временные метки начала и конца замера. Поле sourceName позволяет впоследствии фильтровать данные по конкретному устройству — это важный инструмент очистки.
Совместимые устройства — кто и что пишет в базу
Здесь кроется одна из ключевых ценностей Apple Health для исследователя: это открытая экосистема-агрегатор. Если устройство умеет записывать данные в HealthKit, все описанные в этой инструкции методы работают для него в полном объёме.
Откройте приложение Здоровье → выберите любую метрику (например, Пульс) → прокрутите вниз до раздела «Источники данных и доступ». Там перечислены все устройства и приложения, пишущие данные этого типа. Для чистоты эксперимента определите приоритетный источник и убедитесь, что он стоит первым в списке.
Нативный экспорт (XML)
Бесплатно · Полный архив · Подходит для однократного глубокого извлечения всей истории
Самый простой способ получить все данные — нативный экспорт прямо из приложения Здоровье. Никаких сторонних инструментов, никаких разрешений — просто несколько нажатий.
-
1Откройте приложение Здоровье на iPhone.
-
2Нажмите на свой аватар или инициалы в правом верхнем углу.
-
3Прокрутите вниз до пункта «Экспортировать все данные о здоровье».
-
4Подтвердите действие. Формирование архива займёт от нескольких минут до получаса.
-
5Сохраните файл
export.zipчерез AirDrop, iCloud Drive или отправьте по почте.
Что внутри архива: основной файл — export.xml. Каждая запись выглядит так:
<Record type="HKQuantityTypeIdentifierHeartRate" sourceName="Apple Watch" unit="count/min" startDate="2025-03-15 08:14:22 +0300" value="72"/>
Если данные пришли с Coros или Garmin — поле sourceName будет содержать его название. Структура идентична.
⚠️ Размер файла: от 100 МБ до 1–2 ГБ за несколько лет. Excel такой файл не откроет. Нужен конвертер или код.
Помимо export.xml в архиве: GPX-файлы с GPS-треками тренировок и папка electrocardiograms с данными ЭКГ.
Онлайн-сервис applehealthdata.com — файл обрабатывается локально в браузере, данные никуда не передаются. На выходе — набор CSV-файлов, разбитых по типам данных: отдельный файл для пульса, шагов, сна и так далее.
Приложения-экспортёры
Практичный путь для большинства задач. Работают одинаково для данных из любого источника, синхронизированного с Apple Health.
Поддерживает 150+ метрик. Сохраняет каждый отдельный замер (Individual Samples) — критично для временных рядов. Автоматическая отправка в Dropbox, Google Drive, REST API. Есть версия для macOS.
Выбор конкретных метрик и интервала агрегации. Данные с детализацией до минуты. Удобно для выборочного экспорта без лишнего шума.
Бесплатный минималистичный инструмент. Выбираете показатели → нажимаете «Create Table» → получаете CSV. Нулевой порог входа.
Поддерживает Walking Asymmetry, Six-Minute Walk Test и другие новые метрики. Умеет создавать PDF-отчёты для врача.
Структура итоговой таблицы — одинакова для всех приложений выше:
| Колонка | Что содержит |
|---|---|
| StartDate | Точная временная метка начала замера |
| EndDate | Время окончания замера |
| Value | Числовое значение показателя |
| Unit | Единица измерения — count/min, ms, %, kcal |
| Source | Источник данных: Apple Watch, COROS PACE 3, Garmin Connect… |
| Device | Идентификатор конкретного устройства |
Колонка Source позволяет мгновенно отфильтровать данные по устройству, если в базе несколько источников.
Python и программная обработка
Полный контроль над каждым шагом. Для тех, кто хочет парсить, чистить, строить корреляции, применять статистические модели.
-
1Получите
export.xmlчерез нативный экспорт (Уровень 1). Распакуйте архив.
-
2Установите библиотеки:
pip install pandas lxml matplotlib seaborn
-
3Парсинг XML в DataFrame:
import xml.etree.ElementTree as ET import pandas as pd tree = ET.parse('export.xml') root = tree.getroot() records = [] for record in root.findall('.//Record'): records.append({ 'type': record.get('type'), 'value': record.get('value'), 'unit': record.get('unit'), 'startDate': record.get('startDate'), 'endDate': record.get('endDate'), 'sourceName': record.get('sourceName'), 'device': record.get('device'), }) df = pd.DataFrame(records)
-
4Извлечение конкретной метрики и фильтр по устройству:
hr_df = df[df['type'] == 'HKQuantityTypeIdentifierHeartRate'].copy() hr_df['value'] = pd.to_numeric(hr_df['value']) hr_df['startDate'] = pd.to_datetime(hr_df['startDate']) hr_df = hr_df.sort_values('startDate') # Фильтр по конкретному устройству: hr_df = hr_df[hr_df['sourceName'] == 'Apple Watch'] # или: hr_df = hr_df[hr_df['sourceName'] == 'COROS PACE 3']
-
5Визуализация временного ряда:
import matplotlib.pyplot as plt plt.figure(figsize=(14, 4)) plt.plot(hr_df['startDate'], hr_df['value'], alpha=0.4, linewidth=0.5) plt.title('Heart Rate Time Series — Apple Watch') plt.xlabel('Date') plt.ylabel('BPM') plt.tight_layout() plt.show()
HKQuantityTypeIdentifierHeartRate # пульс (count/min) HKQuantityTypeIdentifierHeartRateVariabilitySDNN # HRV (ms) HKQuantityTypeIdentifierStepCount # шаги HKQuantityTypeIdentifierVO2Max # VO2 max (мл/кг/мин) HKQuantityTypeIdentifierOxygenSaturation # SpO2 (%) HKQuantityTypeIdentifierRespiratoryRate # частота дыхания HKCategoryTypeIdentifierSleepAnalysis # сон (категориальный) HKQuantityTypeIdentifierRestingHeartRate # пульс в покое
import heartpy as hp working_data, measures = hp.process(data, sample_rate=1.0) print('SDNN:', measures['sdnn']) print('RMSSD:', measures['rmssd'])
combined = pd.merge(hr_daily, hrv_daily, on='date') combined = pd.merge(combined, sleep_daily, on='date') print(combined.corr())
Готовые библиотеки
Сырые данные датчиков в реальном времени
Если задача — акселерометр, гироскоп, магнитометр с частотой 50–100 Гц. HealthKit здесь не поможет.
Apple Watch не сохраняет высокочастотные данные датчиков в долгосрочную базу — по соображениям энергопотребления и памяти. Для таких задач существуют специальные приложения.
- Запускается одновременно на iPhone и Apple Watch
- Акселерометр, гироскоп, барометр, магнитометр, GPS, пульс из HealthKit
- Стриминг через HTTP и MQTT в реальном времени по локальной сети
- Экспорт: ZIP CSV, JSON, Excel, KML
- Подходит для биомеханики и кинематики
- Альтернативный инструмент
- Транслирует данные акселерометра с Apple Watch на компьютер по HTTP/TCP
- Колонки AccelerometerX/Y/Z с временными метками
- Подходит для анализа двигательных паттернов
Фоновая запись высокочастотных данных на Apple Watch ограничена системой iOS/watchOS. Длительные сессии (более 1–2 часов) требуют, чтобы экран оставался активным или приложение работало в специальном режиме Workout. Учитывайте это при планировании протокола.
Форматы данных и что с ними делать
Один и тот же файл здоровья может прийти в разных форматах — каждый требует своего подхода.
Обработка данных с помощью ИИ-моделей
CSV-файлы из Apple Health хорошо поддаются анализу с помощью языковых моделей. Это работает, и работает хорошо.
-
1Анализировать корреляции — связь между HRV и качеством сна, между активностью и пульсом покоя.
-
2Находить паттерны и аномалии — скачки пульса, изменения сна после нагрузок, недельные ритмы.
-
3Генерировать статистику — средние, медианы, стандартные отклонения, тренды за период.
-
4Помогать с интерпретацией — объяснять показатели в контексте физиологии.
-
5Писать и отлаживать код — создавать Python-скрипты, если вы не программист.
-
1Не загружайте XML напрямую — конвертируйте в CSV сначала.
-
2Ограничьте период — для анализа в чате достаточно 30–90 дней.
-
3Выбирайте конкретные метрики — не весь архив, только нужные типы данных.
-
4Проверьте конфиденциальность — удалите личные идентификаторы перед загрузкой данных третьих лиц.
Инструменты: Health2AI и AI Health Export конвертируют экспорт в форматы, оптимизированные для загрузки в ChatGPT, Claude или другие языковые модели.
Репозиторий apple-health на GitHub поддерживает интеграцию с локальными моделями через Ollama. Важно для исследований, где данные участников не должны покидать защищённый контур.
-
1Экспортируйте через Health Auto Export в CSV за последние 3 месяца: HeartRate, HRV, SleepAnalysis, StepCount.
-
2Загрузите CSV в диалог с Claude или GPT-4.
-
3Задайте конкретный вопрос: «Покажи корреляцию между ночным HRV и шагами за предыдущий день» или «Найди дни, когда пульс в покое был значительно выше среднего».
-
4Получите анализ и интерпретацию.
⚠️ ИИ-анализ — это разведочный анализ (exploratory analysis), не финальные выводы исследования. Результаты требуют статистического подтверждения.
Очистка и подготовка данных
Типичные проблемы и конкретные решения для каждой из них.
df = df[df['sourceName'] == 'Apple Watch']pd.to_datetime(df['startDate'], utc=True).dt.tz_convert('Europe/Moscow')hr_df = hr_df[(hr_df['value'] >= 30) & (hr_df['value'] <= 220)]Честно об ограничениях
Что Apple не отдаёт и почему это важно знать до начала исследования.
- Нет доступа к сырому PPG-сигналу. Apple Watch измеряет фотоплетизмограмму, но отдаёт только конечный результат — значение пульса в bpm.
- Нет непрерывных R-R интервалов в фоновом режиме. Частично решается через ЭКГ (30 сек вручную) или приложения HRV Logger и Heart Plot. Для полноценного HRV в частотной области — Polar H10.
- Нет серверного API. Данные нужно вытолкнуть с устройства участника вручную или через приложение-автоэкспортёр.
- «Чёрный ящик» алгоритмов. Apple не раскрывает детали расчёта HRV, фаз сна, VO2 max. Алгоритмы меняются с обновлениями watchOS — документируйте версию.
Точность показателей: Пульс в покое ±5 bpm у 89% измерений · ФП: специфичность 0.91 · Шаги при ходьбе: погрешность 2–3% · Калории: погрешность до 30–50% · Фазы сна: 60–70% vs полисомнография · SpO2: ±3–4%
- Наблюдательные исследования
- Трендовый анализ
- Популяционные исследования
- Лонгитюдный мониторинг
- Пилотные проекты
- Скрининг сердечно-сосудистых рисков
- Клиническая диагностика
- Фармакологические испытания
- Высокоточный HRV в частотной области
- Нейрофизиология
- Спортивная наука на элитном уровне
О Garmin — для тех, кому важна открытость. Garmin предоставляет более открытый доступ через Garmin Health API и Connect IQ. Для исследований, где критичен доступ к первичным данным, Garmin нередко удобнее. Apple выигрывает в удобстве для пользователя, но данные остаются в «закрытом саду» — это сознательная позиция платформы.
Сравнительная таблица инструментов
| Задача | Инструмент | Формат | Уровень | ИИ-анализ |
|---|---|---|---|---|
| Быстро получить CSV без кода | Health Auto Export / QS Access | CSV | Начальный | ✓ Да |
| Полный исторический архив | Нативный экспорт + онлайн-конвертер | XML → CSV | Начальный | ⏱ После конвертации |
| Автоматический ежедневный поток | Health Auto Export Premium | CSV / JSON | Средний | ✓ Да |
| Программная обработка, корреляции | Нативный экспорт + Python (pandas) | XML → DataFrame | Продвинутый | ✓ Полный контроль |
| HRV-анализ в частотной области | Python + heartpy + Polar H10 | CSV → обработка | Исследовательский | ~ Частично |
| Сырые данные акселерометра | Sensor Logger / SensorLog | CSV / JSON / HTTP | Исследовательский | ⏱ После экспорта |
| Детальные данные тренировок | FIT-файлы Garmin/Coros + GoldenCheetah | FIT → CSV | Средний | ⏱ После конвертации |
Чек-лист для запуска исследования
Данные с носимых устройств — это не идеальный научный материал по умолчанию. Это богатый, плотный, но зашумлённый поток наблюдений из реальной жизни человека — и именно это делает их ценными. Apple Health предлагает исследователю редкое сочетание: унифицированный доступ к многолетним физиологическим данным, собранным в естественных условиях без лабораторных ограничений. Ключ к работе с этим материалом — понимать, где заканчивается реальный сигнал и начинается алгоритмическая интерпретация.