ГлавнаяБлогСоздание отчётов Apple Health с помощью Python и Gemini
Python

Создание отчётов Apple Health с помощью Python и Gemini

Узнайте, как собрать конвейер для автоматической генерации отчётов Apple Health на Python с Gemini. Практический туториал с кодом.

Al
Редакция Algolitalgolit.ru
10 мин чтения20 июля 2026 г.

Зачем автоматизировать отчёты Apple Health?

Каждый день ваш Apple Watch и iPhone собирают тонны данных: пульс, шаги, сон, активность. Но как превратить эту сырую информацию в полезный отчёт для врача? Вручную смотреть графики — долго и неэффективно. В этой статье мы построим конвейер на Python, который обрабатывает выгрузку Apple Health, вычисляет ключевые метрики и с помощью Gemini формирует структурированное резюме. Вы получите готовый прототип, который можно адаптировать под свои задачи.

Архитектура решения

Конвейер состоит из трёх этапов:

  • Чтение и очистка данных — парсинг XML-экспорта Apple Health.
  • Вычисление метрик — средний пульс, общее количество шагов, часы сна и т.д.
  • Генерация отчёта — передача метрик в Gemini для создания текстового резюме.

Мы используем симулированные данные трёх пациентов, чтобы вы могли запустить код без реальной медицинской информации.

Почему Gemini?

Gemini выбран по практическим причинам:

  • Простая интеграция с Python через API.
  • Бесплатный тариф для MVP.
  • Хороший баланс скорости и качества для текстовых задач.

Важно: Gemini не анализирует сырые записи, а только оформляет уже вычисленные метрики в читаемый текст. Это снижает риск галлюцинаций и сохраняет контроль над расчётами.

Шаг 1: Парсинг данных Apple Health

Apple Health позволяет экспортировать данные в XML. Вот как извлечь записи о пульсе, шагах и сне:

import xml.etree.ElementTree as ET
from datetime import datetime

def parse_health_export(filepath):
    tree = ET.parse(filepath)
    root = tree.getroot()
    records = []
    for record in root.findall('Record'):
        record_type = record.get('type')
        value = record.get('value')
        start_date = datetime.fromisoformat(record.get('startDate'))
        end_date = datetime.fromisoformat(record.get('endDate'))
        records.append({
            'type': record_type,
            'value': float(value) if value else None,
            'start': start_date,
            'end': end_date
        })
    return records

# Пример использования
# records = parse_health_export('export.xml')

Этот код загружает все записи в список словарей. Для реального использования добавьте фильтрацию по типу и обработку ошибок.

Шаг 2: Вычисление метрик

Теперь сгруппируем записи по типу и вычислим средние значения:

def compute_metrics(records):
    metrics = {}
    for rec in records:
        rtype = rec['type']
        if rtype not in metrics:
            metrics[rtype] = []
        metrics[rtype].append(rec['value'])
    
    summary = {}
    for rtype, values in metrics.items():
        values = [v for v in values if v is not None]
        if values:
            summary[rtype] = {
                'mean': sum(values)/len(values),
                'min': min(values),
                'max': max(values),
                'count': len(values)
            }
    return summary

# Пример
# summary = compute_metrics(records)

Для сна можно дополнительно рассчитать общую продолжительность в часах.

Шаг 3: Генерация отчёта с Gemini

Установите библиотеку google-generativeai и настройте API-ключ:

import google.generativeai as genai

genai.configure(api_key='YOUR_API_KEY')
model = genai.GenerativeModel('gemini-1.5-flash')

def generate_report(patient_name, metrics):
    prompt = f"""
    Пациент: {patient_name}
    Метрики за последний месяц:
    - Средний пульс: {metrics.get('HKQuantityTypeIdentifierHeartRate', {}).get('mean', 'Нет данных')} уд/мин
    - Шаги (среднее в день): {metrics.get('HKQuantityTypeIdentifierStepCount', {}).get('mean', 0):.0f}
    - Сон (средняя продолжительность): {metrics.get('HKCategoryTypeIdentifierSleepAnalysis', {}).get('mean', 0):.1f} часов
    
    Напиши краткое резюме для врача на русском языке. Отметь отклонения от нормы.
    """
    response = model.generate_content(prompt)
    return response.text

# Пример
# report = generate_report('Иван Петров', summary)
# print(report)

Промпт можно настроить под свои метрики. Главное — передавать только агрегированные данные, а не сырые записи.

Практический вывод

Вы только что построили конвейер, который автоматически превращает выгрузку Apple Health в структурированный отчёт. Что делать дальше?

  1. Скачайте свой экспорт Apple Health (Настройки → Здоровье → Экспорт).
  2. Запустите код на своих данных (замените симулированные).
  3. Настройте промпт под свои метрики и получите персонализированный отчёт.

Этот прототип — не медицинское устройство, но он показывает, как современные LLM могут упростить анализ персональных данных. Экспериментируйте и адаптируйте под свои нужды!

#Apple Health#Gemini#Python#отчёты#анализ данных
Al
Редакция Algolit

Пишем про алгоритмы, подготовку к собеседованиям и карьеру в IT — так, чтобы было понятно и полезно.

Хочешь закрепить знания на практике?

Решай задачи на Algolit — интерактивная платформа для обучения

Начать бесплатно →