Convertir en CSV les données Santé de l’iPhone : ce qu’enregistre HealthKit et comment utiliser HealthKit Parser

Votre iPhone et votre Apple Watch enregistrent automatiquement, chaque jour, votre fréquence cardiaque, vos pas, votre sommeil, votre oxygène sanguin et bien plus. Au bout de quelques années, cela représente des millions d’enregistrements : des données réelles, sur le long terme, difficiles à obtenir autrement et précieuses pour la recherche et le développement.

Seul problème : l’app Santé les exporte dans un unique fichier XML énorme, parfois de plus de 1 Go, qu’Excel et la plupart des outils ne peuvent pas ouvrir tel quel. Cet article présente les données qu’enregistre HealthKit et explique comment les convertir en CSV pour les analyser avec l’app Mac HealthKit Parser.

Qu’est-ce que HealthKit ?

HealthKit est le système d’Apple qui stocke les données de santé sur l’iPhone. En plus de ce que mesurent automatiquement l’iPhone et l’Apple Watch, il rassemble les données écrites par d’autres apps : balances, tensiomètres, apps de suivi du sommeil ou de l’alimentation, etc. L’app Santé permet de consulter tout cela.

Pour lire les données de HealthKit, les autres apps doivent obtenir votre autorisation pour chaque type de donnée. Vous pourriez créer votre propre app pour les lire directement, mais si vous voulez simplement récupérer tous vos enregistrements, l’exportation de l’app Santé est de loin la solution la plus simple.

Les données qu’enregistre HealthKit

Chaque type de donnée HealthKit possède un identifiant, comme HKQuantityTypeIdentifierHeartRate (fréquence cardiaque). Cet identifiant apparaît tel quel dans l’export et dans la colonne type du CSV créé par HealthKit Parser. Voici les principaux, regroupés à peu près comme dans l’app Santé.

L’« unité » est celle qui figure dans l’export ; elle peut changer selon les réglages de l’iPhone (km ou mi, par exemple). « Généralement enregistré par » indique à titre indicatif d’où viennent le plus souvent les données.

Activité

DonnéeValeur de la colonne typeUnité (exemple)Généralement enregistré par
PasHKQuantityTypeIdentifierStepCountcountiPhone, Apple Watch
Distance de marche et de courseHKQuantityTypeIdentifierDistanceWalkingRunningkmiPhone, Apple Watch
Étages montésHKQuantityTypeIdentifierFlightsClimbedcountiPhone, Apple Watch
Énergie activeHKQuantityTypeIdentifierActiveEnergyBurnedkcalApple Watch
Énergie au reposHKQuantityTypeIdentifierBasalEnergyBurnedkcalApple Watch
Minutes d’exerciceHKQuantityTypeIdentifierAppleExerciseTimeminApple Watch
Minutes deboutHKQuantityTypeIdentifierAppleStandTimeminApple Watch
Heures deboutHKCategoryTypeIdentifierAppleStandHour—Apple Watch
Effort physiqueHKQuantityTypeIdentifierPhysicalEffortkcal/hr·kgApple Watch
Forme cardio (VO2 max)HKQuantityTypeIdentifierVO2MaxmL/min·kgApple Watch
Temps passé à la lumière du jourHKQuantityTypeIdentifierTimeInDaylightminApple Watch
Distance à véloHKQuantityTypeIdentifierDistanceCyclingkmApple Watch, Autres apps et appareils
Distance de nage, mouvements de brasHKQuantityTypeIdentifierDistanceSwimming
HKQuantityTypeIdentifierSwimmingStrokeCount
m, countApple Watch
Vitesse, puissance, longueur de foulée, oscillation verticale et temps de contact au sol en courseHKQuantityTypeIdentifierRunningSpeed
HKQuantityTypeIdentifierRunningPower
HKQuantityTypeIdentifierRunningStrideLength
HKQuantityTypeIdentifierRunningVerticalOscillation
HKQuantityTypeIdentifierRunningGroundContactTime
W, m, cm, ms …Apple Watch
Effort de l’entraînement (estimé)HKQuantityTypeIdentifierEstimatedWorkoutEffortScoreappleEffortScoreApple Watch

Cœur

DonnéeValeur de la colonne typeUnité (exemple)Généralement enregistré par
Fréquence cardiaqueHKQuantityTypeIdentifierHeartRatecount/minApple Watch
Fréquence cardiaque au reposHKQuantityTypeIdentifierRestingHeartRatecount/minApple Watch
Fréquence cardiaque moyenne en marcheHKQuantityTypeIdentifierWalkingHeartRateAveragecount/minApple Watch
Variabilité de la fréquence cardiaqueHKQuantityTypeIdentifierHeartRateVariabilitySDNNmsApple Watch
Récupération cardiaque (1 minute)HKQuantityTypeIdentifierHeartRateRecoveryOneMinutecount/minApple Watch
Historique de fibrillation auriculaireHKQuantityTypeIdentifierAtrialFibrillationBurden%Apple Watch
Notifications de fréquence cardiaque élevée, basse et de rythme irrégulierHKCategoryTypeIdentifierHighHeartRateEvent
HKCategoryTypeIdentifierLowHeartRateEvent
HKCategoryTypeIdentifierIrregularHeartRhythmEvent
—Apple Watch

Respiration

DonnéeValeur de la colonne typeUnité (exemple)Généralement enregistré par
Fréquence respiratoireHKQuantityTypeIdentifierRespiratoryRatecount/minApple Watch
Oxygène sanguinHKQuantityTypeIdentifierOxygenSaturation%Apple Watch
Troubles respiratoiresHKQuantityTypeIdentifierAppleSleepingBreathingDisturbancescountApple Watch
Notifications d’apnée du sommeilHKCategoryTypeIdentifierSleepApneaEvent—Apple Watch

Sommeil

DonnéeValeur de la colonne typeUnité (exemple)Généralement enregistré par
Sommeil (au lit, essentiel, profond, paradoxal, éveillé)HKCategoryTypeIdentifierSleepAnalysis—Apple Watch, iPhone, Autres apps et appareils
Température du poignet pendant le sommeilHKQuantityTypeIdentifierAppleSleepingWristTemperaturedegCApple Watch
Objectif de durée de sommeilHKDataTypeSleepDurationGoalhrApp Santé

Mobilité

DonnéeValeur de la colonne typeUnité (exemple)Généralement enregistré par
Vitesse de marcheHKQuantityTypeIdentifierWalkingSpeedkm/hriPhone
Longueur du pasHKQuantityTypeIdentifierWalkingStepLengthcmiPhone
Asymétrie de la marcheHKQuantityTypeIdentifierWalkingAsymmetryPercentage%iPhone
Temps de double appuiHKQuantityTypeIdentifierWalkingDoubleSupportPercentage%iPhone
Stabilité de la marcheHKQuantityTypeIdentifierAppleWalkingSteadiness%iPhone
Vitesse dans les escaliers (montée, descente)HKQuantityTypeIdentifierStairAscentSpeed
HKQuantityTypeIdentifierStairDescentSpeed
m/siPhone, Apple Watch
Test de marche de six minutes (estimé)HKQuantityTypeIdentifierSixMinuteWalkTestDistancemiPhone

Audition

DonnéeValeur de la colonne typeUnité (exemple)Généralement enregistré par
Niveaux sonores ambiantsHKQuantityTypeIdentifierEnvironmentalAudioExposuredBASPLApple Watch
Niveaux sonores du casqueHKQuantityTypeIdentifierHeadphoneAudioExposuredBASPLiPhone
Notifications d’environnement bruyantHKCategoryTypeIdentifierAudioExposureEvent—Apple Watch

Mensurations

DonnéeValeur de la colonne typeUnité (exemple)Généralement enregistré par
TailleHKQuantityTypeIdentifierHeightcmSaisie manuelle, Autres apps et appareils
PoidsHKQuantityTypeIdentifierBodyMasskgAutres apps et appareils, Saisie manuelle
Indice de masse corporelle (IMC)HKQuantityTypeIdentifierBodyMassIndexcountAutres apps et appareils, Saisie manuelle
Pourcentage de graisse corporelleHKQuantityTypeIdentifierBodyFatPercentage%Autres apps et appareils, Saisie manuelle
Masse maigreHKQuantityTypeIdentifierLeanBodyMasskgAutres apps et appareils, Saisie manuelle
Tour de tailleHKQuantityTypeIdentifierWaistCircumferencecmSaisie manuelle

Signes vitaux

DonnéeValeur de la colonne typeUnité (exemple)Généralement enregistré par
Tension artérielle (systolique, diastolique)HKQuantityTypeIdentifierBloodPressureSystolic
HKQuantityTypeIdentifierBloodPressureDiastolic
mmHgAutres apps et appareils, Saisie manuelle
Température corporelleHKQuantityTypeIdentifierBodyTemperaturedegCAutres apps et appareils, Saisie manuelle
Température basaleHKQuantityTypeIdentifierBasalBodyTemperaturedegCAutres apps et appareils, Saisie manuelle
GlycémieHKQuantityTypeIdentifierBloodGlucosemg/dLAutres apps et appareils, Saisie manuelle

Nutrition

DonnéeValeur de la colonne typeUnité (exemple)Généralement enregistré par
Énergie alimentaire, protéines, lipides, glucidesHKQuantityTypeIdentifierDietaryEnergyConsumed
HKQuantityTypeIdentifierDietaryProtein
HKQuantityTypeIdentifierDietaryFatTotal
HKQuantityTypeIdentifierDietaryCarbohydrates
kcal, gAutres apps et appareils, Saisie manuelle
Eau, caféineHKQuantityTypeIdentifierDietaryWater
HKQuantityTypeIdentifierDietaryCaffeine
mL, mgAutres apps et appareils, Saisie manuelle
Fibres, vitamines, minéraux, etc. (plus de 30 types)HKQuantityTypeIdentifierDietaryFiber
HKQuantityTypeIdentifierDietaryVitaminC
…
g, mg, µg …Autres apps et appareils, Saisie manuelle

Autres

DonnéeValeur de la colonne typeUnité (exemple)Généralement enregistré par
Minutes de pleine conscienceHKCategoryTypeIdentifierMindfulSession—Apple Watch, Autres apps et appareils
Lavage des mainsHKCategoryTypeIdentifierHandwashingEvent—Apple Watch
Brossage des dentsHKCategoryTypeIdentifierToothbrushingEvent—Autres apps et appareils
Nombre de chutesHKQuantityTypeIdentifierNumberOfTimesFallencountApple Watch
Suivi du cycle (règles, etc.)HKCategoryTypeIdentifierMenstrualFlow
…
—Saisie manuelle, Autres apps et appareils
Symptômes (maux de tête, fièvre, toux, etc.)HKCategoryTypeIdentifierHeadache
HKCategoryTypeIdentifierFever
HKCategoryTypeIdentifierCoughing
…
—Saisie manuelle
Indice UVHKQuantityTypeIdentifierUVExposurecountAutres apps et appareils

Les lignes dont l’unité est « — » sont des données de catégorie : la colonne value contient une catégorie comme HKCategoryValueSleepAnalysisAsleepCore (sommeil essentiel).

Au total, HealthKit compte bien plus de 100 types de données, dont les résultats de tests auditifs et les vitesses pendant les entraînements. Ceux que vous avez dépendent de vos appareils et de vos apps. L’export de l’auteur, qui couvre environ neuf ans (2017–2026), contenait 42 types et environ 3,08 millions d’enregistrements. Les plus nombreux étaient l’énergie active et la fréquence cardiaque de l’Apple Watch, avec environ 700 000 enregistrements chacun.

Exporter vos données Santé sur l’iPhone

  1. Ouvrez l’app Santé sur votre iPhone et touchez l’icône de votre profil en haut à droite.
  2. Tout en bas, touchez « Exporter toutes les données de santé », puis touchez « Exporter » pour confirmer. S’il y a beaucoup de données, cela peut prendre quelques minutes.
  3. Lorsque la feuille de partage s’affiche, envoyez le fichier sur votre Mac avec AirDrop, ou enregistrez-le dans Fichiers puis transférez-le sur votre Mac.
  4. Sur votre Mac, double-cliquez sur le fichier zip pour le décompresser.

Vous obtenez un dossier nommé apple_health_export, qui contient :

  • export.xml: Tous vos enregistrements. C’est le fichier que lit HealthKit Parser
  • export_cda.xml: Des enregistrements au format HL7 CDA, une norme pour les documents cliniques
  • electrocardiograms: Les ECG enregistrés avec l’Apple Watch (CSV)
  • workout-routes: Les itinéraires des entraînements (GPX)

Le convertir en CSV avec HealthKit Parser

HealthKit Parser est une app Mac qui lit export.xml et écrit les enregistrements dans un fichier CSV. Tout se fait sur votre Mac ; vos données ne sont envoyées nulle part.

1. Importer export.xml

Au lancement de HealthKit Parser, la fenêtre d’un nouveau document s’ouvre. Cliquez sur « Import XML » dans la barre d’outils et choisissez export.xml dans le dossier décompressé.

Choisissez export.xml dans le dossier décompressé
Choisissez export.xml dans le dossier décompressé

L’importation prend un moment. L’export.xml de 1,4 Go de l’auteur (environ 3,08 millions d’enregistrements) a pris environ 14 minutes sur un MacBook Pro (M4). Tant qu’elle n’est pas terminée, « Parsing XML… » s’affiche en bas à droite de la fenêtre.

2. Vérifier les types de données et leur nombre

Une fois l’importation terminée, la fenêtre affiche la période couverte (début et fin), le nombre d’enregistrements et tous les types de données avec leur nombre. Vous pouvez ajouter un titre et des notes.

La période, le nombre d’enregistrements et le nombre pour chaque type de donnée
La période, le nombre d’enregistrements et le nombre pour chaque type de donnée

Si vous enregistrez le document, il s’ouvrira instantanément la prochaine fois, sans réimporter export.xml. C’est pratique pour exporter différentes périodes à plusieurs reprises.

3. Exporter en CSV

Cliquez sur « Export CSV » dans la barre d’outils, choisissez la période et les types de données, puis cliquez sur « Export ». Laissez « All Time » (toute la période) ou limitez-la avec une date de début et une date de fin.

Choisissez la période et les types de données à exporter
Choisissez la période et les types de données à exporter

Vous pouvez exporter tous les types d’un coup, mais avec des millions d’enregistrements le CSV devient volumineux. En ne choisissant que les types utiles, il sera bien plus facile à manipuler.

Le contenu du CSV

Chaque ligne correspond à un enregistrement, avec les colonnes suivantes :

ColonneContenu
typeLe type de donnée (les identifiants des tableaux ci-dessus)
unitUnité
valueLa valeur. Pour le sommeil et les autres données de catégorie, un texte
start, endDébut et fin de l’enregistrement, à la minute près, au format des réglages « Langue et région » du Mac
start_UT, end_UTDébut et fin de l’enregistrement en temps Unix (secondes)
creation, creation_UTLe moment où l’enregistrement a été ajouté à HealthKit, et le même en temps Unix
deviceL’appareil qui l’a enregistré (modèle, version du logiciel)
source name, source versionL’app ou l’appareil qui l’a enregistré, et sa version

Voici un exemple de fréquence cardiaque au repos exportée (quelques colonnes seulement) :

typeunitvaluestart_UTend_UT
HKQuantityTypeIdentifierRestingHeartRatecount/min631791559483.01791640198.0
HKQuantityTypeIdentifierRestingHeartRatecount/min631791645830.01791714436.0
HKQuantityTypeIdentifierRestingHeartRatecount/min581791737624.01791765440.0

Les colonnes _UT (temps Unix)

Les colonnes qui se terminent par _UT donnent la date et l’heure en temps Unix : le nombre de secondes écoulées depuis le 1er janvier 1970 à 00:00:00 UTC. Le temps Unix ne dépend pas des fuseaux horaires.

  • L’ordre et l’espacement des enregistrements restent justes, même si vous voyagez d’un fuseau horaire à l’autre
  • Une simple soustraction donne la durée d’un intervalle (en secondes), par exemple une phase de sommeil
  • Il est précis à la seconde (les colonnes comme start s’arrêtent à la minute)
  • Il se croise facilement avec les données d’équipements de laboratoire et d’autres capteurs
  • Vous pouvez le convertir dans n’importe quel fuseau horaire pour l’afficher

En Python (pandas), vous pouvez le lire ainsi. La ligne d’en-tête comporte une espace après chaque virgule : ajoutez donc skipinitialspace=True.

import pandas as pd

df = pd.read_csv("resting_heart_rate.csv", skipinitialspace=True)

# Temps Unix → date et heure (UTC) → heure locale
df["start_local"] = (pd.to_datetime(df["start_UT"], unit="s", utc=True)
                     .dt.tz_convert("Europe/Paris"))

# Durée de chaque intervalle (secondes)
df["seconds"] = df["end_UT"] - df["start_UT"]

Dans Excel, =E2/86400+DATE(1970;1;1) avec un format de cellule date et heure donne la date et l’heure UTC (si la colonne E est start_UT). Pour l’heure locale, ajoutez le décalage par rapport à UTC divisé par 24 — par exemple 1/24 pour Paris en hiver.

Conseils pour l’analyse

  • Certaines données se recoupent : Si vous utilisez l’iPhone et l’Apple Watch, les pas et la distance sont enregistrés par les deux. L’app Santé supprime les doublons à l’affichage, mais l’export contient les deux. Avant d’additionner, filtrez sur la colonne source name ou device.
  • Les pourcentages vont de 0 à 1 : Les données dont l’unité est % (oxygène sanguin, pourcentage de graisse corporelle, asymétrie de la marche, etc.) sont stockées sous la forme 0.97 pour 97 %.
  • Vérifiez les unités : Les unités peuvent changer selon les réglages de l’iPhone. Vérifiez la colonne unit avant de calculer.
  • Données de catégorie : une ligne par intervalle : Pour le sommeil, la colonne value contient HKCategoryValueSleepAnalysisAsleepCore (essentiel), …AsleepDeep (profond), …AsleepREM (paradoxal), …Awake (éveillé), etc., et chaque ligne est un intervalle. Sa durée est end_UT − start_UT.
  • Si vous traitez les données d’autres personnes : Les données de santé sont des informations personnelles très sensibles. Si vous utilisez les données de participants dans une recherche, suivez les procédures d’examen éthique et de consentement de votre établissement.

Ce que le CSV ne contient pas

HealthKit Parser convertit les enregistrements individuels de export.xml. Les résumés des entraînements (type d’activité, durée, distance totale, etc.), les totaux quotidiens des anneaux Activité et les informations de profil comme la date de naissance ou le groupe sanguin ne sont pas inclus. La fréquence cardiaque, la distance et l’énergie enregistrées pendant les entraînements sont, elles, incluses en tant qu’enregistrements individuels.

Les ECG et les itinéraires des entraînements se trouvent déjà dans le dossier décompressé, sous forme de fichiers CSV et GPX prêts à l’emploi.

En résumé

Une fois exportés et convertis en CSV, les enregistrements de l’iPhone et de l’Apple Watch peuvent être analysés librement dans Excel, R, Python, etc. Les colonnes _UT vous permettent de les combiner avec d’autres données sans vous soucier des fuseaux horaires.

HealthKit Parser est vendu en achat unique sur le Mac App Store (macOS 12 ou version ultérieure). Il n’y a pas d’abonnement.

→ En savoir plus sur HealthKit Parser

→ Voir sur le Mac App Store

Plus d’articles sur HealthKit Parser