Construire un dashboard de disponibilité des Vélib' dans Superset
Découvrez comment construire un dashboard Superset sur l'historique des Vélib' : vélos disponibles maintenant, rythme de la journée, stations à problèmes et tendances jour après jour
Objectif
Ce guide vous explique comment construire un dashboard Superset sur l'historique des Vélib' : où trouver un vélo maintenant, comment le réseau respire au fil de la journée, quelles stations sont souvent vides ou pleines, et comment chaque journée se compare aux autres.
C'est la deuxième partie de « Collecter chaque heure la disponibilité des Vélib' en SQL ». Superset interroge le Lakehouse via Trino : tout le SQL de cette page est donc en dialecte Trino.
Prérequis
Pour suivre ce guide, vous devez :
- disposer de la table
velib_rawet des cinq vues créées dans « Collecter chaque heure la disponibilité des Vélib' en SQL ». - disposer d'une application Apache Superset connectée à votre projet. Si vous ne l'avez pas encore déployée, suivez le guide « Déployer Apache Superset sur la Data Platform OVHcloud ».
- disposer d'un dataset Superset pour chacune des vues
station_current,network_hourly,station_profileetvelib_daily, créés à l'étape 8 du guide de collecte. - idéalement, disposer d'une semaine de collecte : les graphiques des onglets Daily rhythm et Trends se remplissent au fil des jours.
Ce que vous allez construire
À la fin de cette partie, votre dashboard ressemble à ceci :
Données cartographiques © les contributeurs d'OpenStreetMap. Données Vélib' © Smovengo / Syndicat Autolib' Vélib' Métropole, publiées par la Ville de Paris sous Open Database License (ODbL).
Chaque graphique suit le même chemin dans Superset : Charts > + Chart, choisissez le dataset et le type de graphique, renseignez les paramètres, cliquez sur Create chart, puis sur Save avec le nom du graphique et le dashboard Vélib' availability. Le premier graphique enregistré crée le dashboard ; vous disposez les graphiques dans ses onglets à l'étape 5.
Remarque : vos graphiques ressembleront aux captures, mais pas avec les mêmes valeurs : les chiffres dépendent du moment et de la durée de votre collecte. L'onglet Now est complet dès la première collecte. Les onglets Daily rhythm, Stations et Trends ne prennent une forme semblable que quelques jours plus tard : d'ici là, les courbes sont courtes, les heatmaps ont des cellules vides et les classements bougent encore.
En pratique
Étape 1 : construire l'onglet Now
Ces graphiques utilisent le dataset station_current : une ligne par station, à la dernière collecte.
Chiffres clés
Les quatre tuiles utilisent le type de graphique Big Number.
Valeurs attendues, au moment de la rédaction : environ 19 000 vélos, environ 40 % de vélos électriques, environ 100 stations vides et plus de 1 000 bornes hors service. Les chiffres changent à chaque collecte.
1e0 évite une division entière, qui renverrait 0. Une station fermée n'est pas comptée comme vide, et dans une station fermée toutes les bornes paraissent indisponibles : les deux dernières tuiles ne comptent que les stations ouvertes.
Stations par statut (Stations by status)
La carte montre chaque station, colorée selon son état à la dernière collecte.
Utilisez deck.gl Scatterplot : c'est le seul type de carte qui dessine un point par station avec une couleur par catégorie. MapBox demande une clé Mapbox, donc un compte tiers. Les cartes en grille et en hexagones regroupent les stations dans des cellules, et perdent la station.
Données cartographiques © les contributeurs d'OpenStreetMap.
Stations vides en ce moment (Empty stations right now)
Le tableau donne les détails que la carte ne peut pas afficher dans une infobulle.
Raw records affiche une ligne par station, sans regroupement. Le tri par capacité fait remonter les plus grandes stations vides : elles laissent le plus d'usagers sans vélo.
Le tableau contient autant de lignes que la tuile Empty stations en affiche. Pour chaque station, free_docks plus out_of_service_docks égale capacity : une station vide n'a aucun vélo, donc chaque borne est soit libre, soit hors service.
Étape 2 : construire l'onglet Daily rhythm
Ces graphiques utilisent le dataset network_hourly : une ligne par heure pour tout le réseau. Ils se remplissent au fil de la collecte.
Vélos en station, heure par heure (Bikes in stations, hour by hour)
Le réseau respire : les vélos disponibles baissent quand ils roulent, et reviennent la nuit.
network_hourly contient déjà une ligne par heure : l'agrégat ne regroupe rien, et MAX renvoie la valeur de l'heure. Seule exception : la nuit du passage à l'heure d'hiver, deux heures UTC tombent sur la même heure de Paris, et MAX garde alors la plus haute des deux au lieu de les additionner. Le filtre garde les sept derniers jours, soit 168 points, pour que le graphique reste lisible à mesure que la collecte s'allonge.
Ce graphique montre ce qui s'est réellement passé, jour après jour. Le suivant fait la moyenne de tous les jours en une journée type.
Journée type (Typical day)
La journée moyenne, heure par heure, avec une courbe pour les jours de semaine et une pour le week-end.
L'axe X est l'heure de la journée, de 0 à 23 : toutes les collectes de 8 h sont regroupées, quel que soit le jour, et la moyenne donne le nombre type de vélos disponibles à 8 h. La courbe Weekend apparaît d'elle-même dès que la collecte couvre un samedi.
En semaine, la courbe baisse à l'heure de pointe du matin, vers 9 h, et plus encore à celle du soir, vers 18 h.
Vélos électriques et mécaniques (Electric and mechanical bikes)
Deux courbes, une par type de vélo, pour comparer leurs variations.
La courbe des vélos électriques varie bien plus que celle des mécaniques, entre la nuit et les heures de pointe.
Quand est-il difficile de trouver un vélo ? (When is it hard to find a bike?)
Une heatmap du jour de la semaine en fonction de l'heure, colorée selon la part de stations vides. Les cellules les plus sombres sont les créneaux où il est le plus difficile de trouver un vélo.
La métrique divise les stations vides par les stations ouvertes : la part reste comparable quand quelques stations ferment ou rouvrent. 1e0 évite une division entière.
Triez les deux axes par leur valeur : l'ordre par défaut suit les résultats de la requête, et Metric ascending trierait les heures selon leur part de stations vides. Axis ascending range les heures de 0 à 23, et Axis descending sur l'axe Y place le lundi en haut, comme un calendrier.
En semaine, les cellules les plus sombres arrivent en fin de matinée, entre 9 h et 11 h, avec jusqu'à environ 10 % de stations vides. Les nuits et le week-end sont les plus clairs.
Cela ne contredit pas la journée type, où le moins de vélos sont garés vers 18 h. Le soir, il y a moins de vélos en station, mais le matin, ils sont plus mal répartis : la heatmap suivante montre que les stations pleines ont elles aussi leur pic en fin de matinée. Certaines stations se vident pendant que d'autres se remplissent, et le nombre de stations vides mesure ce déséquilibre, pas le nombre de vélos.
Quand est-il difficile de rendre un vélo ? (When is it hard to return a bike?)
La heatmap miroir : la part de stations ouvertes sans borne libre, où les usagers ne peuvent pas rendre leur vélo.
Le plus rapide est de partir du graphique précédent : changez la métrique, cliquez sur Save, sélectionnez Save as... et saisissez le nouveau nom.
Gardez les mêmes tris que pour la première heatmap, pour que les deux se lisent cellule par cellule. Chaque heatmap a sa propre échelle de couleurs, de son minimum à son maximum : comparez les valeurs, pas seulement les couleurs.
Les stations pleines n'ont pas leur pic aux mêmes heures que les stations vides : les cellules les plus sombres arrivent la nuit en semaine, puis en fin de matinée, avec jusqu'à environ 5,5 % de stations pleines.
Étape 3 : construire l'onglet Stations
Ces graphiques utilisent le dataset station_profile : une ligne par station, sur toute la collecte. Tous trois utilisent le type de graphique Bar Chart, en orientation Horizontal : elle laisse de la place pour les noms.
Les plus souvent vides (Most often empty)
Les dix stations qui passent le plus de temps sans aucun vélo.
station_profile contient déjà une ligne par station : MAX renvoie la part de la station.
Le graphique classe les dix stations selon leur part d'heures sans vélo.
Les plus souvent pleines (Most often full)
Les dix stations où les usagers ne peuvent pas rendre leur vélo, faute de borne libre.
Le plus rapide est de partir du graphique précédent : changez la métrique et le titre de l'axe, cliquez sur Save, sélectionnez Save as... et saisissez le nouveau nom. Le graphique classe les dix stations selon leur part d'heures sans borne libre.
Bornes hors service par commune (Docks out of service by commune)
Une vue de maintenance : où se trouvent les bornes en panne, rapportées au nombre de bornes de chaque commune.
Une part plutôt qu'un nombre de bornes : les communes comptent des nombres de stations très différents, et les plus grandes écraseraient les autres en valeur absolue. Le filtre HAVING s'applique après le regroupement par commune, et écarte les communes de moins de 5 stations, où une seule borne en panne les ferait monter en tête.
Le graphique classe les communes selon leur part de bornes hors service.
Étape 4 : construire l'onglet Trends
Ces graphiques utilisent le dataset velib_daily : une ligne par jour pour tout le réseau. Ils demandent plusieurs jours de collecte.
Heures-stations vides par jour (Empty station-hours per day)
Une barre par jour : le total des heures passées vides par l'ensemble des stations, un indicateur de la difficulté à trouver un vélo ce jour-là.
Seuls les jours complets comptent : un jour avec quelques heures de collecte aurait moins d'heures vides, et ne serait pas comparable. Le seuil de 23 heures plutôt que 24 tolère une heure manquée. La dimension day_type colore différemment la semaine et le week-end : le week-end reste bien en dessous de la semaine.
De nombreux facteurs font varier ces chiffres d'un jour à l'autre : la météo (la pluie et le froid éloignent les usagers du vélo), les vacances scolaires, les jours fériés, les grèves ou perturbations des transports en commun (qui envoient plus d'usagers vers les Vélib') et les grands événements. Un jour férié, comme le 11 novembre, apparaît comme un jour de semaine, mais devrait ressembler à un dimanche. Comparez des jours semblables, et lisez une évolution sur plusieurs jours plutôt que sur une seule barre.
Chiffres quotidiens (Daily figures)
Le tableau complet des chiffres quotidiens, pour lire les valeurs exactes derrière les graphiques.
Contrairement au graphique précédent, le tableau garde les jours incomplets : la colonne observed_hours montre quels jours sont complets, et révèle un jour avec des collectes manquantes. Le premier jour de collecte, qui commence à midi sur la capture, et le jour en cours affichent moins de 24 heures observées.
En semaine, le réseau passe d'environ 20 000 vélos garés la nuit à environ 16 000 à 17 000 à l'heure la plus chargée : quelque 3 000 à 5 000 vélos roulent au pic.
Étape 5 : assembler le dashboard
-
Ouvrez Dashboards, puis le dashboard
Vélib' availability, et cliquez sur Edit dashboard. -
Depuis Layout elements, ajoutez un composant Tabs avec 4 onglets :
Now,Daily rhythm,StationsetTrends. -
Depuis Charts, placez les graphiques dans chaque onglet :
-
Cliquez sur Save.
Ce que vous avez construit
Vous disposez d'un dashboard en quatre onglets qui transforme un historique brut des Vélib' en réponses : où trouver un vélo maintenant, quand le réseau est sous tension, quelles stations font le plus souvent défaut à leurs usagers, et comment chaque journée se compare aux autres.
À partir de là, vous pouvez ajouter des filtres de dashboard sur commune, ou appliquer le même pipeline à une autre API publique qui ne donne qu'un état actuel. Pour un autre dashboard Superset construit sur la Data Platform, consultez « Construire un dashboard des ventes d'une boutique en ligne dans Superset ».
Aller plus loin
Pour une formation ou une assistance technique sur la mise en œuvre de nos solutions, contactez votre commercial ou consultez la page Professional Services pour obtenir un devis et faire analyser votre projet par nos experts.
Posez vos questions, faites-nous part de vos commentaires et interagissez directement avec l’équipe qui développe la Data Platform sur le canal Discord dédié.
Si vous avez besoin d'une assistance concernant vos services OVHcloud, créez une demande depuis notre centre d'aide.
Rejoignez notre communauté d'utilisateurs.