Drzewa w Warszawie

Po ostatnich utarczkach z R i api przy zbieraniu danych o Black Sabbath postanowiłem wziąć się za coś lżejszego i bardziej skupionego na Tableau. W dzisiejszym wpisie będą ciekawe dane jak rozwiązaniu z Tableau. Skupię się na otwartych danych dotyczących drzew w Warszawie, pochodzących ze strony Urzędu Miasta.

Pozyskanie danych

Jak już wspomniałem dane pochodzą ze strony Urzędu Miasta. Aby z nich skorzystać nie trzeba się rejestrować (co się okazało przypadkiem przy odpalaniu skryptu). Pomimo uzyskania klucza do API skrypt działa bez niego. Poniżej uproszczona wersja skryptu R.


Skrypt zapisuje dane do pliku CSV zawierającego 140 tysięcy rekordów. Dane są dosyć zanieczyszczone, jednak dla nas będą wystarczające.

Wizualizacja

Ostatecznie stworzyłem dwa dashboardy.

Efekt końcowy (kliknij aby przejść do Tableau Public)
Efekt końcowy (kliknij aby przejść do Tableau Public)
Tym razem zastosowałem kilka ciekawych rozwiązań, wśród nich:
  • wykres typu hexbin
  • wybór typu wykresu - sterowany parametrem
  • podział danych na mapie po dzielnicach 

Wykres HexBin

 A więc po kolei. Jak zrobić wykres hexbin? Zasadniczo jest to bardzo proste - używamy do tego funkcji HEXBINX i HEXBINY, które to grupują dane do koszyków. Jako argumenty podajemy długość i szerokość geograficzną. Teraz wystarczy użyć tych wartości jako kolumn i rzędów jak przy zwykłych danych geograficznych.


Jednak jak widać na powyższym obrazku, poza wartościami geograficznymi używam jeszcze parametru. Takie rozwiązanie pozwala na kontrolę ilości koszyków, a dokładniej ich zagęszczenie, co pokazują poniższe zrzuty ekranu.

Parametr ustawiony na 50
Parametr to dalej 50, ale wielkość kafelków została dostosowana ręcznie


Parametr ustawiony na 200

Po kilku próbach zdecydowałem się ustawić parametr na 200. Po dobraniu wartości parametru trzeba dobrać odpowiednią wielkość sześciokąta (ręcznie). Musimy pamiętać, że Tableau domyśle nie pozwala na robienie takich wykresów. Jest to więc zwykły wykres punktowy a sam sześciokąt musimy ściągnąć z google i użyć jako custom shape (jak dodać własny custom shape pisałem tutaj). Aby całość wyglądała estetycznie musimy jeszcze dopasować szerokość wykresu, tak, aby nie było za dużych przerw pomiędzy kolumnami.

Wybór typu wykresu

Opisane tutaj rozwiązanie pozwala na wybór przez użytkownika typu wykresu z jakiego chce skorzystać. Jednak ta sama metoda pozwala na przełączanie między dowolnymi sheetami w dashboardzie. Całością steruje parametr - nazwałem go Hex_Map_Param.

Parametr

Jak to zwykle bywa, paremetru użyjemy do sterowania polem kalkulowanym. Będzie to pole dające jako wynik wartosć True lub False czyli boolean.

Pole kalkulowane

Następnie pole to wrzucam jako filtr na wykresy którymi ma sterować, ustawiając odpowiednie wartości (1, czyli True, dla wykresu Hex i 0, czyli False, dla zwykłej mapki).

Pole jako filtr na wykresie Hex

Bardzo ważne jest, aby na dashboardzie umieścić oba wykresy w jednym kontenerze. Filtr działa tak, że wykres po prostu się zamyka (nie ładuje danych), więc umieszczając oba wykresy w jednym kontenerze jeden po prostu się zwija.

Inny parametr steruje danymi, które odpowiadają za kolor kafelka - rozwiązanie to opisałem w tym wpisie.

Własne dane lokalizacyjne, czyli jak dograć dzielnice

Długo zastanawiałem się jak w Tableau zejść niżej niż domyślny poziom województw. Dzięki rozwiązaniu, które zaraz opiszę zszedłem do poziomu dzielnic, jednakże można je też wykorzystać przy powiatach lub gminach. Uważam, że to najciekawsza rzecz w tej analizie.

Dzielnice Warszawy w Tableau

Aby osiągnąć taki efekt potrzebujemy odpowiednich danych. Możemy je pobrać ze strony Centralnego Ośrodka Dokumentacji Geograficznej i Kartograficznej. Interesują nas dane państwowego rejestru granic i powierzchni jednostek podziałów terytorialnych kraju - PRG, a dokładniej plik SHP zawierający jednostki ewidencyjne - w oddzielnych plikach dostępne są powiaty i gminy. Pliku tego używamy do stworzenie nowego źródła danych w Tableau. Po schowaniu niepotrzebnych wygląda to tak:



Jak widać jest problem z formatowaniem tekstu. Ja stworzyłem pole kalkulowane Nazwa_Proper, które to zawiera poprawne nazwy dzielnic. Jednak jest to tylko rozwiązanie ad hoc, gdyż zrobiłem to ręcznie poprzez funkcje warunkowe. Gdyby jednak chodziło o powiaty lub gminy w całej Polsce warto zrobić bo prawidłowo. Prawidłowe nazwy dzielnic potrzebne są aby można było zblendować oba źródła danych. Przed tą operacją trzeba jednak ustawić odpowiedni związek źródeł danych.



Teraz możemy użyć zmiennej Geometry zawierającej kształt interesującego nas obszaru. Do tego musimy dołożyć dzielnicę na poziomie detail. Na zrzucie zaznaczony jest także wspomniany wcześniej filtr wykresu.



Tej metody możemy użyć przy dowolnych plikach SHP - w łatwy sposób możemy zaimportować więc do Tableau np. podział na regiony w naszej firmie. 

Komentarze

Popularne posty z tego bloga

IronViz 2018.2 - Best New Entry i drugie miejscie ogółem

SprytneSztuczki#1 - 9 sprytnych funkcji Tableau, które ułatwią Ci życie

Praktyczne użycie kolorów w wizualizacji danych