Всякий раз, как я езжу на такси мне на почту приходит отчет о поездке с разной информацией. В частности, они содержат дату, время поездки, модель автомобиля и ФИО водителя. Меня посетила идея - проанализировать отчеты от яндекс такси и вытащить из них максимум интересной информации. Вам наверняка тоже всегда было интересно сколько раз вы ездили на одной и той же машине или сколько раз вас возил один и тот же водитель?
Задача, которая здесь описана может быть хорошим упражнением для начинающих аналитиков. Тут будет всё: и python c pandas и парсинг HTML и регулярные выражегия и базы данных c SQL.
Добываем информацию
Это неинтересная часть, здесь я опишу как я извлекал информацию из почтового ящика, чтобы посмотреть код в конце я прикреплю ссылку на питоновский ноутбук. Проще всего оказалось сделать выгрузку почтового ящика в формате *.mbox. Это проще, чем разбираться с gmail api, а мой почтовый ящик именно там. Это не позволит автоматически добавлять поездки, которые были после выгрузки, но для наших целей это не критично.
Для того, чтобы разобрать архив будем пользоваться библиотекой mailbox. Она позволят получать доступ к основным свойствам каждого письма из ящика включая отправителя и само тело письма.
После выбора нужных писем, а именно тех, что пришли от отправителя taxi.yandex.ru сразу сталкиваемся с проблемой. Яндекс периодически меняет структуру своих отчетов. Однако, глобально структура поменялась один раз, в этом году. До этого вся информация о поездке была просто в виде сплошного текста, сейчас она сформирована в виде таблицы. Поэтому пришлось написать две отдельных функции для извлечения информации: если письмо содержит информацию в виде сплошного текста, просто находим нужные сведения с помощью регулярных выражений по маскам; если в виде таблицы, то парсим HTML код письма с помощью beautiful soup. Полученные данные загружаем в датафрейм и облачную базу данных для того, чтобы потом не приходилось при каждом запуске заново шерстить весь ящик.
Смотрим поездки
Получив данные в структурированном виде интересно посмотреть статистику.
На графике ниже видно, как поездки со временем дорожают.
А на графике ниже изображена гистограмма поездок по времени вызова. Видно, что на такси я обычно еду либо на работу, либо с работы, но если на работу я всегда выезжаю в одно и то же время, то с нее я уезжаю по-разному.
А на следующем графике видна интенсивность пользования сервисом за всё время. Видны просадки количества поездок летом и в январе.
Самая популярная марка в такси - Киа.
Видимо это из-за того, что она популярна и в комфорте, и в экономе. В комфорте оптима, в экономе сид и рио.
Совпадение? Не думаю!
Затем я задался вопросом, сколько раз я ездил с одним водителем или на одной и той же машине?
Сперва водители. Анализ показал, что всего есть 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 дней. Видимо в такси люди долго не задерживаются.
Если провести тот же анализ, но не по водителям, а по машинам, то окажется, что машины повторялись 29 раз, а распределение промежутков времени между поездками спадает медленнее.
То, что машины повторяются чаще, чем водители может говорить о том, что машин в Москве меньше, чем водителей. А то, что распределение промежутков между поездками спадает медленнее, может говорить о том, что машины служат дольше, чем работают водители.
Попробуем извлечь дополнительную информацию
Два основных утверждения:
Если pc - вероятность сломаться в течение 1 дня, то вероятность совершить поездку в день номер m
тогда, суммируя ряд, получаем вероятность совершить поездку на машине в принципе
Где 29 - количество повторяющихся поездок, а 1346 - общее количество поездок.
Аналогично, вероятность совершить поездку в промежутке с дня m по день m+n:
Исходя из этого можно попробовать оценить количество такси в Москве и время службы одной машины. Форма гистограммы, промежутков между двумя поездками позволили оценить время жизни машины, а общее количество двойных поездок - общее количество такси в городе.
Попробуем подогнать значение pc чтобы гистограмма, которую предсказывает модель максимально совпадала с той, что имеем в жизни. При этом учтем, что в выборку попали только те машины, на которых я уже совершил поездку. Учитывая, что в среднем я буду совершать поездку в середине жизненного цикла такси, введем поправку к получившемуся результату.
Аппроксимируя имеющиеся данные, получаем вероятность pc = 0.0062, это позволяет сделать следующие выводы:
Время службы одной машины в такси - 257 дней
Количество машин в Москве - 7194
При этом количество машин - это не общее число машин, а среднее число между количеством машин в экономе и классе комфорт+. Т.е. можно ожидать, что реально такси более чем в 2 раза больше нашей оценки.
Аналогичные рассуждения можно провести и для водителей:
Имеем вероятность pc = 0.0076. Эта цифра дает следующие результаты:
Количество водителей в Москве - 7039
Один водитель держится - 209 дней
Качественные выводы, которые я сделал в предыдущей части подтверждаются и при количественном расчете. Видно, что водителей меньше, чем машин и уходят они раньше, чем выходят из строя автомобили.
Для тех, кому интересно посмотреть код, или составить свою сводку, ссылка на ноутбук: https://colab.research.google.com/drive/1eltee0HilqqVQxpreC9-0w4b08EpMAgM?usp=sharing
AADogov
Интересно, а куда автор так часто в час ночи ездит?
Ubulto
Судя по всему, к доктору Ватсону
AADogov
— Ватсон, я просто хотел узнать, не мучает ли вас бессонница.
— Холмс, и ради этого вы решили меня разбудить?