Pandas Fuzzy Match

Pandas Fuzzy Match

El proceso de comparar dos diferentes cadenas de texto y obtener una medida de su similitud es conocido como "Fuzzy Matching". Muchas veces, nos encontramos con cadenas de texto que están mal escritas o tienen errores tipográficos, lo que dificulta llevar a cabo una comparación exacta. Aquí es donde entra en juego el Fuzzy Matching, que nos ayuda a encontrar coincidencias en las cadenas de texto, incluso si estas no son exactas.

En Python, una biblioteca popular para el manejo de datos, es Pandas. Pandas nos ofrece funcionalidades para llevar a cabo Fuzzy Matching entre diferentes conjuntos de datos, ya que nos permite aplicar diversas técnicas de comparación de cadenas de texto y así obtener coincidencias incluso cuando estas no son exactas.

A continuación, veremos cómo podemos llevar a cabo Fuzzy Matching en Pandas y cómo usar esta técnica para comparar diferentes conjuntos de datos.

📋 Aquí podrás encontrar✍
  1. ¿Qué es el Fuzzy Matching?
  2. Cómo realizar Fuzzy Matching en Pandas
  3. Ejemplos de código
  4. Conclusión
  5. Preguntas frecuentes
    1. ¿Qué es el Fuzzy Matching?
    2. ¿Cuándo se usa el Fuzzy Matching?
    3. ¿Cómo se realiza el Fuzzy Matching en Pandas?

¿Qué es el Fuzzy Matching?

Cuando trabajamos con grandes conjuntos de datos, es común encontrarnos con cadenas de texto que no coinciden exactamente con otras, o que contienen errores tipográficos. Buscar estas diferencias manualmente puede ser una tarea tediosa y difícil de llevar a cabo. Es aquí donde entra en juego el Fuzzy Matching, que nos ayuda a encontrar similitudes y coincidencias entre cadenas de texto incluso cuando estas no son exactas.

El Fuzzy Matching se basa en mediciones de distancia y similitud entre las cadenas de texto. Hay distintos métodos para calcular la distancia y similitud entre las cadenas, como por ejemplo el algoritmo de Levenshtein, que determina la distancia de edición entre dos cadenas de texto, o el algoritmo de Jaro-Winkler, que considera tanto las diferencias como las similitudes entre dos cadenas de texto.

Cómo realizar Fuzzy Matching en Pandas

En Pandas, podemos llevar a cabo Fuzzy Matching utilizando la función `merge()` junto con la biblioteca `fuzzywuzzy`. La biblioteca `fuzzywuzzy` contiene una variedad de algoritmos de comparación de cadenas de texto, incluyendo `fuzz.ratio()`, que calcula la distancia de Levenshtein entre dos cadenas de texto.

Para empezar, debemos importar la biblioteca `fuzzywuzzy` e instalarla en nuestro entorno de Python:

!pip install fuzzywuzzy

Luego, debemos importar las funciones necesarias:

from fuzzywuzzy import fuzz
from fuzzywuzzy import process

Una vez que hemos importado las bibliotecas necesarias, podemos empezar a utilizarlas para llevar a cabo Fuzzy Matching. Para ello, primero debemos tener dos conjuntos de datos que queremos comparar.

Supongamos que queremos comparar dos conjuntos de datos diferentes: un conjunto de datos que contiene nombres de países y otro conjunto de datos que contiene nombres de ciudades. Ambos conjuntos de datos provienen de diferentes fuentes y, por lo tanto, pueden contener errores tipográficos o diferencias en el capitalizado.

Para comparar los dos conjuntos de datos, podemos utilizar `merge()` y la función `fuzz.ratio()`. `merge()` combina dos conjuntos de datos en uno solo, y `fuzz.ratio()` nos permite comparar dos cadenas de texto y obtener una medida de su similitud en términos de porcentaje.


import pandas as pd

# primer conjunto de datos: nombres de países
df_countries = pd.DataFrame({
'country_name': ['Argentina', 'Brazil', 'Chile', 'Colombia', 'Ecuador', 'Peru', 'Uruguay', 'Venezuela']
})

# segundo conjunto de datos: nombres de ciudades
df_cities = pd.DataFrame({
'city_name': ['Buenos Aires', 'Rio de Janeiro', 'Santiago', 'Bogota', 'Quito', 'Lima', 'Montevideo', 'Caracas']
})

# comparación de cadenas de texto con Fuzzy Matching
merged_df = df_countries.merge(df_cities, left_on=df_countries['country_name'], right_on=df_cities['city_name'], how='inner')
merged_df['similarity'] = merged_df.apply(lambda x: fuzz.ratio(x['country_name'], x['city_name']), axis=1)

En el código anterior, primero creamos dos DataFrames diferentes con los nombres de los países y las ciudades. Luego combinamos los dos DataFrames con `merge()` y utilizamos `fuzz.ratio()` junto con la función `apply()` para comparar los nombres de los países con los nombres de las ciudades.

El resultado final es un DataFrame que muestra los nombres de los países y las ciudades, junto con una columna que indica la similitud entre las dos cadenas de texto en términos de porcentaje.

Ejemplos de código

A continuación se presentan algunos ejemplos de código que muestran cómo podemos utilizar Fuzzy Matching en Pandas para comparar diferentes conjuntos de datos:

1. Comparar nombres de productos:


import pandas as pd
from fuzzywuzzy import fuzz

# primer conjunto de datos: nombres de productos
df_products1 = pd.DataFrame({
'product_name': ['iPhone X', 'Samsung Galaxy S9', 'LG V30', 'Google Pixel 2', 'OnePlus 5T']
})

# segundo conjunto de datos: nombres de productos con errores tipográficos
df_products2 = pd.DataFrame({
'product_name': ['iPhine X', 'Samsumg Galaxi S9', 'LGV30', 'Gogle Pixel2', 'Onepluus 5T']
})

# comparación de cadenas de texto con Fuzzy Matching
merged_df = df_products1.merge(df_products2, on='product_name', how='inner')
merged_df['similarity'] = merged_df.apply(lambda x: fuzz.ratio(x['product_name_x'], x['product_name_y']), axis=1)

En este ejemplo, comparamos nombres de productos entre dos conjuntos de datos diferentes, uno que contiene los nombres correctos y otro que contiene errores tipográficos en los nombres. Utilizamos `fuzz.ratio()` para comparar todas las combinaciones posibles entre los dos conjuntos de datos y obtener una medida de similitud entre los nombres de los productos.

2. Encontrar duplicados en nombres de clientes:


import pandas as pd
from fuzzywuzzy import fuzz

# conjunto de datos: nombres de clientes
df_customers = pd.DataFrame({
'customer_name': ['John Smith', 'John Smit', 'John Smeeth', 'Jane Doe', 'Jan Do']
})

# encontrar duplicados con Fuzzy Matching
merged_df = df_customers.merge(df_customers, on='customer_name', how='outer')
merged_df = merged_df[merged_df['customer_name_x'] != merged_df['customer_name_y']]
merged_df['similarity'] = merged_df.apply(lambda x: fuzz.ratio(x['customer_name_x'], x['customer_name_y']), axis=1)
merged_df = merged_df[merged_df['similarity'] > 90]

En este ejemplo, queremos encontrar duplicados en los nombres de los clientes. Utilizamos `merge()` para obtener todas las combinaciones posibles entre los diferentes nombres de clientes y luego `fuzz.ratio()` para obtener una medida de similitud entre los diferentes nombres. Finalmente, filtramos por similitudes superiores al 90% para encontrar los nombres de clientes que podrían ser duplicados.

Conclusión

El Fuzzy Matching es una técnica útil para comparar cadenas de texto cuando estas no coinciden exactamente. En Python, podemos utilizar Pandas junto con la biblioteca `fuzzywuzzy` para llevar a cabo Fuzzy Matching entre diferentes conjuntos de datos y así buscar coincidencias incluso cuando las cadenas de texto no son exactas. Esto nos permite ahorrar tiempo y esfuerzo al comparar grandes conjuntos de datos, especialmente cuando hay errores tipográficos involucrados.

Preguntas frecuentes

¿Qué es el Fuzzy Matching?

El Fuzzy Matching es un proceso de comparación de cadenas de texto que nos permite encontrar coincidencias incluso cuando las cadenas no coinciden exactamente. El Fuzzy Matching utiliza mediciones de distancia y similitud entre las palabras de las cadenas de texto para encontrar coincidencias entre ellas.

¿Cuándo se usa el Fuzzy Matching?

El Fuzzy Matching se utiliza cuando se quiere comparar cadenas de texto que no coinciden exactamente. Esto puede suceder cuando hay errores tipográficos o diferentes variaciones en las cadenas de texto que se están comparando.

¿Cómo se realiza el Fuzzy Matching en Pandas?

En Pandas, se puede realizar Fuzzy Matching utilizando la función `merge()` junto con la biblioteca `fuzzywuzzy`. La biblioteca `fuzzywuzzy` contiene una variedad de algoritmos de comparación de cadenas de texto, incluyendo `fuzz.ratio()`, que calcula la distancia de Levenshtein entre dos cadenas de texto.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Subir