Le contexte
Le diagnostic de performance énergétique (DPE) classe chaque logement de A à G. Depuis la loi Climat et Résilience, les logements les plus énergivores sont progressivement interdits à la location : les logements classés G depuis 2025, F à partir de 2028, E à partir de 2034. Ces « passoires thermiques » sont au cœur des politiques de rénovation, et de plus en plus de la valeur des biens immobiliers.
L’ADEME publie tous les DPE en open data. Mais une API publique ne fait pas une donnée exploitable : il faut la collecter de façon fiable, la nettoyer, la rendre interrogeable et la présenter. C’est ce que fait cette plateforme.
Ce que j’ai construit
- Ingestion : un client Python de l’API de l’ADEME, avec pagination par curseur, réessais automatiques et contrôle de complétude. Il tourne chaque lundi dans GitHub Actions.
- Bronze : une copie fidèle et immuable de la source, pour pouvoir tout recalculer sans réinterroger l’API.
- Silver : chaque DPE est validé et typé, puis stocké en Parquet. Les lignes invalides sont mises en quarantaine, avec la raison du rejet.
- Gold : les indicateurs sont calculés en SQL avec Athena, puis matérialisés en petits fichiers prêts à afficher.
- Dashboard : une application Streamlit publique, qui ne lit que la couche gold.
- Infrastructure : tout est décrit en Terraform, avec un state distant et verrouillé. Aucune ressource n’est créée à la main.
En chiffres
| DPE dans la plateforme | ~973 000 (logements existants et neufs, depuis juin 2026) |
| Volume des couches | bronze 637 Mo → silver 62 Mo → gold moins de 13 Ko |
| DPE localisés par département | 99,999 % |
| Coût AWS mensuel | quelques centimes |
| Clés AWS stockées dans GitHub | aucune |
Les défis, et comment je les ai traités
Sur ce projet, je me suis imposé une règle : ne prendre aucune décision structurante sans mesure pour l’appuyer.
Une API trop lente pour tout charger
En mesurant l’API, j’ai constaté qu’elle était bridée à environ 500 ko/s, pour environ 6 ko par DPE. Charger les 15,6 millions de DPE existants aurait pris plusieurs jours, sans garantie d’aller au bout. J’ai donc séparé les deux usages : l’API pour l’ingestion hebdomadaire, et le fichier complet de l’ADEME (74 Go, téléchargé environ 50 fois plus vite) pour le chargement historique, prévu dans la prochaine version.
47 858 DPE qui auraient disparu sans bruit
Ma fenêtre d’ingestion initiale relisait les 8 derniers jours. En contrôlant les données, j’ai découvert que l’ADEME publie les DPE par lots, jusqu’à 18 jours après leur réception. Avec 8 jours, 47 858 DPE, environ 5 % de la base, auraient été perdus en une seule semaine, sans aucune erreur visible : le pipeline serait resté au vert. J’ai élargi la fenêtre, et ajouté un contrôle qui mesure ce délai à chaque exécution.
Un logement sur dix absent de la carte
Près d’un DPE sur quatre n’est pas géolocalisé à l’adresse par la Base Adresse Nationale, et 11 % n’avaient pas de département. Les exclure aurait introduit un biais géographique. J’ai déduit leur département du code postal saisi par le diagnostiqueur, en traitant les cas particuliers de la Corse et de l’outre-mer, et en gardant la trace de la source de chaque valeur. Résultat : de 96 106 DPE sans département à 9.
Des données brutes, pas des données propres
Les DPE sont saisis à la main par des diagnostiqueurs. Quand 253 DPE ont été rejetés à cause d’années de construction impossibles (2028, par exemple), j’ai choisi d’écarter la valeur aberrante plutôt que le DPE entier : le diagnostic reste exploitable, l’anomalie est comptée, et la valeur d’origine reste disponible.
Une seule clé, réduite au strict minimum
Le pipeline s’authentifie auprès d’AWS sans aucun secret stocké, grâce à l’OIDC, et seulement depuis la branche principale du dépôt. Le dashboard, hébergé hors d’AWS, ne pouvait pas faire de même : j’ai documenté cette exception dans une décision d’architecture, et limité sa clé à la seule lecture des indicateurs. Si elle fuyait, elle ne donnerait accès qu’à des statistiques déjà publiques.
Ce que montrent les données
Sur les 890 000 DPE de logements existants établis depuis juin 2026 :
- 9,9 % sont des passoires (F ou G), et 14,7 % sont classés E, la prochaine échéance d’interdiction de location.
- Les départements les plus touchés sont ruraux et souvent froids : Creuse, Cantal, Haute-Loire, Lozère, Nièvre. Mais Paris figure aussi dans les dix premiers, sous l’effet des petites surfaces.
- Beaucoup de passoires ont pourtant de faibles émissions de gaz à effet de serre : ce sont souvent des logements chauffés à l’électricité et mal isolés. Pour eux, changer de chauffage ne suffit pas, il faut isoler.
- Côté logements neufs, près d’un DPE sur trois a une adresse encore inconnue de la Base Adresse Nationale : une construction neuve n’y figure souvent pas encore.
Ces chiffres décrivent les DPE établis, pas l’ensemble du parc : un DPE n’est réalisé qu’à la vente, à la location ou à la construction.
Qualité, sécurité et coûts
- Une CI obligatoire sur chaque modification : lint, typage strict, tests et couverture minimale. La branche principale est protégée.
- Des contrôles de données à chaque étape : complétude de l’ingestion, réconciliation des volumes entre couches, délai de publication, fraîcheur.
- Le moindre privilège : chaque identité n’a que les droits dont elle a besoin.
- Des garde-fous de coût : budget avec alertes, plafond de volume par requête, expiration automatique des fichiers temporaires.
- Des décisions documentées dans des ADR (Architecture Decision Records), avec leurs alternatives et leurs compromis.
Ce que j’en retiens
- Un pipeline au vert n’est pas un pipeline correct. Les pertes de données les plus graves sont silencieuses : seuls des contrôles explicites les révèlent.
- Mesurer avant de décider. Le débit de l’API, le délai de publication, le taux de géolocalisation : chaque mesure a changé une décision.
- Le coût est une contrainte d’architecture. Choisir des services sans serveur, lire du Parquet plutôt que du JSON, matérialiser de petits agrégats : la plateforme coûte quelques centimes par mois.
Et ensuite
- Chargement historique depuis le fichier complet de l’ADEME, pour remonter à 2021.
- Valeurs foncières (DVF) : rapprocher les DPE des ventes immobilières pour mesurer la « valeur verte » d’un logement.
- Industrialisation : dbt pour les transformations, Databricks et Delta Lake, orchestration avec Airflow.
- IA générative : recommander des travaux de rénovation, en s’appuyant sur les bouquets de travaux proposés dans les DPE.