Analyser ses données de santé sans les envoyer nulle part
Traiter en local ses exports de montre ou d'application santé, avec anonymisation avant tout partage.
Ce n'est pas un avis médical, et ces données sont parmi les plus sensibles qui existent
Rien de ce qui sort de cette méthode n'est un diagnostic, un pronostic ni une recommandation de santé. Un modèle de langage n'examine personne, ne connaît pas tes antécédents, et produit des phrases plausibles y compris sur des sujets où le plausible est dangereux. Toute question de santé se pose à un professionnel.
Côté données : le rythme cardiaque, le sommeil, le cycle menstruel, le poids, les traces GPS et la prise de médicaments font partie des catégories les plus protégées par le RGPD, précisément parce qu'une fuite est irréversible. On ne révoque pas un historique de santé comme on révoque une clé d'API. Traite tout en local par défaut, et n'envoie à un service distant que ce que tu as volontairement agrégé et anonymisé.
Une montre connectée portée trois ans, c'est plusieurs centaines de milliers de mesures : fréquence cardiaque à la minute, phases de sommeil, séances, poids, pas. Ces données t'appartiennent, les exports existent, et pratiquement personne ne les regarde parce que le format est illisible et que les applications n'affichent que les vues prévues par leur éditeur.
C'est exactement le genre de tâche où un agent est utile : il écrit le code qui lit un XML de 400 Mo, et toi tu récupères des chiffres. Le piège est le réflexe qui consiste à téléverser le fichier dans une conversation pour « qu'il regarde ». Ce fichier contient ton domicile, tes horaires de sommeil, tes absences, et le détail de ce que ton corps a fait chaque jour depuis trois ans.
La bonne architecture est simple : le modèle écrit le code, le code tourne chez toi, et seuls des agrégats sans identifiant remontent, si tu décides d'en faire remonter.
Avant de commencer
- Ton export, téléchargé sur ta machine
- Python avec pandas (
pip install pandas) - Un dossier dédié, exclu de git et de toute sauvegarde partagée
1Récupérer l'export
Les grandes plateformes proposent toutes un export, parce que le droit à la portabilité les y oblige. Le chemin exact change avec les versions d'applications, mais la logique est stable.
Sur iPhone, l'application Santé propose « Exporter toutes les données Santé »
depuis la fiche de profil. Le résultat est une archive .zip contenant des
fichiers XML, un pour l'ensemble des mesures, un autre au format d'échange
clinique. L'export est global : on ne choisit pas les catégories.
Chez les fabricants de montres et les plateformes de sport, l'export se demande
depuis les paramètres du compte, et arrive par courriel après un délai qui va de
quelques heures à quelques jours. On récupère en général un mélange de CSV
récapitulatifs et de fichiers d'activité au format .fit ou .gpx.
Les libellés de menu changent, la doc de l'éditeur fait foi
Les chemins d'accès et les noms de fichiers évoluent d'une version à l'autre et d'une langue à l'autre. Si un guide te donne un chemin précis, considère-le comme une indication et vérifie dans l'application. Ne laisse pas un agent deviner le nom d'un fichier : fais-lui lister le contenu de l'archive.
2Ouvrir le fichier sans le lire toi-même
Un export Apple Santé de plusieurs années dépasse couramment quelques centaines de mégaoctets. Le charger d'un bloc en mémoire est une mauvaise idée, et le coller dans une conversation est impossible autant qu'indésirable.
Le fichier fait [TAILLE]. Ecris un script Python qui le parcourt en
streaming avec xml.etree.ElementTree.iterparse, sans tout charger en
memoire.
Premiere sortie attendue, rien d'autre : la liste des types de mesures
presents, avec pour chacun le nombre d'enregistrements, la date la plus
ancienne et la plus recente.
Ne tire aucune conclusion.
iterparse fait partie de la bibliothèque standard et libère les éléments au
fur et à mesure. Pour les fichiers d'activité, il faut des bibliothèques tierces
selon le format : gpxpy lit le GPX, et plusieurs paquets lisent le format FIT.
Vérifie sur la page officielle du paquet avant d'installer, et préfère celui qui
est encore maintenu.
Cette première sortie sert à savoir ce que tu as. Beaucoup d'exports contiennent des types de mesures que tu ne soupçonnais pas, et des trous de plusieurs mois qui expliqueront ensuite des courbes bizarres.
3Anonymiser avant le moindre envoi
Si tu veux faire commenter un résultat par un service distant, ce n'est pas le fichier qui part, c'est un tableau que tu as construit et relu.
Prepare un extrait a partager. Applique ces regles :
- ne garde que les colonnes necessaires a la question posee ;
- supprime toute coordonnee GPS, altitude et nom de lieu ;
- remplace les dates par un numero de jour relatif au debut de la
periode, et arrondis les horaires a l'heure ;
- supprime les identifiants d'appareil, numeros de serie et versions
logicielles ;
- agrege par semaine, jamais a la mesure individuelle ;
- ecris le nombre de lignes supprimees et pourquoi.
Montre-moi le tableau final avant tout envoi.
Les traces GPS méritent une mention à part. Une sortie de course commence et finit presque toujours devant chez toi, et un semestre de traces donne ton adresse, tes horaires et tes habitudes avec une précision qu'aucun formulaire ne demanderait. Si le sujet n'est pas le parcours, retire complètement la géolocalisation plutôt que de la tronquer.
Pense aussi au dossier : range les exports hors du dépôt de code, ajoute-les à
.gitignore, et si tu utilises un agent qui a accès au disque, interdis-lui
explicitement le dossier plutôt que de compter sur sa discrétion.
4Interdire l'interprétation et la devinette
Deux consignes à poser au début de l'analyse, et à répéter si la conversation dure.
Regles pour cette analyse :
- tu ne poses aucun diagnostic, tu n'evalues aucun risque et tu ne
recommandes rien. Tu decris ce que montrent les chiffres ;
- une absence de mesure n'est pas une valeur nulle. Une nuit sans donnee
n'est pas une nuit sans sommeil, c'est une montre non portee ;
- tout nombre que tu m'annonces vient d'un code execute dont tu me
montres la sortie ;
- si une question demande une donnee que je n'ai pas, dis laquelle
manque au lieu de l'estimer.
La deuxième règle est celle qui fausse le plus de conclusions. Ces séries sont pleines de trous : batterie vide, montre au chargeur, vacances, changement d'appareil. Un remplissage automatique par zéro transforme un capteur absent en performance catastrophique, et un remplissage par la moyenne fabrique une régularité qui n'existe pas.
5Poser des questions que les chiffres peuvent trancher
Les questions descriptives et comparatives se répondent avec du code. Les questions causales ne se répondent pas du tout.
Ce qui marche : « combien de nuits au-dessus de sept heures par mois », « mon rythme cardiaque au repos a-t-il dérivé sur douze mois », « quelle est la part de séances abandonnées avant vingt minutes », « les semaines où j'ai couru plus de trente kilomètres se distinguent-elles sur une autre série ».
Ce qui ne marche pas : « est-ce que courir améliore mon sommeil ». Tu as un échantillon d'une personne, sans groupe de comparaison, avec des dizaines de facteurs non mesurés. Une corrélation trouvée sur ces données est un point de départ pour une question, jamais une réponse.
Pour chaque resultat, ajoute une ligne "ce que ca ne dit pas".
Si tu trouves une correlation, donne aussi deux explications
alternatives qui ne sont pas causales.
Quelques prompts pour aller plus loin
| Objectif | Prompt à adapter |
|---|---|
| Cartographier l'export | Liste les types de mesures presents, leur nombre d'enregistrements, leur unite, et les periodes sans aucune donnee de plus de sept jours. |
| Contrôler la qualité | Signale les valeurs physiologiquement impossibles, les doublons exacts, et les mesures dupliquees par deux appareils sur le meme creneau. |
| Suivre une tendance | Trace la moyenne glissante sur 30 jours de [MESURE], et affiche a cote le nombre de jours reellement mesures par fenetre. |
| Comparer deux périodes | Compare [PERIODE A] et [PERIODE B] sur [MESURE] : moyenne, mediane, ecart-type, nombre de jours mesures. Ne conclus pas sur la cause de l'ecart. |
| Préparer un partage | Produis un tableau agrege par semaine, sans date reelle, sans lieu, sans identifiant d'appareil, et liste ce que tu as retire. |
| Figer l'analyse | Transforme tout ca en un script unique qui prend le chemin de l'archive en argument, tourne hors ligne et n'ecrit ses sorties que dans ./resultats. |
Tu as d’autres ressources comme ça ?
Ce que tu viens de lire est entièrement gratuit. Une nouvelle ressource part chaque semaine dans la newsletter : guides, modèles à copier et liens triés, sans compte à créer.
Me contacter
Une question, un projet, une envie de collaborer ? Écris-moi.
Cette page est en accès libre, n’hésite pas à la partager.