Rozkłady jazdy w postaci plików CSV

Dyskusje o organizacji ruchu.
Wiadomość
Autor
Awatar użytkownika
polaque
Posty: 268
Rejestracja: 09 maja 2014, 23:43
Lokalizacja: Siemianowice Śl.

Rozkłady jazdy w postaci plików CSV

#1 Post autor: polaque » 12 cze 2014, 14:58

Nie wiem, czy w dobrym miejscu piszę ten post, ale jak wspominałem w jednym poście, posiadam przeze mnie stworzone narzędzie do pobierania rozkładów jazdy autobusów/tramwajów z KZK GOP.

Jako, że zauważyłem, że robicie rozkłady z obsadami w plikach Excela, to w ramach pomocy udostępniam Wam folder z rozkładami w formacie CSV, który łatwo się importuje do Excela.

https://www.dropbox.com/sh/k9lf2s03diip ... AkMsmf3Taa

Postaram się w ramach możliwości jak najczęściej aktualizować.

Ostatnia aktualizacja: 9.12.2014 (Wszystkiego, co było)

Jeśli macie jakieś pytania, dajcie znać, bo nie weryfikuję poprawności wgrania się rozkładów (nie licząc jakiś bardzo rażących błędów)
Ostatnio zmieniony 09 gru 2014, 17:48 przez polaque, łącznie zmieniany 15 razy.

Awatar użytkownika
Penny
Posty: 9369
Rejestracja: 14 cze 2008, 20:27
Lokalizacja: Chorzów

Re: Rozkłady jazdy w postaci plików CSV

#2 Post autor: Penny » 12 cze 2014, 18:38

polaque pisze:Jako że zauważyłem, że robicie rozkłady z obsadami w plikach Excela, to w ramach pomocy udostępniam Wam folder z rozkładami w formacie CSV, który łatwo się importuje do Excela.
Nie potrzebujemy rozkładów docelowo w XSL. Dane rozkładu trzymamy niekiedy po to, aby móc zachować wiele arkuszy w jednym pliku. Na potrzeby skryptu plik XLS jest zapisany do CSV automatycznie. Dzięki za pomoc :-)

Na dniach odezwę się do Ciebie ws. bazy danych.

Awatar użytkownika
polaque
Posty: 268
Rejestracja: 09 maja 2014, 23:43
Lokalizacja: Siemianowice Śl.

#3 Post autor: polaque » 12 cze 2014, 18:43

Ale tak swoją drogą, dałem w CSV, by łatwo można było wyciągać dane, bo dla mnie wygenerowanie tych kilkudziesięciu CSV to kilka sekund.

A z bazą to nie ma sprawy.

Poza tym, dzięki pliku csv zauważyłem dziwactwo na stronie kzk gop z T16 i przystankiem Św. Jana, który jest dwa razy na kierunku i zawiera rozkłady pokrywające się w sporym stopniu.

pitrekgaga
Posty: 594
Rejestracja: 16 mar 2013, 14:38
Lokalizacja: Katowice

#4 Post autor: pitrekgaga » 18 sie 2014, 09:47

Do kompletu brakuje jeszcze autobusu 914. :D
14 BRYNÓW CENTRUM PRZESIADKOWE - Plac Miarki - Rynek - Zawodzie - Szopienice - MYSŁOWICE DW. PKP

Awatar użytkownika
polaque
Posty: 268
Rejestracja: 09 maja 2014, 23:43
Lokalizacja: Siemianowice Śl.

#5 Post autor: polaque » 06 lis 2014, 12:32

pitrekgaga pisze:Do kompletu brakuje jeszcze autobusu 914. :D
Przepraszam, że teraz na ten post odpisuję, ale od teraz całkowicie będę rezygnował z zatramwajów i tylko w folderze aktualne tramwaje będą się znajdować.

musicus
Posty: 15
Rejestracja: 14 lis 2014, 21:08
Lokalizacja: Gliwice

#6 Post autor: musicus » 14 lis 2014, 21:32

Przeglądałem pliki rozkładów tramwajów z dropboxa i zastanawiam się, jak wygenerować pliki csv z bazy rozkładów dla autobusów?

Awatar użytkownika
polaque
Posty: 268
Rejestracja: 09 maja 2014, 23:43
Lokalizacja: Siemianowice Śl.

#7 Post autor: polaque » 14 lis 2014, 21:34

musicus pisze:Przeglądałem pliki rozkładów tramwajów z dropboxa i zastanawiam się, jak wygenerować pliki csv z bazy rozkładów dla autobusów?
No, jak masz pobraną i przygotowaną bazę, np. SQLite czy MySQL, to wystarczy odpowiednie zapytanie i zapisanie do CSV.

musicus
Posty: 15
Rejestracja: 14 lis 2014, 21:08
Lokalizacja: Gliwice

#8 Post autor: musicus » 14 lis 2014, 22:35

polaque pisze:No, jak masz pobraną i przygotowaną bazę, np. SQLite czy MySQL, to wystarczy odpowiednie zapytanie i zapisanie do CSV.
OK, stworzyłem sobie pustą bazę MySQL, ale jakie mam teraz wpisać zapytanie?

Awatar użytkownika
polaque
Posty: 268
Rejestracja: 09 maja 2014, 23:43
Lokalizacja: Siemianowice Śl.

#9 Post autor: polaque » 14 lis 2014, 22:38

musicus pisze:
polaque pisze:No, jak masz pobraną i przygotowaną bazę, np. SQLite czy MySQL, to wystarczy odpowiednie zapytanie i zapisanie do CSV.
OK, stworzyłem sobie pustą bazę MySQL, ale jakie mam teraz wpisać zapytanie?
Ale to nie działa tak. Najpierw musisz sobie zrobić narzędzie, które Ci przetworzy i zapisze rozkład w bazie, by móc robić jakieś zapytania.

Awatar użytkownika
polaque
Posty: 268
Rejestracja: 09 maja 2014, 23:43
Lokalizacja: Siemianowice Śl.

#10 Post autor: polaque » 30 gru 2014, 21:19

Mam informacje (wpisuje tu by nie robić nowego postu)

Zrobiłem od nowa skrypt do pobierania od bazy rozkładów tramwajowych

Z racji tego że nie zawsze będę mógł aktualizować a może się to komuś przyda udostępniam skrypcik w Pythonie do tworzenia i pobierania danych z kzkgopu:

https://gist.github.com/sylwke3100/1daa5d17253ddd378588


Cały proces zajmuje ok 30 - 40 (przynajmniej u mnie) i generuje bazę danych w formacie db

Dla obecnej ilości tramwajów (ok 30) baza ma ok 9,5 MB

Jak macie jakieś pytania to zapraszam do zadawania.

Awatar użytkownika
Penny
Posty: 9369
Rejestracja: 14 cze 2008, 20:27
Lokalizacja: Chorzów

#11 Post autor: Penny » 30 gru 2014, 21:46

Pokłon po pas za prostą konstrukcję bazy, a przede wszystkim za naprawdę optymalne i rzeczowe parsowanie frontendu. ;-) Przyglądnę się temu i na pewno zapytam.

Awatar użytkownika
polaque
Posty: 268
Rejestracja: 09 maja 2014, 23:43
Lokalizacja: Siemianowice Śl.

#12 Post autor: polaque » 30 gru 2014, 21:58

Penny pisze:Pokłon po pas za prostą konstrukcję bazy, a przede wszystkim za naprawdę optymalne i rzeczowe parsowanie frontendu. ;-) Przyglądnę się temu i na pewno zapytam.
Czuję tu sporo ironii. :D

Baza zawiera wszystko, co powinno być (miasta, przystanki, numery tramwajów, rozkład, typ rozkładu[np. Robocze])

Optymalne to napewno nie jest, ale aż takim specem nie jestem od Pythona, więc zrobiłem wszystko po najmniejszej dla mnie linii oporu.

Awatar użytkownika
Penny
Posty: 9369
Rejestracja: 14 cze 2008, 20:27
Lokalizacja: Chorzów

#13 Post autor: Penny » 31 gru 2014, 08:08

polaque pisze:Czuję tu sporo ironii. :D
Nie ma żadnej. :-) Dzięki za kod.

Awatar użytkownika
polaque
Posty: 268
Rejestracja: 09 maja 2014, 23:43
Lokalizacja: Siemianowice Śl.

#14 Post autor: polaque » 31 gru 2014, 17:26

Tak jeszcze, jakby były jakieś problemy, to zaktualizowałem plik bazy pod tym linkiem, opisując wartość w tabelach (w tym samym linku, co wyżej)

Dla przykładu taki zapytanie w SQLu

Kod: Zaznacz cały

SELECT timetable.routeDirection, cities.name, stops.name
FROM timetable
LEFT JOIN stops
ON stops.id = timetable.stopId
LEFT JOIN cities
ON stops.cityId = cities.id
WHERE timetable.busId = 1
GROUP BY timetable.routeDirection,timetable.countTable, timetable.stopId
ORDER BY timetable.routeDirection, timetable.routeId, timetable.countTable
Daję listę poukładaną dla tramwaju, jeden z trasami, jakimi się porusza, czyli

Kod: Zaznacz cały

0	 Gliwice	Gliwice Zajezdnia
0	 Zabrze	Maciejów Knurowska
0	 Zabrze	Maciejów Kondratowicza
0	 Zabrze	Zabrze Słowackiego
0	 Zabrze	Zabrze Plac Słowiański
0	 Zabrze	Zabrze Damrota
0	 Zabrze	Zabrze de Gaullea
0	 Zabrze	Zabrze Karola Miarki
0	 Zabrze	Zabrze Plac Wolności
0	 Zabrze	Zabrze Św. Floriana
0	 Zabrze	Zabrze Sienkiewicza
0	 Zabrze	Zaborze Skansen Luiza
0	 Zabrze	Zaborze Elektrociepłownia
0	 Zabrze	Zaborze Skargi
0	 Zabrze	Zaborze Lompy
0	 Zabrze	Zaborze Pętla
0	 Zabrze	Poremba Bielszowicka
0	 Ruda Śląska	Ruda Klary
0	 Ruda Śląska	Ruda Południowa
0	 Ruda Śląska	Ruda Urząd Skarbowy
0	 Ruda Śląska	Chebzie Styczyńskiego
0	 Ruda Śląska	Chebzie Dworcowa
0	 Ruda Śląska	Chebzie Pętla
1	 Ruda Śląska	Chebzie Pętla
1	 Ruda Śląska	Chebzie Dworcowa
1	 Ruda Śląska	Chebzie Styczyńskiego
1	 Ruda Śląska	Ruda Urząd Skarbowy
1	 Ruda Śląska	Ruda Południowa
1	 Ruda Śląska	Ruda Klary
1	 Zabrze	Poremba Bielszowicka
1	 Zabrze	Zaborze Lompy
1	 Zabrze	Zaborze Lompy
1	 Zabrze	Zaborze Skargi
1	 Zabrze	Zaborze Elektrociepłownia
1	 Zabrze	Zaborze Skansen Luiza
1	 Zabrze	Zabrze Sienkiewicza
1	 Zabrze	Zabrze Św. Floriana
1	 Zabrze	Zabrze Plac Wolności
1	 Zabrze	Zabrze Karola Miarki
1	 Zabrze	Zabrze de Gaullea
1	 Zabrze	Zabrze Damrota
1	 Zabrze	Zabrze Plac Słowiański
1	 Zabrze	Zabrze Słowackiego
1	 Zabrze	Maciejów Kondratowicza
1	 Zabrze	Maciejów Knurowska
1	 Gliwice	Gliwice Zajezdnia
1	 Zabrze	Zaborze Pętla
1	 Zabrze	Zaborze Lompy
1	 Zabrze	Zaborze Skargi
1	 Zabrze	Zaborze Elektrociepłownia
1	 Zabrze	Zaborze Skansen Luiza
1	 Zabrze	Zabrze Sienkiewicza
1	 Zabrze	Zabrze Św. Floriana
1	 Zabrze	Zabrze Plac Wolności
1	 Zabrze	Zabrze Karola Miarki
1	 Zabrze	Zabrze de Gaullea
1	 Zabrze	Zabrze Damrota
1	 Zabrze	Zabrze Plac Słowiański
1	 Zabrze	Zabrze Słowackiego
1	 Zabrze	Maciejów Kondratowicza
1	 Zabrze	Maciejów Knurowska

Awatar użytkownika
Penny
Posty: 9369
Rejestracja: 14 cze 2008, 20:27
Lokalizacja: Chorzów

#15 Post autor: Penny » 31 gru 2014, 17:57

SQL ogarniam bardzo dobrze. ;-) Gorzej z algorytmami i pisaniem w pythonie. Najlepszego w Nowym Roku. Dzięki za wkład pracy. Podziwiam ja dlatego, że zająłeś się parsowaniem widoków, bo przecież do API dostępu nie mamy.
Ostatnio zmieniony 01 sty 1970, 01:00 przez Penny, łącznie zmieniany 1 raz.

Awatar użytkownika
polaque
Posty: 268
Rejestracja: 09 maja 2014, 23:43
Lokalizacja: Siemianowice Śl.

#16 Post autor: polaque » 31 gru 2014, 18:03

Dziękuję i wzajemnie.

Awatar użytkownika
polaque
Posty: 268
Rejestracja: 09 maja 2014, 23:43
Lokalizacja: Siemianowice Śl.

#17 Post autor: polaque » 02 sty 2015, 17:02

Zrobiłem małą aktualizację bazy oraz skryptu, dzięki czemu wg obliczeń, zapytania wykonują się co najmniej 2 razy szybciej i jest nowa tabela, która bardzo ułatwia szukanie rozkładów, bo przechowuje kursy wraz z informacją o kierunku, tramwaju oraz typie rozkładu, dzięki czemu ilość danych się zmniejszyła oraz łatwiej dla konkretnego tramwaju wyciągnąć kursy, nie latając niepotrzebnie po ogromniej tabeli z rozkładami.

Baza oraz skrypt dostępne wyżej w linku tym samym.

Nawet baza wyjściowa ma na obecną chwilę ok. 8 MB (stara miała ok. 9,5 MB)

I dodaję tu nowe zapytanie, które robi to, co wyżej:

Kod: Zaznacz cały

SELECT timetableRoutes.routeDirection, cities.name, stops.name
FROM timetable
LEFT JOIN timetableRoutes
ON timetableRoutes.routeId = timetable.routeId
LEFT JOIN stops
ON stops.id = timetable.stopId
LEFT JOIN cities
ON stops.cityId = cities.id
WHERE timetableRoutes.busId = 1
GROUP BY timetableRoutes.routeDirection,timetable.countTable, timetable.stopId
ORDER BY timetableRoutes.routeDirection, timetable.routeId, timetable.countTable

Awatar użytkownika
polaque
Posty: 268
Rejestracja: 09 maja 2014, 23:43
Lokalizacja: Siemianowice Śl.

#18 Post autor: polaque » 04 sty 2015, 13:49

Dodałem aktualizację, dzięki której skrypt teraz oznacza kursy niskopodłogowe (i nie).

Dalej pod tym samym linkiem:
https://gist.github.com/sylwke3100/1daa5d17253ddd378588

musicus
Posty: 15
Rejestracja: 14 lis 2014, 21:08
Lokalizacja: Gliwice

#19 Post autor: musicus » 04 kwie 2015, 02:46

Chciałem uruchomić ten skrypt i zainstalowałem brakujące moduły, ale wyskakuje coś takiego:

Kod: Zaznacz cały

Traceback (most recent call last):
  File "C&#58;\Python27\Parser.py", line 1, in <module>
    from gevent import monkey
  File "C&#58;\Python27\lib\site-packages\gevent\__init__.py", line 42, in <module>
    from gevent.hub import get_hub
  File "C&#58;\Python27\lib\site-packages\gevent\hub.py", line 47, in <module>
    from greenlet import greenlet
ImportError&#58; DLL load failed&#58; %1 nie jest prawidłową aplikacją systemu Win32.
i nie wiem, co jest u mnie nie tak, skoro wam działa

Awatar użytkownika
polaque
Posty: 268
Rejestracja: 09 maja 2014, 23:43
Lokalizacja: Siemianowice Śl.

#20 Post autor: polaque » 04 kwie 2015, 12:03

musicus pisze:Chciałem uruchomić ten skrypt i zainstalowałem brakujące moduły, ale wyskakuje coś takiego:

Kod: Zaznacz cały

Traceback &#40;most recent call last&#41;&#58;
  File "C&#58;\Python27\Parser.py", line 1, in <module>
    from gevent import monkey
  File "C&#58;\Python27\lib\site-packages\gevent\__init__.py", line 42, in <module>
    from gevent.hub import get_hub
  File "C&#58;\Python27\lib\site-packages\gevent\hub.py", line 47, in <module>
    from greenlet import greenlet
ImportError&#58; DLL load failed&#58; %1 nie jest prawidłową aplikacją systemu Win32.
i nie wiem, co jest u mnie nie tak, skoro wam działa
A nie pobrałeś biblioteki dla 64 bitowej wersji systemu? Bo jak Pythona masz 32 bitowego to biblioteki dla niego też takie muszą być.

ODPOWIEDZ

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 19 gości