Skip to content

Repository files navigation

Projet Data Engineering - Analyse du Marché Immobilier Français (DVF)

dbt Snowflake Python Streamlit

Vue d'ensemble

Pipeline data engineering end-to-end analysant 9+ millions de transactions immobilières françaises (2020-2023) issues de la base DVF (Demandes de Valeurs Foncières).

Stack technique : Snowflake / dbt Core / Python / Streamlit

Dashboard interactif : projetdvf.streamlit.app


Architecture

┌─────────────┐
│  DVF (txt)  │  2.4 Go — 4 fichiers annuels pipe-delimited
└──────┬──────┘
       │ Python ingestion (load_raw_data.py)
       ▼
┌─────────────┐
│  SNOWFLAKE  │
│     RAW     │  15M+ lignes brutes
└──────┬──────┘
       │ dbt run
       ▼
┌─────────────┐
│   STAGING   │  Nettoyage, typage, IDs synthétiques
│             │  stg_dvf__mutations
└──────┬──────┘
       │
       ▼
┌─────────────┐
│    MARTS    │  Tables analytiques finales
│             │  fct_transactions (5M+ lignes)
│             │  agg_communes (36k communes)
└──────┬──────┘
       │ CSV export
       ▼
┌─────────────┐
│  STREAMLIT  │  Dashboard interactif déployé
│  DASHBOARD  │  projetdvf.streamlit.app
└─────────────┘

Résultats

  • 5M+ transactions résidentielles après nettoyage (maisons et appartements uniquement)
  • 36 000+ communes couvertes sur 4 années (2020-2023)
  • Ramatuelle en tête à 15 000 €/m², Paris 06/07 à 14 000-15 000 €/m²
  • 9 tests qualité automatisés : nulls, unicité, valeurs aberrantes

Pipeline Outputs

Tests qualité dbt

dbt test results

fct_transactions — apercu

fct_transactions sample

agg_communes — top communes par prix/m²

agg_communes top prix


Modeles dbt

Staging

stg_dvf__mutations : union des 4 fichiers annuels, nettoyage des types, gestion des formats français (virgules vers points), génération d'IDs synthétiques pour les lignes sans identifiant.

Marts

fct_transactions : table de faits dédupliquée par mutation (ROW_NUMBER sur identifiant_de_document), filtrée sur les ventes résidentielles uniquement, avec calcul du prix/m² et flags de qualité. Filtres appliqués : 1 000 € < valeur < 50 000 000 €, prix/m² entre 500 et 30 000 €.

agg_communes : KPIs agrégés par commune et année — prix médian, prix/m² médian, volume de transactions, surfaces médianes, répartition maisons/appartements.


Tests de qualité

9 tests dbt couvrant :

  • Nulls sur les colonnes critiques (date_mutation, valeur_fonciere, code_commune)
  • Unicité de l'identifiant de document
  • Valeurs acceptées sur l'année (2020-2023)
  • Cohérence du nombre de transactions
dbt test
Done. PASS=9 WARN=0 ERROR=0 SKIP=0 TOTAL=9

Installation

Prérequis

Python 3.11+
Compte Snowflake
dbt Core 1.11+

Setup

  1. Cloner le repo
git clone https://github.com/Sidi4PF/projet_dvf.git
cd projet_dvf
  1. Environnement Python
python -m venv venv
venv\Scripts\activate
pip install -r requirements.txt
  1. Variables d'environnement — créer un fichier .env à la racine
SNOWFLAKE_ACCOUNT=...
SNOWFLAKE_USER=...
SNOWFLAKE_PASSWORD=...
SNOWFLAKE_DATABASE=DVF_DB
SNOWFLAKE_WAREHOUSE=DVF_WH
SNOWFLAKE_SCHEMA=RAW
  1. Créer les schemas Snowflake
CREATE DATABASE IF NOT EXISTS DVF_DB;
CREATE WAREHOUSE IF NOT EXISTS DVF_WH WITH WAREHOUSE_SIZE = 'XSMALL';
USE DATABASE DVF_DB;
CREATE SCHEMA IF NOT EXISTS RAW;
CREATE SCHEMA IF NOT EXISTS STAGING;
CREATE SCHEMA IF NOT EXISTS MARTS;
  1. Configurer dbt — voir la documentation Snowflake pour ~/.dbt/profiles.yml

  2. Lancer le pipeline

python scripts/load_raw_data.py
cd dvf_project
dbt run
dbt test
  1. Données DVF — télécharger depuis data.gouv.fr et placer dans data/raw/

  2. Dashboard Streamlit (optionnel en local)

pip install -r requirements_streamlit.txt
streamlit run app.py

Structure du projet

projet_dvf/
├── assets/                        # Screenshots pipeline outputs
│   ├── dbt_test_pass.png
│   ├── fct_transactions_sample.png
│   └── agg_communes_top_prix.png
├── data/
│   ├── raw/                       # Fichiers DVF sources (non versionnés)
│   └── processed/                 # CSV exports pour le dashboard
│       ├── fct_transactions_sample.csv
│       └── agg_communes.csv
├── scripts/
│   └── load_raw_data.py           # Ingestion Python vers Snowflake
├── dvf_project/                   # Projet dbt
│   ├── macros/
│   │   └── generate_schema_name.sql
│   ├── models/
│   │   ├── staging/
│   │   │   ├── stg_dvf__mutations.sql
│   │   │   ├── sources.yml
│   │   │   └── schema.yml
│   │   └── marts/
│   │       ├── fct_transactions.sql
│   │       ├── agg_communes.sql
│   │       └── schema.yml
│   ├── dbt_project.yml
│   └── packages.yml
├── app.py                         # Dashboard Streamlit
├── requirements.txt               # Dependances pipeline
├── requirements_streamlit.txt     # Dependances dashboard
├── .gitignore
└── README.md

Stack technique

Technologie Usage
Snowflake Data warehouse cloud
dbt Core Transformations ELT
Python Ingestion des données brutes
pandas Lecture et chargement des fichiers
Streamlit Dashboard interactif déployé
Plotly Visualisations interactives

Source des données

DVF (Demandes de Valeurs Foncières) — Direction Générale des Finances Publiques (DGFiP) Disponible sur data.gouv.fr sous Licence Ouverte Etalab. Période couverte : 2020-2023, format .txt pipe-delimited.


Contact

Sidi Amadou Bocoum

About

Pipeline ELT analysant 9M+ transactions immobilières françaises. Python, Snowflake, dbt Core

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Contributors

Languages