Tous les projets
01Pipeline batch · Data warehouse

NYC Taxi Analytics

Des millions de courses de taxis jaunes new-yorkais ingérées, nettoyées et modélisées de bout en bout dans Microsoft Fabric, des fichiers Parquet bruts jusqu'au rapport Power BI.

5.97M

courses traitées

$159.5M

de revenus analysés

3

pipelines orchestrés

Plateforme

Microsoft Fabric

Stack

  • Microsoft Fabric
  • Data Factory
  • Lakehouse
  • Data Warehouse
  • Dataflow Gen2
  • T-SQL
  • Power BI

Contexte

Dans le cadre de mon exploration du data engineering, j'ai construit un projet à partir des données ouvertes de la NYC Taxi & Limousine Commission afin de produire un rapport analytique Power BI. Le projet suit un pipeline structuré : ingestion de fichiers Parquet bruts, transformation et stockage dans un data warehouse, puis modélisation et visualisation via un modèle sémantique.

En m'appuyant sur Azure Data Factory pour l'orchestration et sur des procédures stockées pour l'optimisation des requêtes, j'ai conçu un dashboard interactif mettant en lumière les tendances du trafic des taxis à New York.

Architecture de la solution

  1. TLC
  2. Lakehouse
  3. Staging
  4. Warehouse
  5. Power BI
  1. Étape 01Source

    Collecte des données — NYC Taxi & Limousine Commission

    Le projet utilise les TLC Trip Record Data, qui recensent les courses des taxis jaunes de New York. Ces taxis, aussi appelés « medallion taxis », peuvent prendre des passagers dans les cinq arrondissements mais circulent surtout à Manhattan.

    Source — TLC Trip Record Data
  2. Étape 02Atterrissage

    Atterrissage des données — Fabric Lakehouse

    J'ai téléchargé les données disponibles pour 2024 et je les ai chargées dans un lakehouse Fabric, qui sert de couche de stockage où ces fichiers atterrissent.

    • →Les courses des taxis jaunes sont stockées au format Parquet, un fichier par mois.
    • →Une table de correspondance des zones est stockée en CSV et contient les données de référence statiques des zones de taxi.
  3. Étape 03Orchestration

    Ingestion — activité de copie Data Factory

    Une fois les fichiers dans le lakehouse, une activité de copie Data Factory les ingère dans une table de staging du data warehouse. La table des zones est elle aussi chargée en staging comme table statique, traitée une seule fois puis laissée telle quelle.

    Le chemin du fichier est généré dynamiquement à partir de la variable v_date, ce qui permet au pipeline de traiter automatiquement chaque nouveau mois de données :

    Data Factory expression
    @concat('yellow_tripdata_', variables('v_date'), '.parquet')
  4. Étape 04Bronze

    Couche de staging

    • →La couche de staging contient la table principale stg.nyctaxi_yellow, qui stocke les courses.
    • →Elle inclut aussi la table de référence statique stg.taxi_zone_lookup, qui décrit les zones de taxi de New York.
  5. Étape 05Silver

    Nettoyage & transformation — procédures stockées & Dataflow Gen2

    À cette étape, je nettoie et traite les données avant de les déplacer vers la couche de présentation.

    Suppression des données hors période

    1. 01Une procédure stockée supprime dynamiquement les données hors de la période traitée. Elle prend deux paramètres : @start_date (début de période) et @end_date (fin de période).
    2. 02Une activité Set Variable définit v_end_date comme v_date plus un mois, afin que le pipeline traite la bonne fenêtre temporelle.
    3. 03Une activité Stored Procedure appelle stg.data_cleaning_stg, en associant v_date à @start_date et v_end_date à @end_date.
    4. 04Par cohérence, l'activité Copy to Staging vide stg.nyctaxi_yellow avant chaque exécution, pour ne traiter que les données de la période en cours.

    Journalisation des métadonnées

    J'ai créé un schéma metadata avec une table processing_log qui trace chaque exécution du pipeline. Après le nettoyage et la transformation, un enregistrement est inséré avec :

    • →pipeline_run_id — identifiant unique de l'exécution.
    • →table_processed — nom de la table traitée.
    • →rows_processed — nombre de lignes traitées.
    • →latest_processed_pickup — date de prise en charge la plus récente du lot.
    • →processed_datetime — horodatage de l'exécution.

    La logique d'insertion est encapsulée dans une procédure stockée afin que la journalisation s'exécute systématiquement dans le pipeline.

    Fenêtre de traitement auto-incrémentée

    Pour toujours traiter le mois suivant disponible, v_date est mise à jour à partir des dernières données traitées. Une activité Script, Latest_Processed_Data, récupère le tpep_pickup_datetime le plus récent (moment où le compteur est enclenché) dans metadata.processing_log, puis une activité Set Variable y ajoute un mois.

    Le pipeline obtenu, pl_stg_processing_nyctaxi, automatise l'ingestion, le nettoyage et le suivi : il ajuste la période de traitement, alimente le staging, supprime les enregistrements hors période et met à jour la table de métadonnées pour une traçabilité complète.

    Enrichissement avec Dataflow Gen2

    Un Dataflow Gen2 déplace les données nettoyées du staging vers la couche de présentation. Il effectue des jointures gauches entre nyctaxi_yellow et taxi_zone_lookup pour ajouter l'arrondissement et la zone de prise en charge et de dépose, supprime les colonnes inutiles, catégorise les valeurs et charge le résultat dans dbo.nyctaxi_yellow.

    Le pipeline pl_processing_nyctaxi exécute ce dataflow, puis appelle la procédure stockée insert_presentation_metadata pour journaliser le nombre de lignes, la dernière date de prise en charge et l'heure d'exécution de dbo.nyctaxi_yellow.

    Pipeline maître

    Enfin, un pipeline maître orchestre séquentiellement pl_stg_processing_nyctaxi puis pl_processing_nyctaxi : le staging s'exécute d'abord, suivi de la transformation et du chargement dans la couche de présentation. Cela garantit la cohérence des données et une automatisation de bout en bout.

  6. Étape 06Gold

    Couche de présentation — modèle sémantique

    Une fois dbo.nyctaxi_yellow finalisée, j'ai construit un modèle sémantique qui structure et optimise les données pour Power BI, avec des relations et des mesures calculées pour des requêtes efficaces.

  7. Étape 07Restitution

    Rapport Power BI

    Le rapport analyse la performance des taxis jaunes avec des indicateurs clés : revenu total, nombre de courses et de passagers. Des filtres interactifs permettent d'explorer les tendances par moyen de paiement, opérateur et arrondissement de prise en charge ou de dépose.

Synthèse

Ce projet montre ce que Microsoft Fabric permet en data engineering et en BI, en combinant pipelines, dataflows, procédures stockées, scripts et modélisation sémantique. Les données brutes des taxis jaunes sont ingérées, nettoyées, enrichies et stockées dans une couche de présentation, puis modélisées pour un dashboard Power BI couvrant revenus, volume de courses et répartition des passagers.

L'automatisation est présente à chaque étape : les pipelines orchestrent l'ingestion, la transformation et le chargement, tandis que la journalisation des métadonnées garantit la traçabilité. Le résultat est un flux fiable, peu coûteux à maintenir, qui garde les analyses à jour.

Projet suivant · 02

Global Earthquake Monitor

Ingestion API · Lakehouse Medallion