Power BI report about daycare facilities in Gdansk.
👉 Zobacz raport na żywo w przeglądarce:
LINK
Cel: praktyczne wykorzystanie umiejętności pracy z Power Query, Power BI i DAX.
Dane: publicznie dostępne dane z Rejestru Żłobków, uzupełnione o inne informacje wymienione w sekcji poniżej. Stan na rok 2022/2023.
Ten projekt wymagał ode mnie bardzo dużo zakulisowej pracy z zebraniem, pobraniem, połączeniem oraz przekształcaniem danych.
Po raz kolejny przekonałam się, jak bardzo lubię "dłubanie" w Power Query :)
Podstawą do stworzenia raportu były dane z Rejestru Żłobków, dostępne publicznie na stronie dane.gov.pl.
Tabela zawiera informacje o nazwie i numerze rejestru, danych adresowych, kontaktowych, ilości miejsc i zapisanych dzieci, opłatach oraz udogodnieniach i jest oznaczona jako aktualna na dzień 23.06.2023. Po wstępnym przejrzeniu danych zauważyłam jednak, że część z nich jest nieprawidłowa - na liście znajduje się np. placówka, o której wiem, że jest zamknięta od ponad roku.
Aby uzyskać aktualną listę placówek, posiłkowałam się danymi z portalu Empatia (empatia.mpips.gov.pl). Tu pobranie listy było już trudniejsze: pozycje są ładowane na bieżąco w ramce zamieszczonej wewnątrz strony. Udało mi się jednak dotrzeć do źródła ramki, ręcznie rozwinąć całą potrzebną listę, zapisać stronę na dysku i takie dane załadować do Power Query. Jak widać poniżej nie były one w zbyt przyjaznym formacie:
Dzięki temu, że każda placówka ma przypisany unikalny numer w rejestrze, możliwe było połączenie tabeli z danymi z rejestru żłobków i uzyskanie ostatecznej listy 102 placówek. Trudno samodzielnie określić stopień rzetelności danych, szczególnie że informacje dot. opłat i liczby wolnych miejsc mogą zmieniać się wielokrotnie w ciągu roku. Zakładam jednak, że oddają one ogólny obraz sytuacji żłobków i klubów dziecięcych w Gdańsku.
Czyszczenie danych objęło m.in:
- usunięcie zbędnych kolumn (m.in. danych kontaktowych);
- wyodrębnienie ulicy i numeru z adresu placówki;
- ujednolicenie danych w tabelach dot. opłat (np. null lub 0 w przypadku pustych pól);
- ustawienie odpowiednich typów danych.
Informacje nt. listy placówek publicznych oraz liczby grup pochodzą ze strony Gdańskiego Zespołu Żłobków (gzz.gda.pl).
Aby przeanalizować sytuację w poszczególnych dzielnicach, wykorzystałam listę sektorów i dzielnic dostępną na stronie Czyste Miasto Gdańsk (czystemiasto.gdansk.pl).
Po wyodrębnieniu z Rejestru Żłobków osobnej kolumny zawierającej nazwę ulicy (bez numeru i przedrostków jak Al., ul., itp) mogłam użyć tej kolumny jako klucza do połączenia z tabelą dot. dzielnic. W przypadku dłuższych ulic, przypisanych do więcej niż jednej dzielnicy, przyporządkowałam informacje ręcznie - takich przypadków było raptem kilkanaście.
Dane dot. liczby mieszkańców poszczególnych dzielnic pobrałam ze strony Miasta Gdańsk (gdansk.pl).
Czyszczenie danych: w przypadku wszystkich powyższych danych konieczne było ujednolicenie pisowni nazw dzielnic (np. Zaspa Rozstaje vs Zaspa-Rozstaje), tak aby pokrywały się z nazwami dzielnic zakodowanymi w pliku z mapą, co umożliwi ich późniejszą prawidłową wizualizację.
Odrębną kwestią było przedstawienie danych na mapie dzielnic miasta. Nietety Power BI nie posiada dla Polski wbudowanych map na tak szczegółowym poziomie.
Skorzystałam z udostępnionych przez Miasto Gdańsk plików SHP z granicami dzielnic (dane.gov.pl), a następnie za pomocą narzędzia mapshaper.org przekształciłam je do formatu .json obsługiwanego przez Power BI.
Na potrzeby obliczenia wskaźnika liczby żłobków na 1 tysiąc mieszkańców wykorzystałam:
- Dane dot. ludności kraju na 31.12.2022 - z publikacji "Sytuacja demograficzna Polski do roku 2022" dostępnego na stronie GUS
- Dane dot. ogólnopolskiej liczby żłobków w 2022 - z publikacji "Żłobki i Kluby Dziecięce w 2022 roku" dostępnej na stronie GUS
Do zestawu danych dodałam takie kolumny jak:
- "Publiczny" (TAK / NIE) - dodane ręcznie, pozwalające wyodrębnić z listy żłobki publiczne;
- "Przepełniony" (TAK / NIE) - kolumna sprawdzająca, czy liczba dzieci zapisanych przewyższa liczbę dostępnych miejsc;
- "Wolnych miejsc" - kolumna warunkowa: różnica między liczbą miejsc a liczbą zapisanych dzieci, zwracająca 0 zamiast liczb ujemnych gdy żłobek jest przepełniony.
- "Wielkość placówki" (Przedziały liczbowe: do 15, 16-20, 21-25, 26-30, 31-50, 50-80, 80-100 i 100+), przedziały ustalone samodzielnie na podstawie częstotliwości występowania.
Miary w DAX:
Kalkulacja do kafelka pokazującego koszt żłobka publicznego, tak aby w/w wartość nie była filtrowana przez inne elementy raportu.
Miesięczny koszt PUBL =
CALCULATE (
AVERAGE(Finanse[Opłata za pobyt - miesięczna]),
ALLEXCEPT(Finanse, Finanse[Publiczny]),
Finanse[Publiczny] = "TAK",
ALL('Żłobki_info')
)
Kalkulacja do kafelka pokazującego liczbę miejsc w wybranej dzielnicy (zakładka mapy) - w taki sposób, aby przy braku placówek wyświetlał "0" zamiast "(blank)".
MD Liczba miejsc = CALCULATE(
IF(SUM(Dzielnice_info[D Liczba miejsc])=0,"0",SUM('Żłobki_info'[Liczba miejsc])),
CROSSFILTER('Żłobki_info'[Dzielnica], Dzielnice_info[Dzielnica], Both)
)
Kalkulacja do kafelka pokazującego przedział opłat - wartości zmieniające się w zależności od opcji zaznaczonej w pozostałych elementach na stronie.
Opłata mc przedział =
CONCATENATE(MIN(Finanse[Opłata za pobyt - miesięczna]),
CONCATENATE(" - ",
CONCATENATE(MAX(Finanse[Opłata za pobyt - miesięczna]), " zł")))
Zobacz raport na żywo w przeglądarce:
LINK