Czy da się za pomocą jednego wykresu pokazać funkcjonowanie komunikacji zbiorowej we Wrocławiu? Jak najbardziej. W dzisiejszym wpisie pokażę, w kilku krótkich krokach, jak można zwizualizować działanie komunikacji miejskiej.

Teraz czas na spełnienie tej, nieco buńczucznej, zapowiedzi. Nie napiszę o wielu istotnych kwestiach jak szybkość jazdy, klimatyzacja pojazdów czy metrobus. Pokażę za to, gdzie i jak często kursują tramwaje i autobusy. Wszystkie dane zostały pobrane ze strony Wrocławia. Część z BIP, cześć ze strony o rozkładach jazdy.

Zacznijmy od rzeczy podstawowej, czyli gdzie znajdują się przystanki

przystanki_mpk_wroclaw_lokalizacja

Jak się robi takie cudo? Oczywiście w R. W tym celu korzystamy z pakietu ggmap. Pakiet ten został stworzony do wizualizacji przestrzennej. Jak każda rzecz, w której maczał palce Hadley Wickham, jest to świetnie dopracowane narzędzie. Umożliwia, między innymi, ściąganie map google maps i rysowanie na nich. Miejsce, którego mapę chcemy ściągnąć, wpisujemy w R dokładnie tak samo jak robilibyśmy to na stronie internetowej.

geocode("wrocław")
pwr <- "politechnika wrocławska"
qmap(pwr, zoom = 14)

Narzędzie jest gotowe, potrzeba tylko danych. Współrzędne geograficzne przystanków ściągnąłem ze strony Wrocławia. Poniżej zamieszczam kod dla rysunku z przystankami zamieszczonego wyżej.

library(ggmap)
przystanki dec=",", colClasses=c("numeric","numeric","numeric","factor"))
names(przystanki) levels(przystanki$type) theme_set(theme_bw(16))

wroclawMap + geom_point(aes(x = lon, y = lat, colour = type), data = przystanki) +
             ggtitle("Lokalizacja przystanków komunikacji miejskiej we Wrocławiu") +
             theme(plot.title=element_text(size=20, face="bold", colour="steelblue"))

Zamiast punktów na mapie, które są dosyć nieczytelne, można narysować zagęszczenie przystanków

przystanki_mpk_wroclaw

WroclawMap +
  stat_density2d(aes(x = lon, y = lat, fill = ..level.., alpha = ..level..),
                 size = 2, bins = 8, data = przystanki, geom = "polygon") +
  scale_fill_gradient('Zasięgnkomunikacjinmiejskiej', guide = "colourbar") +
  scale_alpha(range = c(.4, .75), guide = FALSE) +
  guides(fill = guide_colorbar(barwidth = 10, barheight = 1))

Każdy uważny czytelnik zmiarkuje zaraz, że istotne jest nie to ile mamy przystanków w pobliżu, ale jak często coś z nich odjeżdża. Żeby odpowiedzieć na to pytanie pobrałem rozkłady jazdy. Podobnie jak dla pobrania danych wyborczych używałem basha, seda i grepa. A oto wynik moich wysiłków. Kolor kropek odpowiada temu, czy na przystanku zatrzymują się tramwaje czy autobusy, ich wielkość - liczbie połączeń na dobę.

przystanki_mpk_wroclaw_natezenie

I teraz czas na kluczowy wykres. Podobnie jak wcześniej, zamiast zaznaczać poszczególne przystanki, można narysować gęstość natężenia kursów. Im bardziej wyrazisty kolor, tym więcej połączeń. Częstość kursów rysujemy w podziale na tramwaje i autobusy.

natezenie_ruchu_mpk_wroclaw

Na powyższych rysunkach uwzględnione są wszystkie kursy w ciągu całego tygodnia, z wyłączeniem linii 435, 900, 901, 910.

W następnym wpisie pokażę, za pomocą animacji, jak zmienia się liczba kursów mpk z godziny na godzinę.

Jeśli ktoś ma jakiś inny pomysł na użycie tych danych, to zachęcam do dzielenia się nimi w komentarzach.