Pandas Fuzzy Match

Pandas Fuzzy Match
Dopasowanie strun rozmyte to termin, który najlepiej opisuje proces lokalizacji podobnych ciągów. Skorzystamy z biblioteki Fuzzywuzzy. Pomimo głupich nazwy, jest to powszechnie używana biblioteka do dopasowywania ciągów. Pakiet Fuzzywuzzy oferuje kilka mocnych funkcji, które są pomocne w dopasowaniu strun rozmyte, w tym obliczanie odległości Levenshtein. W tym artykule przyjrzymy się, jak użyć Pythona do wykonywania rozmytych dopasowań w kolumnie DataFrame w pandy. Możemy zidentyfikować dopasowania za pomocą dopasowania rozmytego, które znajduje wzorce w obiekcie docelowym lub elementom, nawet jeśli nie pasuje dokładnie. Wyszukiwarki są oparte na dopasowaniu rozmytego. Z tego powodu za każdym razem, gdy wprowadzamy wyszukiwany termin do przeglądarki, otrzymujemy wiele zaleceń lub sugestii.

Jak wykonać dopasowanie rozmyte w pandy?

Różne funkcje i właściwości można użyć do wykonywania dopasowań rozmytych w kolumnach Pandas DataFrame w Python. Wykazamy kilka z nich w poniższych przykładach.

Przykład 01: Podstawowe podejście do wykonywania dopasowań rozmytych w pandy

Najpierw zaimportujemy biblioteki Fuzzywuzzy wraz z biblioteką pandy. Pakiet Fuzzywuzzy ma kilka przydatnych funkcji, takich jak możliwość określenia odległości Levenshtein, co może być przydatne w dopasowaniu strun rozmyte. Teraz stwórzmy dwa słowniki. Po utworzeniu list utworzymy również dwie puste listy do przechowywania meczów później, jak pokazano poniżej.

Słowniki są przekazywane do PD.Funkcja dataFrame (), aby utworzyć dataframe „df1” i „df2” z pojedynczymi kolumnami „nazwa” z wartościami („glinka”, „hanna”, „jack”, „Kim”) i („Clayton”, „Harry”, Odpowiednio „Jim”, „Lee”, „Tim”, „Billy”). Ramy danych zostaną teraz przekształcone w listy za pomocą funkcji toList (). Ustawimy próg na 75, aby dopasowanie rozpoczęło się tylko wtedy, gdy między obiema ciągami jest 75%.

Można zauważyć, że nasze ramki danych są konwertowane na listy. Aby znaleźć optymalne dopasowanie z listy2, będziemy wielokrotnie iterować przez elementy List1. Tutaj wyodrębniamy elementy za pomocą procesu modułu przetwarzania.Funkcja ekstraktu () ”. Jeśli wydrukujemy go teraz, możemy zobaczyć liczbę współczynników dokładności, ponieważ „limit = 2” instruuje go, aby odzyskali tylko dwa najbliższe elementy z ich współczynnikiem dokładności. Do listy M1 dodamy każdy najbliższy dopasowanie. W ramce danych lista meczów „DF1” będzie przechowywana w kolumnie „mecz”.

Zewnętrzna pętla ponownie przebiega przez kolumnę „mecz”, a pętla wewnętrzna będzie iterowana przez każdą grupę dopasowań. Jeśli k [1]> = próg, zostaną wybrane tylko elementy o wartościach progowych równych lub więcej niż 75. Jeśli istnieje wiele dopasowań dla danego elementu kolumny, dopasowania elementów zostaną połączone za pomocą „”, ”,.dołącz () funkcja i dołączona do listy M2. Aby przechowywać dopasowane wyjście następującego elementu wierszy w kolumnie „DF1”, lista „P” zostanie ustawiona na puste. Aby uzyskać nasze ostateczne wyjście, najbliższe dopasowanie będzie przechowywane w „DF1”.

Przykład 02: Korzystanie z procesu.Metoda ekstraktu () do wykonywania dopasowania rozmytego w pandy

Proces.Metoda Extractone () zostanie teraz zastosowana do dopasowania tylko najbliższych wartości z dwóch ramek danych. W tej metodzie zostaną zastosowane różne funkcje dopasowywania rozmycia. Proces.Extractone (zapytanie, strzelec, wybór) wyodrębnia pojedyncze dopasowanie, które najdalej pasuje do dostarczonego zapytania z listy wyborów. Strzał jest opcjonalnym parametrem, którego można użyć do określania określonego strzelca, takiego jak Fuzz.token_sort_ratio lub fuzz.token_set_ratio. Podobnie jak w przykładzie 1, utworzymy dwie listy, a następnie przekonwertujemy je na kolumny DataFrame.

Najpierw importowaliśmy moduły pandy i fuzzywuzzy. Następnie stworzyliśmy dwa słowniki Pythona „D1” i „D2”. Klucze obu słowników to „elementy”, a wartości D1 i D2 to („statyw”, „Drumstick”, „Bowtie”, „Nut”, „Koszula”) i („Pod”, „Stick”, „Tie ”,„ Coconut ”,„ Tshirt ”,„ orzech ”). Utworzyliśmy DataFrame „DF1” i „DF2”, przekazując słowniki D1 i D2 w PD.Funkcja dataFrame (). Trzy puste listy „M1”, „M2” i „P” są również tworzone.

DataFrame DF1 i DF2 są konwertowane na listy L1 i L2 za pomocą funkcji toList (), abyśmy mogli je iterować, aby znaleźć dopasowania. Będziemy iterować za pośrednictwem listy L1, aby wyodrębnić jej najbliższy mecz z listy L2. Wartość progowa jest określona jako 82, więc dopasowanie rozmyte odbywa się tylko wtedy, gdy struny będą co najmniej 82 procent blisko siebie.

Parametr strzelca jest określony jako fuzz.Stosunek w celu określenia stosunku podobieństwa między dwoma strunami w zależności od odległości levenshteina. Aby odfiltrować maksymalne najbliższe dopasowanie, każda grupa dopasowań będzie teraz iterowana przez pętlę. Tylko te elementy zostaną wybrane i dołączone do listy „P”, które spełnia warunek J [1]> = Próg, który jest większy niż 82. Jeśli znaleziono więcej niż jedno dopasowanie dla konkretnego elementu kolumny, dopasowania są scalone za pomocą „”, „,”,.metoda dołącz () i dodana do listy M2. Lista „P” zostanie ponownie ustawiona tak, aby utrzymać wyjście pasujących elementów w kolumnie „DF1”. Wartości dopasowania wyjściowego będą przechowywane z powrotem do „df1” w kolumnie „dopasowanie”.

Istnieje tylko jeden mecz, w którym współczynnik podobieństwa wynosi ponad 82%. Jeśli zmniejszymy próg, możemy uzyskać więcej dopasowania wartości w kolumnie „dopasuj” „DF1”

Przykład 03: Za pomocą metody get_close_matches () do wykonywania dopasowania rozmytego w pandy

Korzystanie z metody get_close_matches () z pakietu Difflib jest jednym z najprostszych sposobów wykonywania dopasowania rozmytego w pandach. Najpierw utwórzmy nasze ramki danych za pomocą PD.Funkcja dataFrame ().

Utworzyliśmy dwie DF1 i „DF2” i „DF2”. DATFrame DF1 składa się z 2 dwóch kolumn „Club” z wartościami („Tigerzz”, „Yorker”, „Wolf”, „Dangerous”, „LifeGaurd”) i „członków” o wartościach (4, 6, 5, 6, 8, 8 ). Istnieją również 2 kolumny w „DF2” z etykietami „Club” i „Tytuły” o wartościach („Tiger”, „Wolfy”, „York”, „Life”, „Danger”) i (1, 3, 0, 4 , 3) odpowiednio. Załóżmy, że chcemy połączyć nasze ramki danych w oparciu o kolumnę „klubową”. Użyjemy techniki Fuzzy Match, aby ustalić, które nazwy klubów są najbliższymi meczami, ponieważ nazwy klubu w dwóch ramach danych różnią się nieznacznie od siebie. Aby to osiągnąć, możemy użyć metody get_close_matches () z pakietu difflib. Najpierw zaimportujemy moduł Difflib.

Stworzyliśmy zduplikowaną kolumnę „dopasowaną”, aby zachować wartości klubu kolumnowego z DF2. Następnie przekonwertowaliśmy wartości kolumny „klubowej” w danych danych „DF2” na wartości klubowe, które najbliższe dopasowuje się do danych „DF1” przy użyciu metody get_close_matches () wewnątrz funkcji Apply (). W ostatnim kroku połączyliśmy nasze ramki danych „DF1” i „DF2”, aby utworzyć nowyframe „Mached_Values”. Można zauważyć, że kolumna „dopasowana” w powyższej strumieniu danych zawiera wartości, które są najbardziej dopasowane do odpowiednich wartości w kolumnie „klubowej”.

Wniosek

W tym samouczku uczymy, w jaki sposób możesz wykonywać rozmyte dopasowanie w pandy. Omówiliśmy bibliotekę Fuzzywuzzy i to, jak pomaga nam w dopasowaniu strun. W tym samouczku wdrożyliśmy 3 przykłady. W pierwszym przykładzie pokazaliśmy podstawowe podejście do wykonywania rozmytego dopasowania z panami danych. W drugim przykładzie wykorzystaliśmy ten proces.metoda ekstraktu () w celu wyodrębnienia dopasowań rozmytych.