Modelowanie opóźnień transportu miejskiego
Projekt z pogranicza Data Science i Systemów informacji Przestrzennej (GIS). Wiele miast, w tym Warszawa, udostępnia dane dotyczące transportu miejskiego. Najistotniejszym elementem są logi pozycyjne (czas wysłania/odebrania sygnału GNSS oraz aktualne współrzędne). Na ich podstawie można modelować przemieszczanie się pojazdów komunikacji miejskiej (tramwajów, autobusów).
Wzbogacając te logi o dodatkowe dane z portalu Dane po Warszawsku, m. in. dane przystankowe, o brygadach, pojazdach we flocie, a także Głównego Urzędu Statystycznego (gęstość zaludnienia, struktura społeczna), Geoportalu (formy użytkowania terenu, budynki), serwisów pogodowych, informacji o natężeniu ruchu (korkometr); jesteśmy w stanie zbudować model przewidujący opóźnienia na wybranych trasach w określonych warunkach.
Urząd Miasta byłby zapewne zainteresowany współpracą. Wynika naszych analiz pozwolą im na dopasowanie rozkładów jazdy do faktycznych warunków na drogach. Poza tym, analizując strukturę demograficzną różnych części Warszawy, możliwe będzie wyciągnięcie wniosków na temat tego, gdzie należałoby zwiększyć, a gdzie zmniejszyć częstotliwość kursowania pojazdów lub wręcz zaprojektować nowe linie.
Oprócz zadań związanych czysto z modelowaniem, projekt będzie wymagał kilku przemyśleń na poziomie koncepcyjnym, np. jak wyekstrapolować z danych (logi z pozycją co 30 sekund lub mniej) moment, w którym pojazd pojawia się na przystanku? Poza tym trzeba będzie opracować efektywny sposób mapowania pozycji z logów na wektorowe wersje tras przejazdu poszczególnych linii (systemy pozycjonowania charakteryzują nawet kilkunastometrowymi błędami, zwłaszcza w okolicy wysokiej zabudowy).
Wyzwaniem w przypadku tego projektu będzie na pewno objętość danych. Logi samych tramwajów z jednego miesiąca to prawie 1 GB danych. Wydaje się, że początkowo należałoby się skupić na kilku wybranych trasach i pozyskać dane historyczne, np. z 3 lat (zakładam, że jest to możliwe, ale musiałbym dopytać ludzi z Warszawskiego Transportu Publicznego). Dłuższy zakres dat pozwoli z jednej strony na wyłapanie sezonowych trendów, ale z drugiej strony powoduje na przykład ryzyko wystąpienia zmian w rozkładach konkretnej linii.
Próbka danych (tramwaje z jednego dnia) – dostępne w folderze trams_September2020
brak numeru bocznego pojazdu:
Column1 line_number brigade latitude longitude GPS_sent GPS_received 4 4 3 21.025087 52.296046999999994 01.09.2020 21:30:51 01.09.2020 21:31:01 6 4 3 21.025719 52.295193 01.09.2020 21:31:01 01.09.2020 21:31:14 8 4 6 21.024124 52.19627 01.09.2020 22:31:17 01.09.2020 22:31:24 9 4 13 21.021442 52.177704 01.09.2020 19:30:46 01.09.2020 19:31:00 10 4 1 21.022382999999998 52.264034 01.09.2020 21:31:03 01.09.2020 21:31:14
Obecna próbka danych – do pozyskania za pomocą skryptu korzystającego z API
są już numery boczne pojazdu:
"Brigade": "014"} {"Lines": "4" "Lon": 21.024202 "VehicleNumber": "3187" "Time": "2022-02-27 18:07:30" "Lat": 52.19709 "Brigade": "014"} {"Lines": "4" "Lon": 21.023993 "VehicleNumber": "3187" "Time": "2022-02-27 18:08:37" "Lat": 52.199135 "Brigade": "014"} {"Lines": "4" "Lon": 21.023993 "VehicleNumber": "3187" "Time": "2022-02-27 18:08:58" "Lat": 52.199135 "Brigade": "014"} {"Lines": "4" "Lon": 21.023638 "VehicleNumber": "3187" "Time": "2022-02-27 18:09:30" "Lat": 52.20138 "Brigade": "014"} {"Lines": "4" "Lon": 21.023401 "VehicleNumber": "3187" "Time": "2022-02-27 18:10:07" "Lat": 52.202915 "Brigade": "014"} {"Lines": "4" "Lon": 21.022938 "VehicleNumber": "3187" "Time": "2022-02-27 18:10:38" "Lat": 52.20531 "Brigade": "014"} {"Lines": "4" "Lon": 21.022818 "VehicleNumber": "3187" "Time": "2022-02-27 18:10:59" "Lat": 52.20586 "Brigade": "014"} {"Lines": "4" "Lon": 21.021458 "VehicleNumber": "3187" "Time": "2022-02-27 18:11:30" "Lat": 52.20925
PYTANIA I ODPOWIEDZI:
Z czego wynikają rozbieżności pomiędzy kolejnymi wysłanymi sygnałami GPS wysłanymi przez pojazdy? Według dokumentacji rozdzielczość czasowa danych to 10 sekund. W rzeczywistości te odstępy są bardzo różne, a wielokrotnie zdarzają się odstępy kilkuminutowe. Te sytuacje można by było wytłumaczyć brakiem sygnału GPS w określonych momentach, gdyby te luki występowały tylko dla atrybutu GPS_received, ale w takiej sytuacji interwał w GPS_sent powinien być zawsze taki sam – 10 sekund.
Opiszę schemat gromadzenia danych. Dane z pojazdów są przesyłane do serwera agregującego dane (już zawierają timestamp GPS). Następnie nasz mechanizm odpytuje serwer agregujący co 10 sekund. Stąd czas odczytu będzie zróżnicowany a nie wielokrotnością 10 sekund.
- Wprawdzie trafił się tylko jeden przypadek, ale skąd się biorą braki przypisanej brygady do rekordu danych?
Problem danych źródłowych z pojazdu. Na szczęście niezbyt często występujący.
- Przepraszam, ale nie do końca rozumiem. Z jaką częstotliwością w takim razie dane są wysyłane z pojazdów na serwer? Czy jeżeli Państwa mechanizm odpytuje serwer co 10 sekund, to w atrybucie GPS_received odstępy nie powinny wynosić 10 sekund? Zmierzam do tego, że nieregularność w odstępach dotyczy zarówno GPS_sent, jak i GPS_received. No i skąd się biorą te kilkuminutowe luki (zdarzają się również w trakcie kursów, a więc to nie jest kwestia oczekiwania na przystanku końcowym/początkowym)?
W danych o ile pamiętam był jeden parametr dotyczący czasu i dotyczy on czasu rejestracji lokalizacji pojazdu.
POZOSTAŁE USTALENIA…
System liczący relację pojazdu do rozkładu, czyli to na wyświetlaczach obok kierowcy (o czym ostatnio wspominałem), to jest wewnętrzny system pojazdu. Kierowca wklepuje na samym początku trasę, jaką będzie właśnie jechał (jeszcze na pętli). Pojazd liczy tylko przejechany dystans, a informacja o odległościach między przystankami jest zapisana jako trasa, czyli w ogóle nie ma tutaj pozycjonowania satelitarnego. Rozwiązanie zagadki związanej z brakującym atrybutem identyfikatora pojazdu (numer boczny) dla danych wrześniowych – ten atrybut zaczął być udostępniany dopiero niedawno, czyli już po wrześniu 2020. Dane historyczne nie będą w takim razie tego atrybutu miały, a to uniemożliwia w zasadzie jednoznaczną identyfikację pojazdu (aktualnie ustalam, kiedy ta zmiana miała miejsce). W ramach transportu miejskiego jest wielu przewoźników, główny to MZA, poza tym Tramwaje Warszawskie, Mobilis, Arriva… Dane przez sieć komórkową z pojazdów trafiają na serwery przewoźników, później do ZTM, gdzie są agregowane, następnie do Urzędu Miasta i dopiero do API. Dużo rzeczy po drodze może pójść nie tak i stąd dziury w danych. Każdy z tych przewoźników gromadzi inne dane, ale jak to później udostępnia zbiorczo ZTM, to jakby równają w dół, czyli udostępniają takie dane, które mają wszyscy. Poszczególni przewoźnicy mogą mieć bardziej szczegółowe dane – więcej atrybutów. https://www.ztm.waw.pl/statystyki/ >> tam na przykład informacje o aktualnej liczbie pojazdów. Za 1-2 lata (licząc od września 2020) chcieliby już mieć informację o przybyciu pojazdu na konkretny przystanek.