Aller au contenu
Bienvenu Natchia BUILD DATA SYSTEMS
← Projets
V1 en production Projet personnel Mis à jour le

Une plateforme de données sur AWS pour suivre les passoires thermiques

Une plateforme qui collecte chaque semaine les diagnostics de performance énergétique (DPE) publiés par l'ADEME, les fait passer par des couches bronze, silver et gold sur AWS, et les expose dans un dashboard public sur les passoires thermiques. Entièrement automatisée, sans aucune clé AWS stockée, pour quelques centimes par mois.

Outils utilisés

  • Python
  • pydantic
  • httpx
  • pyarrow
  • boto3
  • pytest
  • Amazon S3
  • AWS Glue Data Catalog
  • Amazon Athena
  • AWS IAM (OIDC)
  • Terraform
  • GitHub Actions
  • Streamlit

Prévus

  • dbt
  • Databricks
  • Delta Lake
  • Airflow

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

API ADEME open data
chaque lundi
Bronze donnée brute
validation
Silver donnée typée
Athena SQL
Gold indicateurs
Dashboard Streamlit
Le flux de la plateforme : collecte hebdomadaire, couches bronze, silver et gold, puis dashboard.
  • 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 couchesbronze 637 Mo → silver 62 Mo → gold moins de 13 Ko
DPE localisés par département99,999 %
Coût AWS mensuelquelques centimes
Clés AWS stockées dans GitHubaucune

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.

Liens

Besoin d'un Data Engineer ?

Discutons de votre projet et de la meilleure façon de valoriser vos données.