Найти в Дзене

Как считать время в пути на общественном транспорте

Я обычно не работаю с данными общественного транспорта: таких задач нет на работе, и у меня на курсе нет такого раздела. Люди, кто занимается расписаниями и оптимизацией маршрутов, - боги из другого мира. Но так случилось, что PhD потребовало от меня разобраться, и достаточно быстро, в этой области и посчитать среднее время на общественном транспорте между районами. Поэтому этот пост для тех, кто как и я, не занимается транспортом на ежедневной основе, но кому вдруг нужно быстро посчитать показатель с ним связанный. Форматы данных Начнем с того, что обычно данные по общественному транспорту - это открытые данные. Их публикуют как ответственные за транспорт гос органы, транспортные компании, так и различные платформы агрегаторы. Последние не создают информацию, а только хранят и передают ее в удобном виде. У последних обычно есть API. Я бы разделила данные на 2 типа: 1. Как должно быть: расписание, маршруты, остановки 2. Как фактически есть: GPS сигналы автобусов Хорошая новость: вся и

Я обычно не работаю с данными общественного транспорта: таких задач нет на работе, и у меня на курсе нет такого раздела. Люди, кто занимается расписаниями и оптимизацией маршрутов, - боги из другого мира.

Но так случилось, что PhD потребовало от меня разобраться, и достаточно быстро, в этой области и посчитать среднее время на общественном транспорте между районами.

Поэтому этот пост для тех, кто как и я, не занимается транспортом на ежедневной основе, но кому вдруг нужно быстро посчитать показатель с ним связанный.

Форматы данных

Начнем с того, что обычно данные по общественному транспорту - это открытые данные. Их публикуют как ответственные за транспорт гос органы, транспортные компании, так и различные платформы агрегаторы. Последние не создают информацию, а только хранят и передают ее в удобном виде. У последних обычно есть API.

Я бы разделила данные на 2 типа:

1. Как должно быть: расписание, маршруты, остановки

2. Как фактически есть: GPS сигналы автобусов

Хорошая новость: вся информация о том, как транспорт должен ходить, во всем мире хранится и передается в одном формате, а именно GTFS (General Transit Feed Specification). Физически, это архив с txt файлами, обновляемый с регулярной частотой от 1 минуты до 1 года, в зависимости от того насколько динамична транспортная система. Плюс такой универсальности: не придется писать код с 0 - его уже много раз написали за вас.

Формат "Как должно быть" - GTFS Schedule

Файлы в GTFS Schedule ( <1 GB)
Файлы в GTFS Schedule ( <1 GB)

agency.txt — файл, содержащий информацию об организациях, управляющих транспортными средствами. Включает в себя название агентства, его веб-сайт, код агентства и другие контактные данные.

stops.txt — файл, включающий список всех остановок и станций, на которых останавливаются транспортные средства. Содержит название остановки, ее координаты (широта и долгота), а также код остановки.

routes.txt — файл, описывающий маршруты, по которым следуют транспортные средства. В нем содержится информация о номерах маршрутов, названиях и типах транспорта (автобус, трамвай и т.д.)

shapes.txt — файл, который описывает форму (траекторию) маршрутов. Эта информация используется для визуализации маршрутов на картах.

trips.txt — файл, содержащий детализированную информацию о рейсах по каждому маршруту. Он связывает маршрут с конкретными остановками и временем прибытия на них.

stop_times.txt — файл, в котором указано время прибытия и отправления транспортного средства на каждой остановке для каждого рейса.

calendar.txt — файл, определяющий дни недели и периоды, когда действует расписание. Содержит информацию о том, какие дни считаются рабочими, выходными и праздничными.

calendar_dates.txt — файл, содержащий исключения и дополнения к расписанию, указанные в calendar.txt, такие как дополнительные рейсы в праздничные дни или отмененные рейсы.

fare_rules.txt и fare_attributes.txt — файлы, которые описывают тарифы и правила их применения на различных маршрутах и остановках.

Для задачи расчета среднего commuting time потребуются не все файлы - какие, попробуйте пока догадаться сами.

Формат "Как фактически есть"  GTFS- RT ( Real time)

С этим форматом я признаюсь, не работала, так как он предназначен в первую очередь для передачи данных между транспортным средством и приложением ( например, Яндекс Транспорт) в режиме реального времени, а не для анализа.  Но все равно опишу, насколько знаю.

В отличие от GTFS Schedule, GTFS- RT это не архив, а файл, например JSON,  который обновляется с высокой частотой (обычно каждые 10-30 секунд). Каждый файл представляет собой снимок текущего состояния транспорта — положение транспортных средств, актуальное расписание и уведомления в конкретный момент времени.

Пример исторического среза от 26 февраля 2022 года:  https://openmobilitydata.org/p/saint-petersburg/861/source

Структура файла:

Vehicle Positions (Позиции транспортных средств):

Содержит данные о текущем местоположении транспортных средств, включая:

- Координаты: широта и долгота.

- Направление движения: угол в градусах.

- Скорость: текущая скорость транспортного средства.

- Идентификатор транспортного средства: уникальный номер или код.

Trip Updates (Обновления рейсов):

Предоставляет информацию об изменениях в расписании, таких как:

- Задержки: время задержки относительно расписания.

- Отмены рейсов: информация об отмененных рейсах.

- Изменения маршрута: данные о временных изменениях маршрутов.

Service Alerts (Уведомления о сервисе):

Содержит уведомления о сбоях или изменениях в обслуживании, включая:

- Причина: причина изменения или сбоя (например, ремонтные работы, погодные условия).

- Описание: подробности о характере и продолжительности изменения.

Конечно, могут возникать задачи, когда нужно проанализировать фактическое движение. В этом случае есть 2 варианта: подключиться к API одного из сервисов и сохранять ответы. Или пойти в открытые данные города/страны и найти там архив с такими файлами.

Платформы - агрегаторы транспортных данных

1. OpenMobilityData

Только для доступа к историческим данным ( до февраля 2022)

Доступ: API, можно скачать файлы с сайта

Карта покрытия (в России только СПБ) :

-2

2. Mobility Database

Актуальные данные ( обновляются real-time)

Доступ: API, можно скачать последний файл с сайта

Покрытие: более 2000 операторов из 70 стран.  В России только СПБ

3. TRANSITLAND

Актуальные данные  (обновляются real-time)

Доступ:  API, можно посмотреть на глобальной карте, но возможности скачать с сайта не увидела

Покрытие:  более 2 500 операторов из 55 стран. В России только СПБ

-3

Решение задачи расчета среднего времени на ОТ из разных районов города до центра Тель-Авива

Дисклеймер:

Как я писала - ноутбуков по обработке GTFS на GitHub полно, поэтому я тоже взяла готовый код отсюда и обработала его под свою задачу.

Важно: я считала время в будний день, не привязываясь к календарю.

Если вы сразу хотите посмотреть код: https://github.com/Ines2607/phd_scripts

Источники:

1.  GTFS файлы министерства транспорта

2.  Границы статистических зон Израиля (на github по ссылке выше)

ОСНОВНЫЕ ШАГИ:

1. Загружаем данные. Я загружаю все файлы, чтобы посмотреть на них, но в анализе понадобятся только 2: stops.txt, stop_times.txt

2. Оставляем только остановки внутри нужной зоны. И находим соответствие остановка - зона. У меня получилось 3516 остановок.

-4

3. На основе файла stop_times.txt создаем список из всех пар остановок со временем и дистанцией между ними, оставляя только те, между которыми существует прямой маршрут.

-5

4.  Построение кратчайшего маршрута с использованием  алгоритма Дейкстры

Цель: построить маршруты между всеми парами остановок с пересадками

Главный минус: время ожидания между автобусами не учитывается

Шаги:

1. Создание графа из датасета с шага 3, где вершины - это остановки, а ребра - маршрут между ними ( trip_id).

2. Построение кратчайшего пути между всеми парами вершин, учитывая время между ними (вес в данном случае travel_time, несмотря на то, что автор называет его distance).

Для пары остановок 13605 - 13557 получился следующий маршрут длительность 15 мин и расстоянием 5.7 миль:

-6

Маршрут на карте (цифрами указано кол-во остановок  в промежутках - смыкаются при уменьшении масштаба)
Маршрут на карте (цифрами указано кол-во остановок в промежутках - смыкаются при уменьшении масштаба)

5. Так как наша финальная задача найти расстояние между районами, а не остановками, то тестируем следующий подход: для каждой статзоны находим остановку наиболее близкую к центру.Какие минусы приходят в голову?)

6. Пытаемся улучшить прошлый вариант. Теперь вместо самой центральной остановки перебираем все, попадающие в радиус 1 км от центра зоны остановки, и находим ту, с которой время поездки минимально. Зачем?

- Потому что верим, что ради возможности ехать без пересадки средний человек готов пройти до 15 мин пешком.

- А еще то единственный способ учесть разные направления движения

Результат тестирования на одной из зон: время варьируется от 23 до 31 мин

Результат тестирования на одной из зон: время варьируется от 23 до 31 мин
Результат тестирования на одной из зон: время варьируется от 23 до 31 мин

7. Прогоняем такой подход на всем датасете:  в качестве старта используем все остановки в рамках географии( 3516), в качестве окончания 1 остановку - ближайшую к центру Тель-Авива.

Для каждого района сохраняем минимальное время в пути.

В результате получаем такую карту (звездой отмечен центр города):

-9

Зачем нужна такая карта:

1. Оценка транспортной доступности - сравнив дистанцию по воздуху и время на транспорте легко увидеть самые труднодоступные районы города

2. Изучение изменения ключевых городских показателей с удалением от центра города на транспорте( например плотности населения, заработной платы или цен на жилье)

Ограничения подхода:

1. Расчет работает быстро, если не пытаться добавлять фактическое время пересадок или возможность сесть на 2ой автобус/ метро на другой остановке ( то есть в буфере) . В этом случае число операций увеличивается в N^4 ( 4 -среднее число остановок в окрестности)

P.S. Пишите ваши вопросы/комментарии, особенно если есть идеи или готовые предложения по улучшению подхода.

А я вам предлагаю скоротать время с помощью моего курса по основам пространственного анализа с использованием Python. Наша цель — показать, как геоаналитические методы могут быть применены в бизнесе.

Курс предназначен для:

- GIS-специалистов с базовыми знаниями Python, которые хотят развить свои аналитические навыки;

- Аналитиков, которым необходимы геоинструменты для решения задач.

Курс полностью самостоятелен и включает возможность обсуждения в нашем чате в Telegram.

Посетите наш сайт, пройдите тест и присоединяйтесь к курсу. А для тех, кто еще сомневается, подходит эта профессия или нет, мы подготовили демо-версию курса за символическую цену, все подробности по ссылке геокурса!