Comment j'ai analysé mes trajets en taxi

Chaque fois que je prends un taxi, un rapport de trajet avec des informations différentes me parvient par la poste. En particulier, ils contiennent la date, l'heure du voyage, le modèle de voiture et le nom du conducteur. Une idée m'est venue: analyser les rapports de Yandex Taxi et en tirer les informations les plus intéressantes. Vous aussi, vous vous êtes probablement toujours demandé combien de fois avez-vous conduit la même voiture ou combien de fois avez-vous été conduit par le même conducteur?





La tâche décrite ici peut être un bon exercice pour les analystes novices. Tout sera ici: python avec pandas et analyse HTML et expressions régulières et bases de données avec SQL.





Nous obtenons des informations

C'est la partie inintéressante, ici je décrirai comment j'ai récupéré les informations de la boîte aux lettres, pour voir le code, à la fin je vais attacher un lien vers l'ordinateur portable Python. Le moyen le plus simple était de décharger la boîte aux lettres au format * .mbox. C'est plus facile que de gérer l'API Gmail, et ma boîte aux lettres est là. Cela n'ajoutera pas automatiquement les voyages après le déchargement, mais pour nos besoins, ce n'est pas critique.





Afin d'analyser l'archive, nous utiliserons la bibliothèque de boîtes aux lettres. Il vous permettra d'accéder aux propriétés de base de chaque message à partir de la boîte aux lettres, y compris l'expéditeur et le corps du message lui-même.





Après avoir choisi les lettres nécessaires, à savoir celles provenant de l'expéditeur taxi.yandex.ru, nous sommes immédiatement confrontés à un problème. Yandex modifie périodiquement la structure de ses rapports. Cependant, la structure a changé globalement une fois, cette année. Avant cela, toutes les informations sur le voyage étaient juste sous la forme d'un texte solide, maintenant elles sont formées sous la forme d'un tableau. Par conséquent, j'ai dû écrire deux fonctions distinctes pour extraire des informations: si le message contient des informations sous forme de texte plein, nous trouvons simplement les informations dont nous avons besoin à l'aide d'expressions régulières à l'aide de masques; si sous la forme d'un tableau, alors nous analysons le code HTML de la lettre en utilisant une belle soupe. Nous chargeons les données obtenues dans un dataframe et une base de données cloud afin de ne pas avoir à rembobiner la boîte entière à chaque admission.





Regarder des voyages

Après avoir reçu les données sous une forme structurée, il est intéressant de voir les statistiques.





, .





Évolution des frais de déplacement au fil du temps

. , , , , -.





Un pic étroit - partant pour le travail, un large - du travail.
- , - .

. .





- .





- , , . , .









? !

, ?





. , 24 , . . , , , . .





:





3 , , .





DATE





NAME





CAR





CAR_MODEL





NUMBER





NAME_HASH





2020-06-23









Toyota





Camry





37077





-2596682743997844296





2020-06-17









Toyota





Camry





37077





-2596682743997844296





2020-06-05









Toyota





Camry





37077





-2596682743997844296





2019-11-27









Toyota





Camry





37077





-1058569546058211362









, , - , . , , .





DATE





TARIF





NAME





CAR





CAR_MODEL





NUMBER





NAME_HASH





2017-10-11













Hyundai





i40





20377





7008433025181534578





2020-04-16





+









Toyota





Camry





67877





7008433025181534578





2018-04-11













Kia





Rio





67077





-2646868843695703984





2020-04-17





+









Kia





Optima





58777





-2646868843695703984





, , 150-200 . .





Répartition des intervalles entre les trajets avec un conducteur récurrent

, , , , 29 , .





, , , , . , , , , .





Répartition des écarts entre les trajets avec des voitures à répétition

:





 pc - 1 , m 





P = \ frac {1} {N} (1-p_c) ^ m

, ,





\ frac {1} {N * p_c} = \ frac {29} {1346}

29 - , 1346 - .





, m m+n:





P_ {m, m + n} = \ frac {(1-p_c) ^ m} {N} * \ frac {1- (1-p_c) ^ {m + n}} {p_c}

. , , - .





 pc  , , . , , . , , .





, pc = 0.0062, :





  • - 257





  • - 7194





- , +. .. , 2 .





:





pc = 0.0076. :





  • - 7039





  • - 209





, . , , , .





, , , : https://colab.research.google.com/drive/1eltee0HilqqVQxpreC9-0w4b08EpMAgM?usp=sharing








All Articles