Le blog de nlehuby

nov. 02, 2015

Les données horaires du STIF en opendata !

Une discussion, autour d'une bière, avec un acolyte néophyte

Moi : T'as vu, le STIF ouvre ses données ?!
Lui : ah
Moi : Ben c'est cool, on va enfin avoir des bonnes données transport en opendata sur toute l'île-de-France !
Lui : ah, ouais, ça a l'air cool ... (Bois) Mais attend, on n'a pas déjà eu cette conversation il y a trois ans ?
Moi : ah non, ça c'était quand la RATP ouvrait ses données.
Lui : Ah. C'est pas pareil ?
Moi : Ah ben non, noob !
Lui : c'est quoi le STIF au fait ?
Moi : le STIF, Syndicat des Transports d'Île-de-France, c'est notre autorité organisatrice de transports. C'est le STIF qui organise tout le transports public, définit l'offre et la qualité de service attendue de la part des transporteurs, gère la modernisation du réseau, fixe les tarifs, ...
Lui : Ah bon, c'est pas la RATP qui décide des tarifs ?! Je suis sûre d'avoir déjà lu ou entendu "la RATP augmente le prix du pass navigo"
Moi : Et oui ! Mais c'est oublier qu'il n'y a pas que le RATP en Île-de-France ! C'est grâce au STIF qu'on peut traverser toute la région d'un bout à l'autre avec le même titre de transport, qu'on pourra acheter aussi bien à une borne RATP, à un guichet Transilien ou dans un bus de banlieue
Lui : Ok, mais  la RATP, c'est quand même le principal transporteur, ils ont les métro, tous les bus dans Paris, et tous les bus qui vont en banlieue comme chez moi ... ... ça fait vraiment une différence d'avoir les données du STIF en plus de celles de la RATP ?
Moi : En terme d'horaires et de passagers transportés, c'est clair. Mais pas en terme d'arrêts desservis et de kilomètres parcourus. Les arrêts RATP, ça fait moins de 30% des arrêts d'Île-de-France !
Lui : ah bon, mais c'est qui les autres ? Transilien, ça ne fait pas tant d'arrêts que ça ?
Moi : OPTILE, ça te dit quelque chose ?
Lui : j'ai déjà entendu ça quelque part en effet...
Moi : c'est écrit sur les titres de transport notamment. C'est l'Organisation Professionnelle des Transports d'Île-de-France. C'est un groupement de tous les autres "petits" transporteurs de bus de banlieue, et y en a plus d'une centaine ! Par exemple, à Boissy-Saint-Léger, on a des bus SITUS, STRAV et SETRA.
Lui : ah ouais, donc ça fait quand même pas de données en plus du coup. Et tu vas faire quoi ?
Moi : Plein de choses ! Je vais commencer par améliorer mon appli Firefox OS qui affiche les horaires de bus et permet de les consulter sans connexion, pour y ajouter les bus qui passent à Boissy !
Lui : Ouais. Sans vouloir te vexer, j'ai pas l'impression que ça va pas changer la face du monde, l'ouverture des données du STIF ... moi par exemple, je ne me sens pas du tout concerné.
Moi : Eh bien tu devrais ! L'opendata, c'est pas juste une histoire de développeur qui mangent de la pizza pendant un week-end et font une appli avec un gros coup de pub puis qu'ils arrêtent de maintenir deux mois après ... Il y a un vrai concept politique : rappelle-toi qu'au STIF, il y a des élus, c'est-à-dire des gens qui te représentent ! Et aussi que l'essentiel du financement du transport public dans la région, il est assuré par les collectivités régionales, donc un peu par nos impôts ! La mise à disposition de données brutes, c'est la transparence, c'est "citoyen, regarde ce qu'on fait en ton nom" !
Lui : Ah bon, faut que j'aille regarder les données du STIF maintenant ?
Moi : T'es pas obligé, mais tu peux, et c'est ça qui est important. C'est un peu comme le logiciel libre, c'est pas parce que tu peux télécharger le code source que tu vas le faire, que tu vas l'auditer ou que tu vas en faire ta propre version, la vendre et devenir riche, mais tu peux le faire ! Enfin tu peux essayer ... Si tu étais un journaliste par exemple, tu pourrais te servir de ces données pour contre-vérifier les informations communiquées.
Lui : Ouais, m'enfin bon, si les journalistes me disent que c'est la RATP qui décide des prix, ils vont surement pas aller télécharger les données du STIF pour vérifier quoi que ce soit ...
Moi : mouais, bon, c'est qu'un exemple. Tu peux aussi les croiser avec d'autres jeux de données en opendata pour faire des analyses originales ou inventer des nouveaux services innovants.
Lui : comme ton appli pour Firefox OS ?
Moi : je le mettrais pas dans la catégorie des services innovants, mais bon, c'est l'idée ! Mais tu devrais quand même aller jeter un coup d'oeil, il n'y aura pas que les données horaires sur la plateforme, tu trouveras peut-être quelque chose qui t'intéresse ;)

juin 11, 2015

Les horaires de bus dans la poche

Je me suis enfin décidée à publier ma deuxième application FirefoxOS.

Elle a une mission très simple : sauvegarder et restituer les horaires théoriques de passage de bus à un arrêt.

Son fonctionnement est simple : en deux étapes

l'initialisation (quand j'ai une connexion internet)

  • je choisis mon arrêt.
  • je sélectionne la ligne et la direction
  • je vois alors les horaires, et je peux les enregistrer

init

l'utilisation (quand je suis en déplacement, potentiellement sans connexion internet)

  • je vois la liste de mes fiches horaires enregistrées
  • je sélectionne celle que je veux, et je consulte les horaires

liste détail

Cette application utilise les données opendata d'Île-de-France, grâce à l'API navitia.io

Si vous voulez l'utiliser ailleurs, faites-moi signe : si votre région est couverte par navitia.io, je peux vous en déployer une version avec les horaires qui vous intéressent.

Cette application a été initiée pendant un hackathon chez Mozilla Paris en novembre 2014, puis peufinée par mes soins avec plus ou moins d'assiduité et de motivation pendant plusieurs mois.

C'est bien sûr open-source si vous voulez contribuer au code ou remonter des bugs. Si vous voulez supporter le coût de développement (énorme !) de l'appli, j'accepte les Flattries (et les bières, toujours).

Le but initial était de pouvoir avoir toujours sur moi les horaires de mon bus de banlieue peu fréquent, pour adapter mon itinéraire en connaissance de cause, et ce même si ça ne capte pas ...

Dans la pratique, j'ai déménagé depuis et ne prends plus ce bus de banlieue, et ses horaires ne sont toujours pas en opendata, donc j'aurais une utilisation assez limitée de l'application.

EDIT : le STIF a ouvert les données transport théoriques de toute l'Île-de-France donc ... l'appli fonctionne à présent sur les bus de banlieue !

J'espère que d'autres en auront l'usage ou sauront s'en inspirer pour d'autres utilisations.

avril 29, 2014

Script d’intégration des arrêts de bus dans OSM à partir de navitia.io

Vous l'aurez compris, mon TOC (trouble obsessionnel cartographique) du moment, c'est les arrêts de bus !

Et en travaillant sur le projet KartoKartier, avec mes collègues, dans le cadre du concours Cartoviz, je me suis rendue compte qu'il y avait une belle marge de manoeuvre pour améliorer la qualité des données OSM pour les arrêts de bus : j'en parlais ici.

C'est ainsi que je me suis mise en tête de faire un script qui se nourrit de l'opendata RATP  via l'API navitia.io, pour enrichir les données OSM en ajoutant, pour commencer, les noms des arrêts manquants.

Ce script est disponible sur github, et librement réutilisable.

Que fait ce script ?

Tout d’abord, il récupère la liste de tous les arrêts de bus, situé dans la ville de Paris (par exemple), qui n’ont pas de nom renseigné.

J'ai commencé par l'utiliser sur des villes plus proches de la mienne, voici quelques métriques :

  • nombre d’arrêts sans nom à Paris : 267
  • nombre d’arrêts sans nom à Boissy-Saint-Léger : 21
  • nombre d’arrêts sans nom à Sucy-en-Brie : 38
  • nombre d’arrêts sans nom à Créteil : 25
  • nombre d’arrêts sans nom à Bonneuil-sur-Marne : 3

Ensuite, pour chacun de ces arrêts, j’appelle navitia.io (une API pour les transports en commun, développée par Kisio Digital (anciennement Canal TP), et qui s'alimente, entre autres, des données opendata RATP) et je lui demande de me retourner les points d’arrêts à proximité des coordonnées du point OSM.

Les données opendata de la RATP, qui sont utilisées dans navitia.io ont une géolocalisation peu précise, donc en faisant varier la distance d’accroche, on obtient des résultats plus ou moins pertinents :

Métriques sur Paris :

  • Nombre d’arrêts OSM ayant un arrêt RATP à moins de 100 mètres : 249
  • Nombre d’arrêts OSM ayant un arrêt RATP à moins de 50 mètres : 221
  • Nombre d’arrêts OSM ayant un arrêt RATP à moins de 20 mètres : 145
  • Nombre d’arrêts OSM ayant un arrêt RATP à moins de 10 mètres : 74

Sur ces arrêts, j’ai choisi, dans un premier temps, de ne conserver que
ceux qui ont un unique arrêt RATP (ou plusieurs arrêts avec le même nom)
ce sont les plus faciles à intégrer.

Pour ceux-là, je crée un fichier JOSM avec le nom pré-rempli.

Il n’y a plus alors qu’à ouvrir le fichier dans JOSM, à charger les données existantes autour du point, à vérifier que les infos sont cohérentes, puis à envoyer la modification dans OSM.

image : retour

exemple de retour du script

image : retour du script sur Boissy

Ci-dessus, le retour du script sur Boissy-St-Léger : il n'y a un seul arrêt RATP (l'arrêt noctilien que j'ai cartographié dans un article précédent), et il a déjà un nom !

Dans la pratique, l’intégration :

J’ai choisi d’y aller itérativement, et de commencer par les moins ambigus, donc ceux ayant un arrêt RATP très proche. J'ai aussi choisi de commencer par ceux proches de chez moi, pour pouvoir faire une vérification sur le terrain en cas de doute.

Les premiers arrêts que j'ai intégrés étaient parfaits : c'est le cas typique

  • où navitia a trouvé une correspondance entre mon arrêt sans nom et les données opendata
  • où il n'y a que deux arrêts de bus dans tout le quartier, placé chacun d'un côté de la route (le sens aller et le sens retour)
  • le second arrêt a déjà un nom, et c'est le même que celui trouvé par navitia
  • éventuellement, mon arrêt a un tag name:RATP rempli, et concordant (mais il a peut-être été aussi généré par un script, je ne sais pas si c'est vraiment une mesure de fiabilité)

Là, on peut intégrer les yeux fermés :)

Malheureusement, c'est loin de représenter la majorité des cas ...

À vrai dire, j'ai même trouvé une bonne poignée d'exemples carrément invalides (c'est le cas de le dire) : par exemple, cet arrêt

image : cet arrêt

Il est situé à 16 mètres d’un arrêt de bus que l’opendata RATP appelle Invalides.

Mais, dans les données déjà présentes sur OSM, il est indiqué que c’est un arrêt desservi par les cars Air France.

En conséquence, navitia, alimenté par des données opendata RATP et SNCF (et pas Air France) n’est pas une source fiable pour me fournir le nom de l’arret.

Ça ne veut pas dire que l'arrêt ne s'appelle pas Invalides, mais à moins d'aller voir sur place, je ne peux pas en être certaine ...

On l'oublie souvent, mais il n'y a pas que la RATP comme opérateur de transport, même à Paris !

J’ai même découvert des opérateurs de transport que je ne connaissais pas :

image : opérateur

Enfin, il ya aussi des exceptions géographiques étranges : je pense par exemple aux arrêts de bus autour de Porte Dorée : on trouve deux arrêts, chacun d'un côté de la route, et il y en a un des deux qui ne s'appelle pas Porte Dorée !

image : cet arrêt

Bref, on aurait pu croire qu’on pouvait tout importer automatiquement, mais en creusant un peu, on se rend compte que souvent, il y a des petites subtilités et qu’une vérification humaine est effectivement nécessaire. On comprend ainsi beaucoup mieux les réticences de la communauté OSM face aux imports massif de données d’autres sources (c'est d'ailleurs pour ça qu'on parle ici d'intégration, et non d'import).

État des lieux :

En bref ... aujourd'hui, j'ai intégré tous les arrêts RATP des villes proches de chez moi (Boissy, Sucy, Bonneil, Créteil). Mais malheureusement, ils ne représentent pas la majorité des arrêts de bus de ces villes, qui sont massivement desservies par d'autres compagnies, dont les données de transport ne sont pas en opendata, et donc pas dans navitia.io !

Sur Paris, il m'en reste aujourd'hui moins de 100 !

Et après ?

Les possibilités sont multiples : par exemple, l'intégration dans Osmose pourrait permettre à d'autres contributeurs de vérifier avant d'envoyer les modifications dans OSM (comme ce qui est fait pour les données opendata des écoles par exemple).

Il serait intéressant également de regarder les rejets de mon script, comme les arrêts OSM ayant plusieurs arrêts opendata (avec un nom différent) à proximité : sur ceux-là, une vérification sur le terrain s'impose pour choisir entre les possibilités.

Ensuite, pourquoi pas réfléchir à l'intégration des lignes de bus RATP à partir de navitia.io !

De plus, OSM est un projet international, et navitia aussi, donc le modèle pourrait s'exporter sans soucis ...

Mais j'attends surtout l’opendata des données transports sur toute l’Île-de-France, pour compléter les villes près de chez moi !

EDIT 2015 : c'est fait, les données de toute l'Île-de-France sont librement accessibles

EDIT 2017 : mise à jour de quelques liens cassés