Pandas Fuzzy Match

Pandas Fuzzy Match
Fuzzy String Matching er begrepet som best beskriver prosessen med å lokalisere lignende strenger. Vi skal benytte oss av det fuzzywuzzy biblioteket. Til tross for at det har et dumt navn, er det et mye brukt bibliotek for strengmatching. Fuzzywuzzy -pakken tilbyr noen få sterke funksjoner som er nyttige i Fuzzy String Matching, inkludert beregning av Levenshtein -avstanden. I denne artikkelen skal vi se på hvordan du bruker Python til å utføre fuzzy kamper på DataFrame -kolonnen i Pandas. Vi kan identifisere kamper ved hjelp av uklar matching, som finner mønstre i målobjektet eller elementene selv når det ikke stemmer overens. Søkemotorer er bygget på uklar matching. På grunn av dette, hver gang vi går inn i et søkeord i en nettleser, mottar vi mange anbefalinger eller forslag.

Hvordan utføre uklar matching i pandaer?

Ulike funksjoner og egenskaper kan brukes til å utføre fuzzy fyrstikker på kolonnene til Pandas Dataframe i Python. Vi vil demonstrere noen få av dem i eksemplene nedenfor.

Eksempel 01: En grunnleggende tilnærming til å utføre fuzzy kamper i pandaer

Først vil vi importere Fuzzywuzzy -bibliotekene sammen med Pandas Library. Fuzzywuzzy -pakken har flere nyttige funksjoner, for eksempel muligheten til å bestemme Levenshtein -avstanden, som kan være nyttig i Fuzzy String Matching. La oss nå lage to ordbøker. Etter å ha opprettet lister, vil vi også lage to tomme lister for å lagre kampene senere som vist nedenfor.

Ordbøkene føres inne i PD.DataFrame () -funksjonen for å lage DataFrames 'DF1' og 'DF2' med enkeltkolonnen 'Navn' med verdier ('Clay', 'Hanna', 'Jack', 'Kim') og ('Clayton', 'Harry', 'Jim', 'Lee', 'Tim', 'Billy'). Dataframes vil nå bli omgjort til lister ved bruk av Tolist () -funksjonen. Vi vil sette terskelen til 75 slik at matchingen bare starter når det er 75% likhet mellom begge strengene.

Det kan sees at våre dataframmer blir konvertert til lister. For å finne den optimale kampen fra List2, vil vi gjentatte ganger iterere gjennom List1s elementer. Her trekker vi ut elementene ved hjelp av prosesseringsmodulens “prosess.Extract () ”-funksjonen. Hvis vi skriver det ut nå, kan vi se nøyaktighetsforholdstallene siden “Limit = 2” instruerer det om å bare hente de to nærmeste elementene med deres nøyaktighetsforhold. Til listen M1 vil vi legge til hver nærmeste kamp. I DataFrame vil 'DF1' -liste over kamper lagres i "Match" -kolonnen.

Den ytre sløyfen vil nok en gang løpe gjennom "match" -kolonnen, og den indre sløyfen vil iterere gjennom hver gruppe av kamper. Hvis k [1]> = terskel, vil bare elementer med terskelverdier lik eller mer enn 75 bli valgt og lagt til listen "P". Hvis det er flere kamper for en gitt kolonneelement, blir varematchene sammen med "," ".Bli med () -funksjonen og lagt til for å liste M2. For å lagre den matchede utdataene til følgende rader i DataFrame 'DF1' -kolonnen, vil listen 'P' bli satt til å tømme. For å få vår endelige utgang, vil den nærmeste matchingen bli lagret til DataFrame 'DF1'.

Eksempel 02: Bruke prosessen.Extractone () -metode for å utføre uklar matching i pandaer

Prosessen.Extractone () -metoden vil nå bli brukt til å matche bare de nærmeste verdiene fra de to dataframene. De forskjellige uklar matchende funksjoner vil bli brukt i denne metoden. Prosess.ExtractOne (Query, Scorer, Choice) trekker ut den enkeltkampen som passer best til den medfølgende spørringen fra valglisten. Scorer er en valgfri parameter som kan brukes til å spesifisere en spesifikk skårer, for eksempel Fuzz.token_sort_ratio eller fuzz.token_set_ratio. Som i eksempel 1 vil vi lage to lister og deretter konvertere dem til DataFrame -kolonner.

Først importerte vi pandaene og fuzzywuzzy moduler. Deretter opprettet vi to Python -ordbøker 'D1' og 'D2'. Nøklene til begge ordbøker er 'elementer' og verdiene til D1 og D2 er (“stativ”, “trommelstokk”, “bowtie”, “nøtt”, “skjorte”) og (“pod”, “stick”, “slips ”,” Coconut ”,“ Tshirt ”,“ Walnut ”). Vi har opprettet Dataframes 'DF1' og 'DF2' ved å passere ordbøkene D1 og D2 i PD.DataFrame () -funksjon. De tre tomme listene 'M1', 'M2' og 'P' er også opprettet som vi vil bruke senere til å lagre matchende verdier.

Dataframes DF1 og DF2 konverteres til lister L1 og L2 ved hjelp av Tolist () -funksjonen slik at vi kan iterere gjennom dem for å finne kampene. Vi vil iterere gjennom liste L1 for å trekke ut den nærmeste kampen fra liste L2. Terskelverdien er spesifisert som 82, så den uklare matchingen bare foregår bare når strengene vil være minst 82 prosent nær hverandre.

Scorerparameteren er spesifisert som fuzz.forholdet for å bestemme forholdet mellom likheten mellom to strenger avhengig av Levenshtein -avstanden. For å filtrere ut den maksimale nærmeste kampen, vil hver gruppe kamper nå bli iterert gjennom sløyfen. Bare disse elementene vil bli valgt og vedlagt for å liste opp “P” som tilfredsstiller tilstanden J [1]> = Terskel som er større enn 82. Hvis mer enn en kamp blir funnet for en bestemt kolonneelement, blir kampene slått sammen ved hjelp av "", ".Bli med () Metode og lagt til for å liste M2. Listen “P” vil nok en gang være satt til å tømme for å holde utdataene til de matchende elementene i DataFrame “DF1” -kolonnen. Utgangskampverdiene vil bli lagret tilbake til 'DF1' i kolonnen 'Match'.

Det er bare en kamp der likhetsforholdet er mer enn 82%. Hvis vi reduserer terskelen, kan vi få flere samsvarende verdier i 'Match' -kolonnen til 'DF1'

Eksempel 03: Bruke metoden get_close_matches () for å utføre fuzzy matching i pandas

Å bruke get_close_matches () -metoden fra difflib -pakken er en av de enkleste måtene å utføre uklar matching i pandaer. La oss lage våre dataframmer først ved å bruke PD.DataFrame () -funksjon.

Vi har laget to Dataframes 'DF1' og 'DF2'. Dataframe DF1 består av to to kolonner “Club” med verdier ('Tigerzz', 'Yorker', 'Wolf', 'Dangerous', 'Lifegaurd') og “Members” som har verdier (4, 6, 5, 6, 8 ). Det er også 2 kolonner i 'DF2' med etiketter “Club” og “Titler” som har verdier ('Tiger', 'Wolfy', 'York', 'Life', 'Danger') og (1, 3, 0, 4 , 3) henholdsvis. La oss si at vi vil kombinere våre dataframes basert på "klubben" -kolonnen. Vi vil bruke Fuzzy Match -teknikken for å bestemme hvilke klubbnavn som er de nærmeste kampene fordi klubbnavnene i de to dataframene skiller seg litt fra hverandre. For å oppnå dette kan vi bruke get_close_matches () -metoden fra difflib -pakken. Først vil vi importere difflib -modulen.

Vi har opprettet en duplikatkolonne “Matched” for å beholde verdier av kolonneklubben fra DF2. Deretter konverterte vi 'Club' kolonneverdiene i DataFrame 'DF2' til klubbverdier det nærmeste kamper i DataFrame 'DF1' ved hjelp av get_close_matches () -metoden inne i Apply () -funksjonen. I det siste trinnet slo vi sammen våre DataFrames 'DF1' og 'DF2' for å lage en ny DataFrame 'Mached_Values'. Det kan legges merke til at kolonnen 'matchet' i ovennevnte DataFrame inneholder verdiene som er mest matchet med de tilsvarende verdiene i 'Club' -kolonnen.

Konklusjon

I denne opplæringen lærer vi hvordan du kan utføre fuzzy matching i pandaer. Vi har diskutert det fuzzywuzzy biblioteket og hvordan det hjelper oss i samsvar med strengene. Vi implementerte 3 eksempler i denne opplæringen. I det første eksemplet viste vi den grunnleggende tilnærmingen til å utføre en uklar kamp med Pandas Dataframes. I det andre eksemplet brukte vi prosessen.ExtractOne () -metode for å trekke ut de uklare kampene.