Skąd biorą się duplikaty na listach
Powtórzenia rzadko wynikają z czyjegoś niedopatrzenia. Najczęściej powstają mechanicznie: przy łączeniu dwóch eksportów z różnych systemów, gdy adresy e-mail zbiera się z kilku formularzy naraz, przy scalaniu list zadań albo przy imporcie kolumny z arkusza. Im większy zbiór, tym mniejsza szansa, że da się to ogarnąć wzrokiem.
Osobna kategoria to duplikaty pozorne - pozycje, które dla człowieka są tym samym, a dla komputera dwiema różnymi wartościami. Spacja na końcu wiersza, wielka litera na początku, tabulator zamiast spacji. Trzy z czterech przełączników w tym narzędziu odpowiadają właśnie za normalizację, bo bez niej licznik powtórzeń pokaże wynik zaniżony.
Listy pochodzące z dużych zbiorów danych mają jeszcze jedno źródło powtórzeń. Ten sam rekord wpada do eksportu dwa razy, bo przy łączeniu dwóch baz danych dostał dwa identyfikatory, a scalanie po nazwisku albo po adresie tego nie wyłapie.
Jak narzędzie rozpoznaje powtarzające się pozycje
Każdy wiersz przechodzi normalizację zgodną z zaznaczonymi przełącznikami. Białe znaki z brzegów zostają przycięte, litery sprowadzone do małych, a tak przygotowany klucz trafia do struktury Set, która przechowuje wyłącznie wartości unikalne. Jeśli klucz już tam jest, wiersz uznajemy za duplikat i pomijamy go w wyniku.
Do wyniku trafia oryginalna postać pierwszego wystąpienia, a nie znormalizowany klucz. Lista z pozycjami „Nowak”, „NOWAK” i „nowak” przy włączonym ignorowaniu wielkości liter zwróci „Nowak”, w takiej postaci, w jakiej pozycja pojawiła się za pierwszym razem. Narzędzie czyści listę i zostawia zapis nietknięty.
Ten sam pomysł działa poza przeglądarką. W Pythonie kolejność wejścia zachowuje konstrukcja list(dict.fromkeys(lista)), natomiast set(lista) zwróci wartości unikalne w kolejności przypadkowej. Nasze narzędzie zachowuje się jak pierwsza z nich, więc wynik da się porównać wiersz po wierszu z listą wejściową.
Sortowanie listy w polskiej kolejności alfabetu
Sortowanie alfabetyczne w JavaScripcie domyślnie porównuje kody znaków Unicode. Przy polskich listach daje to wynik bezużyteczny, bo wszystkie wyrazy zaczynające się od „ą”, „ć” czy „ł” lądują za literą „z”, mają bowiem wyższe kody. Używamy porównywarki językowej ustawionej na polszczyznę, która zna właściwą kolejność: a, ą, b, c, ć, d, e, ę i tak dalej.
Ta sama porównywarka układa cyfry i znaki interpunkcyjne zgodnie z oczekiwaniami. Pozycje zaczynające się od cyfry trafiają na początek listy, w jedno miejsce, przed wszystkie litery.
Pięć operacji przy porównaniu dwóch list
Praca z dwiema listami sprowadza się do działań na zbiorach. Tryb porównania traktuje obie listy właśnie jak zbiory i wykonuje na nich pięć operacji, a wynik każdej z nich możesz skopiować do schowka albo pobrać jako plik tekstowy.
- Część wspólna zwraca pozycje obecne w obu listach jednocześnie. Typowe zastosowanie to sprawdzenie, którzy klienci z zeszłorocznej listy są też na tegorocznej.
- Tylko w liście A zostawia pozycje z pierwszej listy, których brakuje w drugiej. Przy migracji serwisu wskazuje adresy wymagające przekierowania.
- Tylko w liście B odwraca kierunek i wyświetla pozycje nowe.
- Suma łączy obie listy w jedną, bez powtórzeń.
- Różnica symetryczna pokazuje pozycje występujące dokładnie w jednej z list. Przydaje się przy szukaniu rozjazdów między dwoma eksportami, które powinny być identyczne.
Usuwanie duplikatów online a funkcja „Usuń duplikaty” w Excelu
Microsoft Excel ma własne czyszczenie powtórzeń. Funkcja siedzi na karcie „Dane”, w grupie „Narzędzia danych”, pod przyciskiem „Usuń duplikaty”. Działa na zaznaczonym zakresie, a w oknie dialogowym wskazujesz, które kolumny program ma ze sobą porównywać. Po zakończeniu Excel wyświetla komunikat z liczbą zduplikowanych wartości, które usunął, i liczbą unikatowych wartości, które zostały w arkuszu. W wersjach starszych niż 2007 tego przycisku nie ma, zostaje filtr zaawansowany albo formuła LICZ.JEŻELI, która oznacza powtórzenia w sąsiedniej kolumnie.
Excel operuje na całym arkuszu, więc usunięcie duplikatów w jednej kolumnie kasuje też sąsiadujące komórki z tego samego wiersza, a to bywa kłopotliwe, gdy chcesz jedynie przejrzeć listę identyfikatorów i wrócić z nią do pliku, którego po zapisaniu i zamknięciu nikt już nie cofnie.
Tutaj pracujesz na kopii. Skopiuj kolumnę z Excela, wklej dane do pola wejściowego, a gotowy wynik wklej z powrotem tam, gdzie ma trafić. Plik źródłowy zostaje w takiej postaci, w jakiej był, a licznik pod polem wyniku pokazuje, ile wierszy się powtarzało. Przy kilku kolumnach naraz przełącz separator na tabulator. Pliki CSV z polskiej wersji arkusza rozdziela średnik i dla nich wybierz właśnie tę opcję.
Dziesiątki tysięcy wierszy i płynność działania
Usuwanie duplikatów jest operacją liniową, bo każdy wiersz sprawdzamy raz, ale przy setkach tysięcy pozycji sam czas wykonania staje się odczuwalny. Gdyby cała praca szła jednym kawałkiem, przeglądarka na ten czas przestałaby reagować na przewijanie i kliknięcia, a system operacyjny mógłby pokazać komunikat o niereagującej karcie.
Listy dłuższe niż 20 tysięcy wierszy przetwarzamy porcjami po kilka tysięcy pozycji i między porcjami oddajemy sterowanie przeglądarce. Strona pozostaje responsywna, a pod polem wyniku widać informację o trwającym przetwarzaniu. Przy krótszych listach ten mechanizm się nie włącza, bo koszt oddawania sterowania przewyższyłby samą pracę.