Le fil rouge : les taxis jaunes de New York
Toute la formation travaille sur un seul jeu de données : les courses de taxis jaunes de New York, au format
officiel des « Yellow Taxi Trip Records » de la NYC Taxi & Limousine Commission (TLC). Le dépôt fournit un jeu
synthétique de 120 000 courses sur un mois (janvier 2024), généré par scripts/generate_data.py : mêmes
19 colonnes, mêmes types, mêmes ordres de grandeur que les données réelles, assez petit pour un portable et pour
Git, assez réaliste pour que les résultats aient du sens (JFK et LaGuardia en tête du chiffre d’affaires, pics à
8 h et 18 h, forfait aéroport à 70 $).
Pour travailler sur les données réelles (un mois ≈ 3 millions de courses) :
python scripts/download_official.py --year 2024 --month 1 --rows 300000
Les fichiers
Section intitulée « Les fichiers »| Fichier | Contenu | Utilisé par |
|---|---|---|
data/trips.csv | 120 000 courses, 19 colonnes, 12 Mo – pour les RDD et les comparaisons CSV / Parquet | TP 1, 2, 3, 11 |
data/trips.parquet | Les mêmes courses au format colonne, schéma embarqué, 3,4 Mo | TP 1, 4 à 11 |
data/taxi_zone_lookup.csv | Référentiel public TLC : LocationID → Borough, Zone, service_zone (265 zones) | TP 2, 4, 6, 7, 8, 9 |
stream/courses/, stream/logs/ | Produits par scripts/stream_simulator.py : les courses et les logs arrivent fichier par fichier, comme en production | TP 9, 10, 11 |
Les colonnes qui comptent
Section intitulée « Les colonnes qui comptent »| Colonne | Signification | Index CSV | Rôle dans la formation |
|---|---|---|---|
tpep_pickup_datetime | Date et heure de prise en charge (heure locale, sans fuseau) | 1 | Heure de la course, fenêtres de streaming |
trip_distance | Distance en miles | 4 | Feature principale de la régression |
PULocationID | Zone de départ (1 à 265) | 7 | Clé du top 10, jointure avec les zones |
DOLocationID | Zone d’arrivée | 8 | Arêtes du graphe (GraphFrames) |
RatecodeID | Code tarifaire (1 = standard, 2 = forfait JFK) | 5 | Bonus du TP 6 : la feature métier qui divise l’erreur par deux |
passenger_count | Nombre de passagers | 3 | Feature secondaire |
payment_type | 1 = carte, 2 = espèces | 9 | Filtre du TP 7 : les pourboires en espèces ne sont pas enregistrés |
fare_amount | Tarif au compteur ($) | 10 | Label de la régression (TP 6) |
tip_amount | Pourboire ($) | 13 | Label de la classification : tip_amount > 0 (TP 7) |
total_amount | Montant total payé ($) | 16 | Chiffre d’affaires du top 10 ; fuite si utilisé comme feature |
Les index sont ceux de line.split(",") sur trips.csv, à partir de 0 : les RDD du TP 2 utilisent c[7] et c[16].
Les questions métier, jour par jour
Section intitulée « Les questions métier, jour par jour »| Jour | Question | TP | Réponse attendue |
|---|---|---|---|
| J1 | Quelles zones de New York rapportent le plus ? | 2, 3, 4 | JFK Airport en tête (≈ 261 823 $), puis LaGuardia et Midtown |
| J1 | À quelle heure le chiffre d’affaires est-il maximal ? | 4 | 18 h (≈ 237 600 $), puis 19 h et 17 h |
| J2 | Combien va coûter cette course ? | 6 | Arbre de régression : RMSE ≈ 4,66 $, R² ≈ 0,935 |
| J2 | Ce client laissera-t-il un pourboire ? | 7 | Random Forest : AUC ≈ 0,70 sur les paiements par carte |
| J2 | Quelles familles de courses ? | 8 | 3 familles : courtes du matin, courtes du soir, longues / aéroport |
| J3 | Quel est le chiffre d’affaires par quartier, en direct ? | 9 | Manhattan loin devant, mise à jour toutes les 5 s |
| J3 | Une panne du paiement a-t-elle lieu ? | 10 | Oui : /payment passe de ≈ 1 % à 29–38 % d’erreurs de 8h22 à 8h25 |
| J3 | Le modèle de pourboire tient-il sur le flux ? | 11 | Oui : écart moyen prédit / réel ≈ 0,21 par fenêtre de 30 min |
Pourquoi un fil rouge
Section intitulée « Pourquoi un fil rouge »Plutôt qu’une succession d’exercices « Hello World » déconnectés, un projet unique où le participant monte en autonomie et a le sentiment d’avoir construit quelque chose de bout en bout. Le même jeu de données permet aussi de comparer sans introduire de biais : RDD contre DataFrame (TP 2 et 4), CSV contre Parquet (TP 1 et 11), régression linéaire contre arbre (TP 6), batch contre streaming (TP 9).
Contenu pédagogique © Ambient IT. Données synthétiques générées par scripts/generate_data.py. Les noms de zones
proviennent du référentiel public de la NYC TLC.
Dépôt des participants : formations2026/formation-spark-ml (branche participants)
Contenu pédagogique © Ambient IT · 140 Avenue Jean Lolive, 93500 Pantin · formation@ambient-it.net · +33 (0)1 48 10 09 46
Organisme de formation enregistré sous le numéro 11 75 54743 75. Cet enregistrement ne vaut pas agrément de l'État.