PowerBI_ShapeMaps_000

Wizualizacja danych administracyjnych Polski z wykorzystaniem Power BI Shape Map

Na 102 spotkaniu grupy Data Community w Krakowie miałem przyjemność wysłuchać sesji Jacka Nosala o mapach w Power BI. Jacek pokazał kilka problemów związanych z obsługą nazw geograficznych przez mapy Binga dostępne w standardowej formatce wbudowanej w Power BI. Zainspirowało mnie to do napisania niniejszego artykułu i przetestowania nieco zapomnianego komponentu którym jest Shape Map pozwalającego na wizualizacje obszarowe. O tym i kilku dodatkowych rzeczach napisałem w niniejszym artykule do lektury, którego serdecznie zachęcam.

Nie zwlekając jako pierwszy przykład spróbujemy przedstawić na mapie wybrane dane na poziomie województw naszego kraju. Zbiór danych jaki wykorzystamy nie jest zbyt skomplikowany (bo też nie o to chodzi) i będzie obejmował przeciętne wynagrodzenia brutto dla poszczególnych województw dla roku 2018. Dane pochodzą z Głównego Urzędu Statystycznego i możemy je bez większego problemu znaleźć na stronie stat.gov.pl Pierwszym krokiem jak zawsze będzie pobranie danych do Power BI – najprostszym sposobem aby tego dokonać jest użycie konektora Web:

Dane na stronie GUS mają formę prostej tabeli dlatego też wystarczy, że wkleimy URL do uproszczonego interfejsu konektora Web:

Jak zapewne wiecie tego typu konektor jest najprostszym narzędziem do Webscrapingu i w momencie podania URLa Power BI połączy się do strony, przeanalizuje jej kod i wyświetli nam tabele jakie znalazł pod tym linkiem. W przedstawionym przypadku interesuje nas tabela o nazwie “Table 0” – po jej wyświetleniu dostaniemy podgląd danych jakie są w niej zawarte:

Oczywiście dane tego typu bardzo często należy przetransformować i dostosować do interesującej nas formy. Na powyższym zrzucie łatwo można zauważyć, że wiersze numer 1 oraz 2 są całkowicie zbędne – klikamy zatem Transform Data aby przejść do edytora Power Query. Tam wybieramy opcję Remove Rows -> Remove Top rows aby móc zdefiniować zbędne dla nas wiersze:

Patrząc na dane musimy usunąć dwa pierwsze wiersze i to też możemy zrobić w oknie konfiguracyjnym:

W dalszej kolejności musimy ustalić typy danych dla każdej z trzech kolumn najprościej osiągnąć to wybierając Transform -> Detect Data Type:

Po wykonaniu tej operacji powinniśmy otrzymać następujące typy:

  •  LP – Whole Number,
  • Województwo – Text,
  • Przeciętne miesięczne wynagrodzenie (w zł) – Decimal,

Jeśli nie udało się tego dokonać należy wykonać kroki odpowiednie do osiągnięcia powyższego wyniku jak np. ustalić separator dziesiętny dla kolumny numer trzy. Następnie możemy kliknąć Close & Apply aby załadować dane do Power BI. Pierwszy krok za nami! W dalszej kolejności musimy wybrać formatkę na której będziemy przedstawiać nasze dane. Mamy kilka możliwości jednakże ja wybrałem wspomnianą we wstępie Shape Map (jeżeli jej nie widzicie u siebie w Power BI Desktop to należy tą funkcjonalność włączyć w Preview Features).

Po jej wybraniu abyśmy mogli przejść do konfiguracji to musimy wrzucić do niej jakieś dane i tak też zrobiłem. Na pole Location wrzuciłem Województwo, a na pole Color Saturation wrzuciłem przeciętne wynagrodzenie:

Niestety domyślnie zapewne nie zobaczymy nic ciekawego tylko domyślny szablon mapy przedstawiający Stany Zjednoczone:

Z całą pewnością nie jest to mapa, która by nas interesowała. We właściwościach odnajdziemy opcję, która pozwoli nam zmienić kontur – niestety nie znajdziemy tam mapy Polski:

Czy to oznacza, że ta wizualizacja jest dla nas kompletnie bez użyteczna? Oczywiście, że nie! Możemy również dostrzec możliwość dodania własnej mapy:

Dodanie mapy to tak naprawdę dodanie pliku json z danymi na temat konturu mapy. Ten specjalny typ pliku json nazywamy plikiem topojson. Skąd zatem możemy coś takiego wziąć? Najprostszą metodą będzie znalezienie gotowych plików do wykorzystania. Ciekawe możliwości oferuje strona GIS (link), gdzie możemy pobrać plik z podziałem administracyjnym zarówno na poziomie województwa jak i nawet w podziale na powiaty czy gminy:

Jak możecie zauważyć na powyższym zrzucie, ze strony GIS możemy pobrać interesujące nas pliki. Warto zwrócić uwagę, że pobrane pliki nie są w formacie topojson i nie możemy ich wrzucić bezpośrednio do Power BI. Musimy je najpierw przekonwertować, a świetnym narzędziem do tego celu jest mapsharper. Witryna ta potrafi przekształcić wskazane pliki na kilka różnych formatów. Cała operacja sprowadza się do przerzucenia pliku metodą przeciągnij – upuść i wybrania formatu do eksportu:

Tutaj mała uwaga, kolega Piotr w komentarzu poniżej zwrócił uwagę, że wygenerowaliśmy kontur o najwyższej szczegółowości i może to działać dosyć wolno. Dlatego też warto użyć przycisku simplify aby nieco uprościć powstały plik przy tym zwiększając jego wydajność:

Mając już plik topojson możemy go zaimportować do Power BI klikając Add Map tak jak zostało to przedstawione poniżej:

 

Każdy obszar na mapie jest opatrzony pewnym kluczem po którym możemy mapować dane do tego właśnie obszaru. Każdy z regionów posiada zestaw metadanych i możemy się z nimi zapoznać po najechaniu myszą na interesujące nas województwo:

Nieco wygodniej możemy dotrzeć do tych danych wybierając opcję Shape -> View Map Keys:

Widok ten da nam zbiorcze informacje o każdym kluczu mapy:

Warto zwrócić uwagę na to jak zapisane są poszczególne województwa ponieważ dokładnie taki tekst musimy mieć w naszych tabelach żeby mapowanie przebiegło poprawnie. W tym konkretnym przypadku mamy polskie znaki oraz dodatkowo nazwy dwuczłonowe są oddzielone myślnikiem bez żadnych spacji. Po przeciągnięciu pola Województwo do opcji Location oraz przeciętnego miesięcznego wynagrodzenia na Color Saturation widzimy, że dane bardzo dobrze się zmapowały:

Całkiem fajna, a zarazem prosta mapka wizualizująca określone zjawisko. Dla porównania zrobiłem analogiczną mapę z wykorzystaniem standardowej formatki opartej na mapach Bing:

Jak możecie zauważyćna powyższym zrzucie ekranowym Bing bez większego problemu rozpoznaje kontury województw. Z tego też powodu aby nieco utrudnić spróbujmy wykonać analogiczną wizualizację tym razem na analogicznych danych tym razem dla powiatów. Zbiór tego typu również możemy znaleźć w bazach GUS jednakże tym razem dla urozmaicenia użyje innego źródła. W analogiczny sposób do przedstawionego wcześniej ściągnąłem również z GIS topojson dla powiatów. W pierwszej kolejności wykorzystałem standardową formatkę i dostałem następujący rezultat:

Dosyć dużo “dziur” i “białych plam” – oznacza to nic innego jak to, że Bing nie zrozumiał wszystkich przekazanych nazw geograficznych jakie mamy w naszych zbiorze. Dodatkowo gdy bardziej wgłębimy się w poszczególne powiaty zobaczymy, że ich kontury nie mapują się idealnie tak jak powinny. W przypadku Shape Map sytuacja wygląda nieco lepiej ale nadal nie jest to to czego byśmy oczekiwali:

Po najechaniu na białe plamy zauważymy, że większość z nich odnosi się do miast na prawach powiatu czyli np. powiat Kraków, powiat Rzeszów itp. Po krótkim sprawdzeniu możemy dojść do wniosku, że w danych powiaty tego typu zapisane są nieco inaczej:

Widzimy,  że zamiast zapisu “Powiat Kraków” mamy zapis “Powiat m.Kraków” i to jest powód występowania “białej plamy”:

Jak coś takiego naprawić? Mamy tak naprawdę dwa wyjścia. Pierwszym jest modyfikacja pliku topojson, który możemy zmieniać w dowolnym edytorze tekstu. Drugą opcją jest edycja naszych danych aby dostosować je do nomenklatury użytej w topojson. W moim odczuciu druga opcja jest znacznie bardziej korzystna i łatwiejsza dlatego też ją właśnie wybrałem. Transformacja dostosowująca dane to prosta zamiana wartości gdzie pozbywamy się “m.”:

Po jej implementacji większość białych plan zniknęło jednak nie są to absolutnie wszystkie z nich:

Pozostałe niedoskonałości wiążą się z trzema problemami:

  1. Warszawa w danych zapisana jest jako “Powiat  st. Warszawa” – musimy zatem wyciąć ”  st. ” z nazwy.
  2. W niektórych nazwach powiatów występują podwójne spacje np. “Powiat  Legnica”
  3.  Niektóre regiony mają zapisane słowo “powiat” małą literą zamiast wielką.

Problemy numer jeden i trzy łatwo naprawić w edyotrze Power Query analogicznie jak powyżej dlatego też postanowiłem pominąć pełny ich opis. Problem numer dwa to z całą pewnością jakaś nieścisłość w pliku topojson i tam też postanowiłem to naprawić. Otwarłem go w Notepad++ i wybierając skrót CTRL + H  uruchomiłem okno “Replace” i podmieniłem słowo “powiat” na “Powiat”:

Po tych dodatkowych dostosowaniach zaimportowałem raz jeszcze plik topojson i teraz widać, że mapa jest w 100% wypełniona:

Teraz nie pozostaje nic innego jak zróżnicowanie kolorów na mapie pod kątem zróżnicowania wysokości wynagrodzenia:

Efekt wygląda całkiem zadowalająco szczególnie, że mapa jest interaktywna i reaguje na selekcje na slicerach itp. Jak możecie zauważyć po niniejszym artykule praca z mapami wcale nie jest trywialna i zazwyczaj wiąże się z dodatkową pracą jaką musimy wykonać dostosowując albo dane same w sobie albo pliki topojson, które chcemy użyć. Wszystko oczywiście zależy od zastosowań jednakże mam nadzieję, że podejście takie jak zaprezentowałem w niniejszym wpisie może być rozwiązaniem niektórych problemów. Pozdrawiam serdecznie!

Adrian Chodkowski
Follow me

7 Comments

  1. Problemów z identyfikacją powiatów można w łatwy sposób uniknąć posługując się kodami GUS TERYT. Kody te, a nie nazwy są podstawą organizacji danych terytorialnych GUS. Kody są używane zarówno w tabelach źródłowych z danymi o wybranych wskaźnikach jak i w pliku json z konturami jednostek administracyjnych. Wystarczy dokonać powiązania w oparciu o te kody.

  2. Super opcja, brakowało mi tego w PowerBi. Natomiast, szkoda że nie użyje tego z powodu mega powolnego działania. Wystarczy jedna mapa z powiatami i nie da się korzystać aplikacji.

    • Cóż, rzeczywiście shape map nie jest bardzo szybka w przypadku dużej ilości punktów jednak.. zawsze mogło być gorzej 🙂 W niektórych przypadkach nie wymagających super szybkich raportów może znaleźć zastosowanie. Pozdrawiam i dzięki za komentarz.

      Update: Patrząc na poniższy komentarz Piotra to przyczyną jest zbyt wysoka rozdzielczość pliku shape:)

  3. Pliki shape mogą mieć różną ‘rozdzielczość’ – jeżeli używacie nie przekształconych plików z zasobu publicznego, to prawdopodobnie jedziecie na pełnej 🙂 Dla normalnego oglądania na ekranie urządzenia można tą rozdzielczość znacznie zmniejszyć bez szkody dla jakości obrazu postrzeganego ludzkim okiem.

Leave a Reply

Your email address will not be published. Required fields are marked *