Standaryzacja nazw miast i ulic: czyszczenie tekstu w Power Query krok po kroku

0
65
Rate this post

Krótki brief pytań i decyzji, które trzeba podjąć na starcie

Zanim zaczniesz standaryzację nazw miast i ulic w Power Query, zatrzymaj się na chwilę przy kluczowych pytaniach. Od odpowiedzi zależy cały proces i uniknięcie późniejszych poprawek:

  • Czy potrzebujesz jednej formy finalnej do prezentacji, czy dwóch kolumn: technicznej (do łączeń) i prezentacyjnej (do raportów)?
  • Czy zachowujesz polskie znaki w wynikowej kolumnie, czy usuwasz je tylko w kolumnie technicznej do dopasowań?
  • Jakie skróty typów ulic akceptujesz: „ul.”/„al.” czy pełne „Ulica”/„Aleja”? Jedna konsekwentna decyzja na całą bazę.
  • Jak traktujesz wielkość liter: UPPER CASE, Proper Case (inicjały wielkie), czy oryginał po oczyszczeniu?
  • Czy będziesz łączyć dane ze słownikiem referencyjnym (np. TERYT SIMC/ULIC)? Jeśli tak – jak konstruujesz klucze dopasowania?
  • Jakie odstępstwa tolerujesz w fuzzy match: progi podobieństwa, dopuszczenie błędów w literach, ignorowanie znaków diakrytycznych?
  • Jak rejestrujesz wyjątki: tabela „Do weryfikacji” czy automatyczne reguły naprawcze?

Najczęstsze błędy w praktyce i bezpieczne korekty

Błąd 1: Ukryte znaki i „dziwne” spacje zostawione bez czyszczenia

Dlaczego szkodzi: wizualnie tekst wygląda dobrze, ale dopasowania i grupowania nie działają. Powstają „duplikaty-widma”.

Jak to wychwycić:

  • Filtrowanie po równości zwraca kilka wersji tej samej nazwy.
  • Długość tekstu różni się mimo identycznego wyglądu („Kraków” vs „Kraków ”).

Jak zrobić lepiej:

  • Transformuj kolejno: Formatuj → Oczyść (Text.Clean), potem Przytnij (Text.Trim), a następnie zamień wielokrotne spacje na pojedynczą (np. split po spacji i ponownie połącz).
  • Ujednolić myślniki: zamień „–”/„—” na „-”, usuń spacje wokół wg jednej reguły (np. „Gdańsk-Śródmieście”).

Krótki przykład: „Poznań ” (NBSP) ≠ „Poznań”. Po oczyszczeniu i przycięciu znikają rozjazdy w łączeniach.

Standaryzacja nazw miast i ulic: czyszczenie tekstu w Power Query krok po kroku
Źródło: Pexels | Autor: DS stories

Błąd 2: Usuwanie polskich znaków w kolumnie prezentacyjnej

Dlaczego szkodzi: raporty wyglądają nieprofesjonalnie („Lodz”, „Zielona Gora”), a użytkownicy nie ufają danym.

Jak to wychwycić:

  • Porównaj kolumnę raportową z oryginałem w kilku losowych rekordach.

Jak zrobić lepiej:

  • Utrzymuj dwie kolumny: techniczną (bez diakrytyków do dopasowań) i prezentacyjną (z polskimi znakami). W Power Query użyj usuwania akcentów tylko w kolumnie klucza (np. Text.RemoveDiacritics).
  • W kolumnie prezentacyjnej stosuj czyszczenie, ale bez pozbawiania diakrytyków.

Błąd 3: Skróty typów ulic bez spójnej mapy

Dlaczego szkodzi: „ul. Jana Pawła II”, „Ulica Jana Pawła II” i „ul Jana Pawła II” traktowane są jak różne wartości. Fuzzy match zaczyna łączyć błędnie lub nie łączy wcale.

Jak to wychwycić:

  • Szybkie „Group By”/„Grupuj według” na kolumnie ulicy i policzenie wariantów skrótów na początku nazwy.

Jak zrobić lepiej:

  • Opracuj słownik skrótów i form pełnych (np. „ul”, „ul.” → „ul.”; „al”, „al.” → „al.”; „plac”, „pl.” → „pl.”).
  • Stosuj zamiany warunkowe na początku ciągu (Text.StartsWith) lub tokenizację pierwszego słowa, by nie zmieniać części wewnątrz nazwy („Most Poniatowskiego” nie powinien stać się „M.”).
  • Przechowuj słownik w tabeli (Excel/SharePoint) i łącz (Merge) zamiast ręcznie „Zamień wartości”. Dzięki temu zmiany są centralne i wersjonowalne.

Krótki przykład: „al Jerozolimskie” → „al. Jerozolimskie”; „Plac Konstytucji” → „pl. Konstytucji”.

Błąd 4: Zła kolejność transformacji

Dlaczego szkodzi: zamiana skrótów po „Proper Case” bywa nieskuteczna („UL.” ≠ „Ul.”), a czyszczenie po dopasowaniach psuje już zbudowane klucze.

Jak to wychwycić:

  • W Query Settings przejrzyj kroki: czy czyszczenie i normalizacja spacji są na początku, a tworzenie kluczy dopiero po ujednoliceniu treści?

Jak zrobić lepiej (proponowana sekwencja):

  • 1) Clean → Trim → normalizacja spacji i myślników
  • 2) Normalizacja skrótów (słownik)
  • 3) Usunięcie dopisków dzielnic/osiedli, jeśli klucz ma dotyczyć tylko miasta/ulicy
  • 4) Docelowa wielkość liter (Upper/Proper) dla prezentacji
  • 5) Budowa kolumny klucza technicznego: bez diakrytyków, bez znaków specjalnych

Błąd 5: Ignorowanie łączników, nawiasów i dopisków dzielnic

Dlaczego szkodzi: „Kraków (Nowa Huta)” vs „Kraków” lub „Warszawa-Bielany” vs „Warszawa” – dopasowania do SIMC nie trafią.

Jak to wychwycić:

  • Wyszukaj nawiasy „(” lub myślniki w kolumnie miasta, sprawdź udział procentowy.

Jak zrobić lepiej:

  • Na potrzeby klucza miejskiego odetnij dopiski po „(” i po „-” tam, gdzie to ewidentnie dzielnice/dzielnice-stare. Zostaw pełną formę w kolumnie prezentacyjnej.
  • Dla wyjątków (np. „Jastrzębie-Zdrój” – myślnik jest częścią nazwy) trzymaj białą listę wyjątków w osobnej tabeli i stosuj ją przed regułą odcinania.

Błąd 6: Fuzzy match bez ograniczeń i bez transformacji wstępnych

Dlaczego szkodzi: zbyt niski próg i brak transformacji powodują błędne łączenia („Sadowa” → „Sadowa Górna”).

Jak to wychwycić:

  • Przegląd kolumny „similarity”/wyników scalania na próbce – szukaj oczywistych pomyłek.

Jak ustawić fuzzy match bezpiecznie

Jak zrobić lepiej:

  • Najpierw normalizacja, potem fuzzy. Zrób klucze pomocnicze: bez diakrytyków (Text.RemoveDiacritics), bez znaków specjalnych (Text.Select z zestawem [a–z 0–9 i spacja]), bez podwójnych spacji.
  • Łącz po kompozycie. Zbuduj klucz „Miasto|Ulica” zamiast samej ulicy. To drastycznie zmniejsza fałszywe trafienia (np. „Piłsudskiego” w wielu miastach).
  • Ustaw próg podobieństwa rozsądnie: 0,9–0,92 dla ulic; 0,92–0,95 dla miast. Lepiej mieć więcej rekordów „Do weryfikacji” niż błędne sparowania.
  • Włącz ignorowanie wielkości liter i spacji w ustawieniach fuzzy. Diakrytyki usuń wcześniej w kluczu technicznym, a nie w opcji łączenia.
  • Użyj tabeli transformacji (synonimy/skróty) przed fuzzy: „al.”⇄„aleja”, „pl.”⇄„plac”, „św.”⇄„świętego”. Fuzzy nie jest słownikiem.
  • Ogranicz liczbę dopasowań na wiersz i wybierz najbliższe (jeśli wersja pozwala). Potem filtruj wyniki po similarity ≥ progu kontrolnym.

Krótki przykład: klucz_tech = Proper(Clean(Trim(Text.RemoveDiacritics([Miasto]) & ” | ” & Text.RemoveDiacritics([Ulica])))); fuzzy na kluczu_tech z progiem 0,92 i tabelą skrótów.

Błąd 7: Łączenie ulic bez kontekstu miasta

Dlaczego szkodzi: „Kościuszki” czy „Słoneczna” występują w setkach miejscowości. Fuzzy po samej nazwie ulicy łączy rekordy z innym miastem.

Jak to wychwycić:

  • Po scaleniu sprawdź udział wierszy z wieloma trafieniami oraz przykłady, gdzie miasto po lewej ≠ miasto po prawej.

Jak zrobić lepiej:

  • Kompozyt: [województwo|powiat|gmina|miasto|ulica] lub minimum [miasto|ulica].
  • Gdy masz TERYT SIMC: łącz najpierw miasto do SIMC, dopiero potem ulicę do ULIC w obrębie dopasowanego identyfikatora miejscowości.

Błąd 8: Zostawianie numerów domów w kolumnie ulicy

Dlaczego szkodzi: „ul. Słoneczna 12/4” nie dopasuje się do słownika ULIC (bez numeracji), a fuzzy doda chaos.

Jak to wychwycić:

  • Wyszukaj wzorce cyfr na końcu ciągu: kończy się na [0–9] lub zawiera „/”.

Jak zrobić lepiej:

  • Rozdziel: Ulica = do pierwszego wystąpienia numeru; Numer = reszta. W M: użyj skanu od końca i odetnij ciąg ostatnich tokenów cyfrowych wraz z „/”, „A”, „B”.
  • Najpierw oczyść skróty i spacje, potem tnij. Przykład: „ul. Jana III Sobieskiego 3A” → Ulica: „ul. Jana III Sobieskiego”, Numer: „3A”.
Standaryzacja nazw miast i ulic: czyszczenie tekstu w Power Query krok po kroku
Źródło: Pexels | Autor: KATRIN BOLOVTSOVA

Błąd 9: Agresywne wycinanie nawiasów i łączników

Dlaczego szkodzi: globalna reguła „po myślniku usuń wszystko” zniszczy poprawne nazwy („Jastrzębie-Zdrój”, „Kędzierzyn-Koźle”).

Jak to wychwycić:

  • Lista miast z myślnikiem i udział rekordów, które po cięciu zmieniły długość ≥ 30%.

Jak zrobić lepiej:

  • Biała lista wyjątków (miasta/ulice z myślnikiem jako częścią nazwy) stosowana przed regułą odcinania.
  • Dla nawiasów – wycinaj tylko typowe dopiski dzielnic (np. „(Nowa Huta)”, „(Śródmieście)”) i tylko w kluczu technicznym. Kolumna prezentacyjna zostaje pełna.

Błąd 10: Romanizacja i numeracja mieszana w nazwach

Dlaczego szkodzi: „Jana Pawła II” vs „Jana Pawla 2” – bez normalizacji to dwie różne wartości.

Jak to wychwycić:

  • Wyszukaj tokeny rzymskie (np. regex: b[IVXLCDM]{1,4}b) oraz odpowiadające im cyfry arabskie i porównaj wyniki „Group By”.
  • Zrób kopię kolumny i zamień rzymskie na arabskie; porównaj liczbę unikatów przed vs po — duży spadek to sygnał rozjazdów.
  • Wyłap mieszanki: „II” oraz „2” w tej samej grupie miasta/ulicy — to kandydaci do ujednolicenia.

Jak zrobić lepiej:

  • Ustal zasadę: w kolumnie prezentacyjnej pozostaje rzymska („II”), w kolumnie klucza technicznego liczba arabska („2”).
  • Zamieniaj tylko całe tokeny (po rozbiciu na słowa i znaki „.,-/”). Nie dotykaj części wyrazów.
  • Przygotuj mapę I–XII → 1–12 (najczęstsze), przechowuj w tabeli i łącz po tokenie. Dalsze wartości według potrzeb.
  • Po zamianach ponownie Clean/Trim i redukcja wielokrotnych spacji.

Krótki przykład: „ul. Jana Pawła II” → prezentacja: „ul. Jana Pawła II”; klucz_tech: „jana pawla 2”.

Błąd 11: Tytuły i stopnie bez standaryzacji w nazwach patronów

Dlaczego szkodzi: „św. Jana”, „sw Jana”, „świętego Jana” lub „gen. Andersa” vs „generała Andersa” — drobne różnice mnożą warianty i obniżają trafność dopasowań.

Jak to wychwycić:

Standaryzacja nazw miast i ulic: czyszczenie tekstu w Power Query krok po kroku
Źródło: Pexels | Autor: Solen Feyissa
  • Group By na pierwszych 2–3 tokenach po typie ulicy i policz warianty „św/sw/świętego”, „gen./generała”, „ks./księdza”, „dr/prof”.
  • Wyszukaj skróty z kropką i bez kropki (np. „ks”, „ks.”) oraz formy odmienione („generała”).

Jak zrobić lepiej:

  • Stwórz słownik tytułów i stopni z formą docelową (np. „św.”, „gen.”, „ks.”, „mjr.”, „prof.”, „dr”).
  • Normalizuj wyłącznie na granicach tokenów i poza pierwszym słowem typu ulicy, aby nie zmienić np. „Plac” → „pl.”, jeśli tego nie chcesz.
  • W prezentacji dopuszczaj pełne formy, ale w kluczu technicznym trzymaj krótkie, spójne skróty (lub usuń je całkiem w kluczu).

Krótki przykład: „ul. świętego Jana” / „ul. św Jana” / „ul. św. Jana” → prezentacja: „ul. św. Jana”; klucz_tech: „sw jana”.

Błąd 12: Kody pocztowe i „Poczta/UP” w polu miasta

Dlaczego szkodzi: „Warszawa 02-326”, „Poznań UP Grunwald” — dopasowania do SIMC nie działają, a miasto staje się niespójne.

Jak to wychwycić:

  • Filtr na wzorzec kodu: bd{2}-d{3}b oraz słowa kluczowe „UP”, „Poczta”.
  • Sprawdź długość tekstu miasta po usunięciu kodu — gdy spada o ≥ 7 znaków, prawdopodobnie zawierał kod.

Jak zrobić lepiej:

  • Wydziel nowe kolumny: „Kod pocztowy” i „Poczta”. Z miasta usuń te dopiski w kluczu technicznym.
  • W prezentacji zachowaj „Miasto (kod)”, jeśli potrzebne odbiorcom, ale trzymaj czysty „Miasto” do dopasowań.

Błąd 13: Typ ulicy (ul./al./pl./os.) traktowany jak część nazwy

Dlaczego szkodzi: „Aleja Niepodległości” vs „al. Niepodległości” czy „Plac Zwycięstwa” vs „pl. Zwycięstwa” — różne formy jednego typu drogi rozbijają dopasowania i statystyki unikatów.

Jak to wychwycić:

  • Group By po pierwszym tokenie i policz udział „ul/ul.”, „al/al.”, „pl/pl.”, „os/os.” itd.
  • Lista ulic zaczynających się od 2–3 liter + kropka — typowy skrót typu drogi.

Jak zrobić lepiej:

  • Wyodrębnij typ drogi do osobnej kolumny (np. „Typ drogi”), nazwę ulicy trzymaj bez typu. W prezentacji sklejaj z powrotem.
  • Ujednolić skróty przez słownik: „ulica→ul.”, „aleja→al.”, „plac→pl.”, „osiedle→os.”, „rondo→ron.”, „skwer→skw.”.
  • Normalizuj wyłącznie całe tokeny. Prosty zabieg: podziel tekst na słowa, przemapuj tokens, złóż ponownie.

Krótki przykład: „al. Jana Pawła II” / „Aleja Jana Pawła II” → Typ: „al.”; Ulica: „Jana Pawła II”.

Błąd 14: Mieszanie miejscowości nadrzędnej z częścią miejscowości

Dlaczego szkodzi: „Łódź-Bałuty”, „Wrocław Psie Pole” — SIMC rozróżnia miejscowości i ich części. Łączenie „miasto + dzielnica” jakby to było samo miasto prowadzi do błędów i podwójnych rekordów.

Jak to wychwycić:

  • W lewym źródle wyszukaj myślniki/spacje po mieście, sprawdź kolumnę po prawej (SIMC) — czy typ jednostki to „część miasta/część wsi”.
  • Zlicz przypadki, w których po usunięciu dopisku dzielnicy dopasowanie do SIMC nagle się udaje.

Jak zrobić lepiej:

  • Dwuetapowo: (1) dopasuj „Miasto (SIMC miejscowości)”, (2) w obrębie tego SIMC dopasuj „Część miejscowości” (jeśli występuje) oraz ulicę (ULIC).
  • Dzielnice/osiedla trzymaj w osobnej kolumnie. W kluczu technicznym miasta używaj wyłącznie nazwy miejscowości nadrzędnej.
  • Biała lista miast o nazwach z myślnikiem jako integralną częścią (np. „Jastrzębie-Zdrój”) stosowana przed odcinaniem.

Błąd 15: Niewidzialne znaki: NBSP, tabulatory, znaki sterujące

Dlaczego szkodzi: „Gdańsk” i „Gdańsk ” wyglądają tak samo, ale nie łączą się. Fuzzy też może je przeskoczyć ponad progiem, lecz to ukryje realny problem jakości.

Jak to wychwycić:

  • Filtr na długość: Text.Length([Miasto]) ≠ Text.Length(Text.Trim([Miasto])).
  • Wyszukaj znak NBSP: Character.FromNumber(160) i inne białe znaki różne od spacji.

Jak zrobić lepiej:

  • Zastąp NBSP zwykłą spacją przed Clean/Trim. Potem redukcja wielokrotnych spacji.
  • Stosuj jedną funkcję oczyszczającą w kroku bazowym i nie powielaj jej w kolejnych kolumnach kluczy.

Krótki przykład (M):

  • let sp = Character.FromNumber(160) in Text.Replace(Text.Clean(Text.Trim([Miasto])), sp, " ")
  • Redukcja wielokrotnych spacji: Text.Combine(List.Select(Text.SplitAny(_, " "), each _ <> ""), " ")
Poprzedni artykułWłasne formaty liczb w tabeli przestawnej: waluta, tysiące i liczby ujemne
Następny artykułGłośny wentylator i spadek wydajności laptopa
Marek Dudek
Marek Dudek zajmuje się zaawansowanymi zastosowaniami Excela w raportowaniu: modelami, kontrolą jakości danych i optymalizacją arkuszy. Na blogu pokazuje, jak budować rozwiązania odporne na błędy użytkownika i zmiany w źródłach danych. Pracuje na zasadzie „najpierw walidacja”: sprawdza typy danych, zakresy, zależności i wydajność obliczeń. W artykułach podaje uzasadnienia wyboru narzędzi, wskazuje ograniczenia oraz proponuje alternatywy, gdy prostsze podejście jest bezpieczniejsze. Stawia na rzetelność i powtarzalne rezultaty.