Pandas Fuzzy Match

Pandas Fuzzy Match
La corrispondenza delle stringhe fuzzy è il termine che descrive meglio il processo di localizzazione di stringhe simili. Faremo uso della Biblioteca Fuzzywuzzy. Nonostante abbia un nome sciocco, è una libreria ampiamente usata per la corrispondenza delle stringhe. Il pacchetto Fuzzywuzzy offre alcune funzioni forti utili nella corrispondenza delle stringhe fuzzy, incluso il calcolo della distanza di Levenshtein. In questo articolo, esamineremo come utilizzare Python per eseguire corrispondenze fuzzy sulla colonna DataFrame in Panda. Possiamo identificare le corrispondenze usando la corrispondenza fuzzy, che trova schemi nell'oggetto target o negli elementi anche quando non corrisponde esattamente. I motori di ricerca sono costruiti sulla corrispondenza fuzzy. Per questo motivo, ogni volta che inseriamo un termine di ricerca in un browser, riceviamo numerosi consigli o suggerimenti.

Come eseguire la corrispondenza fuzzy in panda?

Diverse funzioni e proprietà possono essere utilizzate per eseguire corrispondenze fuzzy sulle colonne di Panda DataFrame in Python. Ne dimostreremo alcuni negli esempi seguenti.

Esempio 01: un approccio di base per l'esecuzione di corrispondenze fuzzy nei panda

Innanzitutto, importeremo le librerie Fuzzywuzzy insieme alla Biblioteca Pandas. Il pacchetto Fuzzywuzzy ha diverse funzioni utili, come la capacità di determinare la distanza di Levenshtein, che può essere utile nella corrispondenza delle stringhe fuzzy. Ora, creiamo due dizionari. Dopo aver creato elenchi, creeremo anche due elenchi vuoti per archiviare le partite in seguito come mostrato di seguito.

I dizionari vengono passati all'interno del PD.Funzione DataFrame () per creare dati di dati "df1" e "df2" con le singole colonne "nome" con valori ("argilla", "hanna", "jack", "kim") e ("Clayton", "Harry", 'Jim', 'Lee', 'Tim', 'Billy') rispettivamente. I dati dei dati verranno ora trasformati in elenchi utilizzando la funzione Tolist (). Imposteremo la soglia su 75 in modo che la corrispondenza inizi solo quando c'è una somiglianza del 75% tra le due stringhe.

Si può vedere che i nostri frame di dati sono convertiti in elenchi. Per trovare la corrispondenza ottimale dall'elenco2, itereremo ripetutamente tramite gli elementi dell'elenco1. Qui, estraggiamo gli elementi utilizzando il processo del modulo di elaborazione.funzione extract () ". Se lo stampiamo ora, possiamo vedere i numeri del rapporto di precisione poiché "limite = 2" gli indica di recuperare solo i due elementi più vicini con il loro rapporto di precisione. All'elenco M1, aggiungeremo ogni corrispondenza più vicina. Nel frame dati, l'elenco delle partite "DF1" verrà archiviato nella colonna "Match".

Il ciclo esterno verrà nuovamente eseguito attraverso la colonna "Match" e il ciclo interno ripeterà attraverso ogni gruppo di partite. Se k [1]> = soglia, verranno selezionati solo gli elementi con valori di soglia pari o più di 75. Se ci sono più corrispondenze per un determinato elemento della colonna, le corrispondenze dell'articolo verranno unite utilizzando "",.funzioni join () e aggiunto per elencare M2. Per archiviare l'output corrispondente della seguente elemento di righe nella colonna "DF1" di dati, l'elenco 'P' verrà impostato su vuoto. Per ottenere il nostro output finale, la corrispondenza più vicina verrà archiviata su DataFrame "DF1".

Esempio 02: usando il processo.Metodo extracone () per eseguire la corrispondenza fuzzy nei panda

Il processo.Il metodo ExtracTone () verrà ora utilizzato per corrispondere solo ai valori più vicini dai due frame dati. Le varie funzioni di corrispondenza fuzzy verranno utilizzate in questo metodo. Processi.Extracone (query, marcatore, scelta) estrae la singola corrispondenza che si adatta più da vicino alla query fornita dall'elenco delle scelte. Il marcatore è un parametro opzionale che può essere utilizzato per specificare un marcatore specifico, come Fuzz.token_sort_ratio o fuzz.token_set_ratio. Come nell'esempio 1, creeremo due elenchi e quindi li convertiremo in colonne di dati di dati.

Innanzitutto, abbiamo importato i moduli Pandas e Fuzzywuzzy. Quindi, abbiamo creato due dizionari di Python 'D1' e 'D2'. Le chiavi di entrambi i dizionari sono "oggetti" e i valori di D1 e D2 sono ("treppiede", "drumstick", "bowtie", "noce", "camicia") e ("baccello", "bastone", "cravatta "," Coconut "," Tshirt "," Walnut "). Abbiamo creato i frame dati "df1" e "df2" passando i dizionari D1 e D2 nel PD.Funzione dataframe (). Vengono anche creati i tre elenchi vuoti "M1", "M2" e "P" che useremo in seguito per archiviare i valori di corrispondenza.

I frame dati DF1 e DF2 vengono convertiti in elenchi L1 e L2 utilizzando la funzione Tolist () in modo da poter scorrere attraverso di loro per trovare le corrispondenze. Itereremo attraverso l'elenco L1 per estrarre la sua corrispondenza più vicina dall'elenco L2. Il valore di soglia è specificato come 82 Quindi, la corrispondenza fuzzy si svolge solo quando le stringhe saranno almeno l'82 % vicine l'una all'altra.

Il parametro marcatore è specificato come fuzz.rapporto per determinare il rapporto tra somiglianza tra due stringhe a seconda della distanza di Levenshtein. Per filtrare la partita massima più vicina, ogni gruppo di partite verrà ora iterato dal loop. Solo tali elementi saranno selezionati e aggiunti per elencare "p" che soddisfi la condizione j [1]> = soglia che è maggiore di 82. Se si trova più di una partita per un particolare elemento di colonna, le corrispondenze vengono unite usando "",.Metodo join () e aggiunto all'elenco M2. L'elenco "P" verrà nuovamente impostato su vuoto per trattenere l'output degli elementi corrispondenti nella colonna di dati "DF1". I valori di corrispondenza di output verranno archiviati su "df1" nella colonna "corrispondenza".

C'è solo una partita in cui il rapporto di somiglianza è superiore all'82%. Se riduciamo la soglia, potremmo ottenere più valori di corrispondenza nella colonna "Match" di "DF1"

Esempio 03: utilizzando il metodo get_close_matches () per eseguire la corrispondenza fuzzy in panda

L'uso del metodo get_close_matches () dal pacchetto DIFFLIB è uno dei modi più semplici per eseguire la corrispondenza fuzzy nei panda. Creiamo prima i nostri frame dati utilizzando il PD.Funzione dataframe ().

Abbiamo creato due frame di data "df1" e "df2". Il Frame Data DF1 è composto da 2 due colonne "Club" con valori ("Tigerzz", "Yorker", "Wolf", "Dangerous", "Lifegaurd") e "Membri" che hanno valori (4, 6, 5, 6, 8 ). Ci sono anche 2 colonne in "df2" con etichette "club" e "titoli" con valori ("tigre", "wolfy", "York", "vita", "pericolo") e (1, 3, 0, 4 , 3) rispettivamente. Diciamo che vogliamo combinare i nostri telai di dati in base alla colonna "club". Useremo la tecnica di Match Fuzzy per determinare quali nomi del club sono le partite più vicine perché i nomi del club nei due temi di dati differiscono leggermente l'uno dall'altro. Per raggiungere questo obiettivo, possiamo usare il metodo get_close_matches () dal pacchetto DIFFLIB. Innanzitutto, importeremo il modulo DIFFLIB.

Abbiamo creato una colonna duplicata "abbinata" per conservare i valori del club di colonne da DF2. Quindi, abbiamo convertito i valori della colonna "club" nel frame dati "df2" per i valori del club It Closest corrispondenti in DataFrame "DF1" utilizzando il metodo get_close_matches () all'interno della funzione Applica (). Nell'ultimo passaggio, abbiamo unito i nostri frame dati "DF1" e "DF2" per creare un nuovo frame di dati "Machal_Values". Si può notare che la colonna "abbinata" nel frame dati sopra contiene i valori che sono più strettamente abbinati ai valori corrispondenti nella colonna "club".

Conclusione

In questo tutorial, insegniamo come puoi eseguire una corrispondenza sfocata a Panda. Abbiamo discusso della Biblioteca Fuzzywuzzy e di come ci aiuta nella corrispondenza delle stringhe. Abbiamo implementato 3 esempi in questo tutorial. Nel primo esempio, abbiamo mostrato l'approccio di base all'esecuzione di una corrispondenza fuzzy con i telai di dati Pandas. Nel secondo esempio, abbiamo usato il processo.Metodo extratone () per estrarre le partite fuzzy.