Open data DPE et Audit énergétique
Bases des diagnostics de performance énergétique (DPE) et des audits énergétiques réglementaires, anonymisées, interrogeables en SQL avec DuckDB depuis DBeaver, la ligne de commande ou Python. Aucun compte ni clé n'est nécessaire.
1. Mise en place (une seule fois)
Les lignes SQL à exécuter, quel que soit l'outil, dans une base nommée opendata.duckdb :
ATTACH 'https://s3.fr-par.scw.cloud/prod-dpe-opendata/audit/audit.duckdb' AS src_audit (READ_ONLY); ATTACH 'https://s3.fr-par.scw.cloud/prod-dpe-opendata/dpe/dpe.duckdb' AS src_dpe (READ_ONLY); COPY FROM DATABASE src_audit TO opendata; COPY FROM DATABASE src_dpe TO opendata; DETACH DATABASE IF EXISTS src_audit; DETACH DATABASE IF EXISTS src_dpe;
Avec DBeaver
- Menu Base de données > Nouvelle connexion > DuckDB > Suivant.
- À droite du champ Path, cliquer sur Create ..., choisir un dossier et saisir le nom du fichier :
opendata.duckdb. - Accepter le téléchargement du pilote DuckDB s'il est proposé, puis Terminer.
- Clic droit sur la connexion > Editeur SQL > Script SQL.
- Coller les lignes ci-dessus, puis cliquer sur Exécuter le script SQL dans la barre d'outils de l'éditeur.
- Clic droit sur la connexion > Rafraîchir. Les tables apparaissent dans
main> Vues.
En ligne de commande
Installer DuckDB : duckdb.org/docs/installation, puis ouvrir la base et coller les lignes ci-dessus :
duckdb opendata.duckdb
En Python
pip install duckdb
import duckdb
con = duckdb.connect("opendata.duckdb")
for base in ("audit", "dpe"):
con.execute(f"ATTACH 'https://s3.fr-par.scw.cloud/prod-dpe-opendata/{base}/{base}.duckdb' AS src_{base} (READ_ONLY)")
con.execute(f"COPY FROM DATABASE src_{base} TO opendata")
con.execute(f"DETACH DATABASE IF EXISTS src_{base}")2. Interroger
Les tables s'interrogent comme dans une base classique. Sélectionner les colonnes utiles plutôt que SELECT *.
DPE
-- nombre de DPE par département SELECT ban_departement, count(*) AS dpe FROM dpe_t_adresse GROUP BY 1 ORDER BY 2 DESC; -- nombre de DPE par énergie de chauffage principale SELECT e.lib AS energie_chauffage, count(*) AS dpe FROM dpe d JOIN dpe_enum_type_energie e ON e.id = d.enum_type_energie_chauffage_principal_id GROUP BY 1 ORDER BY 2 DESC;
Audit énergétique
-- nombre d'audits par année d'établissement SELECT year(date_etablissement_audit) AS annee, count(*) AS audits FROM audit GROUP BY 1 ORDER BY 1; -- jointure avec un référentiel SELECT e.lib AS derogation, count(*) AS audits FROM audit_administratif a JOIN audit_enum_derogation_technique e ON e.id = a.enum_derogation_technique_id GROUP BY 1 ORDER BY 2 DESC;
Les tables *_enum_* et *_tv_* sont les référentiels : elles donnent le libellé des codes utilisés dans les autres tables.
Si de nouvelles tables apparaissent : fermer la connexion, supprimer le fichier opendata.duckdb, puis refaire la mise en place.
3. Vérifier que tout fonctionne
SELECT count(*) FROM audit; -- nombre d'audits publiés SELECT count(*) FROM dpe; -- nombre de DPE publiés