General IT Les (vraies) statistiques de ponctualité de ma ligne SNCF

L’année dernière, en ayant un peu marre que la SNCF annonce entre 95 et 98% de trains à l’heure sur ma ligne, alors que ce n’était clairement pas mon ressenti, j’ai décidé, dans la mesure du possible, de noter le nombre d’incidents que je subissais au quotidien, afin de pouvoir établir mes statistiques de ponctualité maison.
Passez la souris sur le graphique ci-dessous pour avoir le détail, ou cliquez ici pour voir la version taille réelle.

J’ai donc noté :

  • Le nombre de trains à l’heure
  • Le nombre de jours de grèves
  • Le nombre de jours avec incidents (annulations, retard)
  • Le retard moyen

Puis, j’ai fait un ratio afin d’obtenir des pourcentages. Particularité de ma démarche : je ne me suis pas basée sur le nombre de trains total, mais sur le nombre de MES trains totaux. Hé oui, parce que j’en ai juste rien à faire que les trains soient ponctuels à 100% le dimanche entre 15 et 16h, puisque je ne suis pas dedans ! Le ratio a donc été calculé en se basant sur 2 trains par jour ouvré (ou bien travaillé pour moi, j’ai retiré mes semaines de congés).

Les mois vides sont ceux pour lesquels je n’ai rien noté, ce qui ne veut pas dire qu’il n’y a pas eu d’incident. On voit bien que les grèves du mois de mai et juin (seulement un tiers de jours sans grèves ou incidents !) on ramené la ponctualité vers les 80%. On voit aussi que le taux de train à l’heure est plus proche des 90% que des 95-98% annoncés. Et on a tout de même de 10 à 30% des jours avec un incident… Enfin, conséquence de la faible fréquence des trains sur ma ligne, le retard moyen est toujours élevé si renseigné (minimum 22 minutes), car un train supprimé, c’est minimum 15 minutes de retard avant d’avoir le suivant.

Pour réaliser ce joli graphe, j’ai utilisé la librairie python de Plotly, qui est assez facile à utiliser ; par exemple pour réaliser un graphique en barre, cela tient en quelques lignes :


df = pd.read_csv('sncf_2016.csv')
trace0 = Bar(
    x=df['x'],
    y=df['ratio_greve'],
    name = 'Ratio jour travailles/greve',
    marker=dict(
        color='#C4DFEC',
        line=dict(
            color='#C4DFEC',
            width=1.5,
        )
    ),
   opacity=0.6
)

Cela faisait longtemps que je voulais la tester. Cela faisait une occasion. :p Et je dois dire que c’est assez sympa à utiliser, la documentation est plutôt bien faite, et il y a beaucoup de possibilités de customiser le résultat, et tout ça en quelques lignes de Python seulement. Bref, je recommande si vous voulez utiliser vos connaissances en Python pour faire des zolis graphiques !

Comments are closed.