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
- TLC
- Lakehouse
- Staging
- Warehouse
- Power BI
- É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 - É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.
- É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') - É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.
- →La couche de staging contient la table principale
- É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
- 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). - 02Une activité Set Variable définit
v_end_datecommev_dateplus un mois, afin que le pipeline traite la bonne fenêtre temporelle. - 03Une activité Stored Procedure appelle
stg.data_cleaning_stg, en associantv_dateà@start_dateetv_end_dateà@end_date. - 04Par cohérence, l'activité Copy to Staging vide
stg.nyctaxi_yellowavant 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
metadataavec une tableprocessing_logqui 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_dateest mise à jour à partir des dernières données traitées. Une activité Script,Latest_Processed_Data, récupère letpep_pickup_datetimele plus récent (moment où le compteur est enclenché) dansmetadata.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_yellowettaxi_zone_lookuppour 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 dansdbo.nyctaxi_yellow.Le pipeline
pl_processing_nyctaxiexécute ce dataflow, puis appelle la procédure stockéeinsert_presentation_metadatapour journaliser le nombre de lignes, la dernière date de prise en charge et l'heure d'exécution dedbo.nyctaxi_yellow.Pipeline maître
Enfin, un pipeline maître orchestre séquentiellement
pl_stg_processing_nyctaxipuispl_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. - 01Une procédure stockée supprime dynamiquement les données hors de la période traitée. Elle prend deux paramètres :
- Étape 06Gold
Couche de présentation — modèle sémantique
Une fois
dbo.nyctaxi_yellowfinalisé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. - É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