Pandas Fuzzy Match

Pandas Fuzzy Match
A correspondência difusa de cordas é o termo que melhor descreve o processo de localização de seqüências semelhantes. Vamos usar a biblioteca Fuzzywuzzy. Apesar de ter um nome bobo, é uma biblioteca amplamente usada para correspondência de string. O pacote Fuzzywuzzy oferece algumas funções fortes que são úteis na correspondência de cordas difusas, incluindo o cálculo da distância de Levenshtein. Neste artigo, veremos como usar o Python para realizar partidas difusas na coluna DataFrame em pandas. Podemos identificar correspondências usando a correspondência difusa, que encontra padrões no objeto ou itens de destino, mesmo quando ele não corresponde exatamente. Os mecanismos de pesquisa são construídos com correspondência difusa. Por causa disso, toda vez que inserimos um termo de pesquisa em um navegador, recebemos inúmeras recomendações ou sugestões.

Como realizar combinação difusa em pandas?

Diferentes funções e propriedades podem ser usadas para executar correspondências difusas nas colunas do Pandas Dataframe no Python. Vamos demonstrar alguns deles nos exemplos abaixo.

Exemplo 01: Uma abordagem básica para realizar partidas difusas em pandas

Primeiro, vamos importar as bibliotecas Fuzzywuzzy junto com a Biblioteca Pandas. O pacote Fuzzywuzzy tem várias funções úteis, como a capacidade de determinar a distância de Levenshtein, que pode ser útil na correspondência de cordas difusas. Agora, vamos criar dois dicionários. Depois de criar listas, também criaremos duas listas vazias para armazenar as partidas mais tarde, como visto abaixo.

Os dicionários são passados ​​dentro do PD.Função DataFrame () para criar dados de dados 'df1' e 'df2' com o nome de colunas únicas 'com valores (' clay ',' hanna ',' jack ',' kim ') e (' clayton ',' harry ', 'Jim', 'Lee', 'Tim', 'Billy') respectivamente. Os quadros de dados agora serão transformados em listas usando a função Tolist (). Definiremos o limite para 75 para que a correspondência apenas comece quando houver 75% de semelhança entre as duas seqüências.

Pode -se observar que nossos quadros de dados são convertidos em listas. Para encontrar a correspondência ideal da lista2, iremos repetidamente através dos itens da Lista1. Aqui, extraímos os elementos usando o “processo do módulo de processamento.extract () ”função. Se o imprimirmos agora, podemos ver os números da taxa de precisão, já que o "limite = 2" instrui a recuperar apenas os dois itens mais próximos com sua proporção de precisão. Para a lista M1, adicionaremos cada partida mais próxima. No DataFrame, a lista de fósforos 'DF1' será armazenada na coluna "Match".

O loop externo passará mais uma vez pela coluna "Match" e o loop interno iterará em cada grupo de partidas. Se k [1]> = limiar, apenas itens com valores limite igual ou mais de 75 serão selecionados e adicionados à lista "P". Se houver várias correspondências para um determinado item da coluna, o item corresponde a ser unido usando o "", ".junção () função e anexado a listar M2. Para armazenar a saída correspondente do item a seguir de linhas na coluna DataFrame 'DF1', a lista 'P' será definida para vazio. Para obter nossa saída final, a correspondência mais próxima será armazenada no DataFrame 'DF1'.

Exemplo 02: Usando o processo.Método Extractone () para executar a correspondência difusa em pandas

O processo.O método Extractone () agora será usado para corresponder apenas aos valores mais próximos dos dois quadros de dados. As várias funções de correspondência difusa serão usadas neste método. Processo.Extractone (consulta, artilheiro, escolha) extrai a partida única que mais se encaixa na consulta fornecida da lista de opções. Scorer é um parâmetro opcional que pode ser usado para especificar um goleador específico, como fuzz.token_sort_ratio ou fuzz.token_set_ratio. Como no Exemplo 1, criaremos duas listas e depois as convertemos em colunas de dados de dados.

Primeiro, importamos os módulos pandas e fuzzywuzzy. Então, criamos dois dicionários python 'd1' e 'd2'. As chaves de ambos os dicionários são 'itens' e os valores de D1 e D2 são (“Tripod”, “Drumstick”, “Bowtie”, “Nut”, “Shirt”) e (“Pod”, “Stick”, “Tie” "," Coconut "," Tshirt "," Walnut "). Criamos os dados de dados 'DF1' e 'DF2', passando os dicionários D1 e D2 no PD.Função DataFrame (). As três listas vazias 'M1', 'M2' e 'P' também são criadas que usaremos mais tarde para armazenar os valores correspondentes.

Os quadros de dados DF1 e DF2 são convertidos em listas L1 e L2 usando a função Tolist () para que possamos iterar através delas para encontrar as correspondências. Vamos iterar através da Lista L1 para extrair sua partida mais próxima da Lista L2. O valor limite é especificado como 82, então, a correspondência difusa só ocorre.

O parâmetro do artilheiro é especificado como fuzz.proporção para determinar a proporção de semelhança entre duas cordas, dependendo da distância de Levenshtein. Para filtrar a partida máxima mais próxima, cada grupo de partidas agora será iterado pelo loop. Somente esses itens serão selecionados e anexados para listar “P” que satisfaz a condição j [1]> = limite maior que 82. Se mais de uma partida for encontrada para um item de coluna específico, as correspondências serão mescladas usando o ",".Método de junção () e adicionado à Lista M2. A lista “P” será mais uma vez definida para esvaziar para manter a saída dos itens correspondentes na coluna DataFrame “DF1”. Os valores de correspondência de saída serão armazenados de volta para 'DF1' na coluna 'Match'.

Existe apenas uma partida em que a taxa de similaridade é superior a 82%. Se reduzirmos o limite, podemos obter mais valores correspondentes na coluna 'Match' de 'DF1'

Exemplo 03: Usando o método get_close_matches () para executar a combinação difusa em pandas

Usando o método get_close_matches () do pacote Difflib é uma das maneiras mais simples de executar a correspondência difusa em pandas. Vamos criar nossos quadros de dados primeiro usando o PD.Função DataFrame ().

Criamos dois dados de dados 'df1' e 'df2'. O DataFrame DF1 consiste em 2 duas colunas "Club" com valores ('Tigerzz', 'Yorker', 'Wolf', 'Dangerous', 'LifeGaurd') e "Membros" com valores (4, 6, 5, 6, 8 ). Existem também 2 colunas em 'DF2' com rótulos “Clube” e “Títulos” tendo valores ('Tiger', 'Wolfy', 'York', 'Life', 'Danger') e (1, 3, 0, 4 , 3) respectivamente. Digamos que queremos combinar nossos quadros de dados com base na coluna "Clube". Usaremos a técnica de correspondência difusa para determinar quais nomes de clubes são os jogos mais próximos, porque os nomes dos clubes nos dois quadros de dados diferem um pouco um do outro. Para conseguir isso, podemos usar o método get_close_matches () do pacote Difflib. Primeiro, vamos importar o módulo diffflib.

Criamos uma coluna duplicada "correspondente" para reter valores do clube de coluna do DF2. Em seguida, convertemos os valores da coluna 'Clube' no DataFrame 'DF2' para valores de clubes mais próximos no DataFrame 'df1' usando o método get_close_matches () dentro da função Aplicar (). Na última etapa, mesclamos nossos quadros de dados 'DF1' e 'DF2' para criar um novo DataFrame 'mached_values'. Pode -se notar que a coluna 'correspondente' no quadro de dados acima contém os valores mais intimamente correspondidos com os valores correspondentes na coluna 'Club'.

Conclusão

Neste tutorial, ensinamos como você pode realizar combinação difusa em pandas. Discutimos a biblioteca fuzzywuzzy e como isso nos ajuda na correspondência de strings. Implementamos 3 exemplos neste tutorial. No primeiro exemplo, mostramos a abordagem básica para realizar uma partida difusa com os dados de dados de pandas. No segundo exemplo, usamos o processo.Método Extractone () para extrair as correspondências difusas.