Personnellement, je suis fan de trains. Ils sont une méthode agréable, bien que lente, pour se déplacer dans le pays. Le Canada n’est pas le meilleur candidat pour le transport ferroviaire, à condition que la superficie assez grande entre les côtes, cependant au moyen de rail exploite un service de routine dans leur corridor entre Windsor ainsi que la ville de Québec.
Malheureusement, le rail de voyageurs doit produire au rail industriel au Canada qui déclenche généralement des retards. Après avoir remarqué que certains trains ont des retards extrêmement réguliers, il semblait qu’il serait avantageux de comprendre la performance typique de chacun au moyen de train. au moyen de ne pas fournir ces données publiquement.
Cependant, ils fournissent des données sur l’arrivée ainsi que les heures de départ. Creuser dans les données proposées avec tout type de navigateur vérifiant le moyen de site ferroviaire, il était possible d’enquêter sur les données d’arrivée planifiées / réelles précédentes. Le résultat est TrainStats.ca, un écran de VIA de manière opportune. Rejoignez-moi après la pause alors que je vais exactement comment cela fonctionne, ainsi que sur la manière de choisir un champion lors de votre prochain billet de train.
Obtenir les données
VIA fournit des données de routine pour la page précédente, actuelle, ainsi que le lendemain sur leur page d’état. Cela nous permettrait de développer un ensemble de données de voyage, cependant seulement un jour à la fois. Heureusement, nous pouvons mettre fin à l’inspecteur de Chrome ainsi que découvrir cette demande d’obtention:
http://reservia.viarail.ca/tsi/gettrainstatus.aspx?l=fr&tsiccode=via&tsitrainnumber=87&departurré=2015-12-01&arrivalDate=2015-12-01&traininsancedate=2015-12-01&t=1449033500354
Il y a quelques paramètres juteux ici. TsITiRainNumber est sans aucun doute le numéro de train que nous examinons. Le départ est la date à laquelle le train est à gauche, ainsi que l’arrivéeDate, c’est à son arrivée. TrainInsancetate De même semble être réglé sur la date gauche du train. Dans cet esprit, il est temps de passer à Python et d’utiliser la bibliothèque de demandes étonnantes pour créer des demandes.
Ces données sont constituées de texte unicode bidirectionnel pouvant être interprété ou compilé de manière différente de ce qui apparaît ci-dessous. Pour examiner, ouvrez les données dans un éditeur qui expose les caractères Unicode cachés.
Découvrez beaucoup plus sur les caractères unicode bidirectionnels
montrer des caractères cachés
charge utile = {‘l’: ‘fr’,
‘TSICCODE’: ‘VIA’,
‘Tsitrainnumber’: Train_Number,
“Départ”: trip_date,
‘ArrivéeDate’: Trip_Date,
‘TrainInsanceTate’: trip_date}
r = demande.get (‘http://reservia.viarail.ca/tsi/gettrainstatus.aspx'
paramiques = charge utile)
voir
request.py
tenu avec GitHub
Ce code nous permet d’aller chercher des données pour tout type de numéro de train sur n’importe quel type de date. Après quelques essais, nous avons découvert que les données de VIA reviennent à avril 2015, ce qui nous fournit plus de 6 mois de données. Pour chaque voyage, nous obtenons l’arrivée aménagée ainsi que l’arrivée réelle ainsi que les heures de départ pour chaque station. Garder cette information, nous pouvons rapidement déterminer exactement à quel point les trains sont retardés.
Avec les données de page extraites comme HTML, un script a été piraté ensemble à l’aide de magnifiquesSoup pour extraire toutes les valeurs. Ce script produit ensuite des objets pour les données de déclenchement et les stocke dans une base de données PostgreSQL utilisant SQLalchemy. Cela rend cela simple et efficace pour avoir accès aux données plus tard.
La dernière étape consistait à parcourir tous les numéros de train ainsi que de jours pour tirer les données. Ce script utilise simplement certaines boucles imbriquées pour obtenir la maintien des données et la stocker. Un script supplémentaire saisit les données de la journée précédente et la stocke dans la base de données. Ceci est mis en place sur un travail de cron. La base de données reste donc fraîche.
Construire un site Web (bon marché)
TrainStats.ca site web
À ce stade, nous avons des données d’arrivée sur plus de 12 000 voyages. Bien que nous puissions exécuter manuellement des questions et composer des scripts pour produire des parcelles, il est beaucoup plus amusant de mettre les données en ligne. Cela indique qu’il est temps de développer un site Web. Faire de choses superbes sur le Web n’est pas ma forte, alors [Phil Everson] a sauté pour faire du développement Web.
Pour ajouter une contrainte, nous souhaitions rendre le site aussi abordable que possible de courir. La plate-forme comme une offre de services comme Heroku a couru environ 20 $ par mois. Un serveur personnel en ligne de DigitalOcean dépenserait au moins 5 $. Le choix le moins coûteux était de créer un site statique.
Une page Web statique est un voyage à la journée des géocités. Vous pouvez contenir des fichiers, cependant, vous ne pouvez effectuer aucun type de traitement sur le serveur. Heureusement, cela a bien fonctionné pour le type de données que nous fournissions. Toutes les données de voyage agrégées peuvent être exportées vers des fichiers JSON, ainsi que JavaScript sur le côté client, peuvent tonnes les données ainsi que les parcelles d’écran.
Le site TrainStats est constitué de certains HTML, CSS, ainsi que JavaScript qui fonctionne dans votre navigateur, ainsi qu’une collection de données JSON avec les données. Le jeu de données est généré quotidiennementPar un autre travail de cron, ce qui permet à tout le traitement de se produire en une fois sur un ordinateur régional. Ensuite, l’interface de ligne de commande Amazon Web Services est utilisée pour appuyer sur les données à S3, où il peut être récupéré par les utilisateurs. Étant donné que les ensembles de données sont petits, ainsi que S3 est bon marché, cela rend les coûts inférieurs à ceux de la normale.
Les resultats
Ce hack a été principalement développé pour s’amuser, mais il a quelques conclusions fascinantes. Sur mon itinéraire normal d’Ottawa à Toronto, je suis beaucoup plus susceptible de choisir le train qui est en temps opportun 84% du temps, contre celui qui ne roule que dans la station sans délai sur 28% des voyages. Certains autres voyageurs peuvent également découvrir les statistiques bénéfiques. Quoi qu’il en soit, il s’agissait d’un exercice fascinant dans la raclage d’un jeu de données et de fournir un service Web sur le bon marché.
Si vous pensez à la source, c’est tout sur GitHub pour la prise. Nous vous demandons de bien vouloir que vous ne soyez pas DDO au moyen de rail avec cela.