Limpieza y preprocesamiento de datos raspados

Guías, Guías, Ago-05-20245 minutos de lectura

En esta entrada del blog, exploraremos los diversos retos a los que te puedes enfrentar con los datos raspados y te ofreceremos una guía detallada sobre cómo limpiarlos y preprocesarlos para obtener resultados óptimos. Tanto si eres un analista de datos experimentado como si eres un raspador web en ciernes que utiliza Python, esta guía tiene como objetivo ofrecerte consejos prácticos y técnicas para ordenar de forma eficiente tus conjuntos de datos.

Desde los errores más comunes hasta las mejores prácticas y ejemplos del mundo real, manténgase en sintonía para aprender a hacer que sus datos raspados sean lo más limpios y procesables posible.

Desafíos comunes en los datos raspados

Los datos raspados suelen plantear sus propios problemas. Algunos de los problemas más comunes son las irregularidades, las incoherencias y los valores que faltan. Estos problemas pueden dificultar considerablemente el análisis eficaz de los datos.

Ejemplos de irregularidades e incoherencias

Las irregularidades pueden adoptar muchas formas. Por ejemplo, imagine que extrae los precios de los productos de varios sitios web de comercio electrónico. Un sitio puede indicar precios con impuestos incluidos, mientras que otro puede excluirlos. Las unidades de medida también pueden diferir: por ejemplo, kilogramos frente a libras. Estas incoherencias exigen una limpieza y un preprocesamiento exhaustivos para garantizar que los datos sean precisos y comparables.

Repercusiones de la mala calidad de los datos

La mala calidad de los datos no sólo distorsiona los resultados, sino que también puede conducir a decisiones empresariales incorrectas. Para los analistas de datos, esto hace que la fase de limpieza no sea negociable. Unos datos correctamente depurados garantizan que los análisis posteriores sean fiables y reveladores.

Herramientas y técnicas de limpieza de datos

Guía paso a paso con Pandas

Veamos un ejemplo básico de limpieza de un conjunto de datos utilizando Pandas. Supongamos que ha extraído datos sobre películas, pero los datos incluyen valores que faltan y un formato incoherente.

Paso 1 - Carga de datos:

   importar pandas como pd
   df = pd.read_csv('peliculas.csv')

Paso 2 - Tratamiento de los valores perdidos:

   df.fillna(method='ffill', inplace=True)

Paso 3 - Normalización de formatos:

df['fecha_lanzamiento'] = pd.to_datetime(df['fecha_lanzamiento'])

Paso 4 - Eliminar duplicados:

df.drop_duplicates(inplace=True)

Aprovechamiento de NumPy para la limpieza de datos

NumPy complementa a Pandas proporcionando funciones matemáticas de alto rendimiento. Por ejemplo, para manejar valores atípicos, puede utilizar la función `np.where` de NumPy para limitar los valores extremos.

import pandas as pd
import numpy as np
# Sample data
data = {
   'A': [1, 2, 3, 1000, 5],
   'B': [10, 20, 30, 40, 5000]
}
# Create a DataFrame
df = pd.DataFrame(data)
# Define a threshold to cap the values
threshold_A = 100
threshold_B = 100
# Use np.where to cap the extreme values
df['A'] = np.where(df['A'] > threshold_A, threshold_A, df['A'])
df['B'] = np.where(df['B'] > threshold_B, threshold_B, df['B'])
print("DataFrame after handling outliers:")
print(df)

Este es el resultado del script anterior:

DataFrame después de tratar los valores atípicos:
   A B
0 1 10
1 2 20
2 3 30
3 100 40
4 5 100

Buenas prácticas en el preprocesamiento de datos raspados

Normalización de formatos y estructuras de datos

La normalización es crucial cuando se trabaja con múltiples fuentes de datos. Asegúrese de que los puntos de datos similares de distintas fuentes siguen el mismo formato. Por ejemplo, las fechas deben tener un formato estándar como ISO 8601 para evitar ambigüedades.

Tratamiento de datos inexactos o incorrectos

Los datos que faltan deben tratarse adecuadamente. Técnicas como la imputación pueden completar los valores que faltan basándose en otros datos disponibles. En cambio, los datos incorrectos suelen requerir una inspección manual o algoritmos de validación para corregirlos.

Garantizar la coherencia de los datos

Los controles de coherencia son vitales. Utilice secuencias de comandos para asegurarse de que sus datos cumplen unas normas predefinidas. Por ejemplo, si una columna solo debe contener números positivos, escribe un script de validación para señalar cualquier anomalía.

Caso práctico: Aplicación en el mundo real

Vamos a sumergirnos en un ejemplo práctico para ver cómo podemos hacer frente a algunos de los desafíos comunes en los datos raspados. Recorreremos el proceso de extracción, limpieza y análisis de datos de un hipotético sitio web de ofertas de empleo, centrándonos en los problemas reales con los que nos podemos encontrar.

Paso 1: Recopilación de datos

Imagina que estás extrayendo datos de un sitio web de ofertas de empleo. El objetivo es recopilar los títulos de los puestos, los nombres de las empresas y los rangos salariales. Aquí tienes un ejemplo de script Python que utiliza BeautifulSoup para extraer estos datos:

from bs4 import BeautifulSoup
import requests
import pandas as pd

url = "https://example-jobsite.com"
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')

jobs = []
for job_post in soup.find_all('div', class_='job'):
    title = job_post.find('h2').text
    company = job_post.find('p', class_='company').text
    salary = job_post.find('span', class_='salary').text
    jobs.append({'title': title, 'company': company, 'salary': salary})

df = pd.DataFrame(jobs)

En este punto, los datos podrían parecerse a esto:

títuloempresasalario
ingeniero de softwareCorporación Tecnológica$100,000
desarrollador seniorInnovatech$120,000
Junior DevstartupX$80,000
Analista de datosBigData Inc$95000
científico de datos seniordatamine140,000 USD

Fíjese en las incoherencias: distintas mayúsculas y minúsculas, diferentes símbolos monetarios y un formato incoherente para los valores salariales.

Paso 2: Limpieza de los datos

Limpiar estos datos es crucial antes de poder realizar cualquier análisis significativo. Desglosemos los pasos:

1. Normalización de datos de texto: Los títulos de los puestos de trabajo y los nombres de las empresas suelen tener un formato incoherente. Podemos normalizarlos poniéndolos en mayúsculas de manera uniforme.

df['título'] = df['título'].str.strip().str.title()
df['empresa'] = df['empresa'].str.strip().str.title()

Después de este paso, los datos tendrán un aspecto más uniforme:

títuloempresasalario
Ingeniero de softwareCorporación Tecnológica$100,000
Desarrollador seniorInnovatech$120,000
Junior DevStartupx$80,000
Analista de datosBigdata Inc$95000
Científico de datos séniorDatamine140,000 USD

2: Normalización de datos numéricos: Los valores salariales pueden contener símbolos y formatos diferentes, lo que dificulta las comparaciones directas. Eliminaremos el símbolo del dólar y las comas, y convertiremos estas cadenas en valores numéricos.

df['salario'] = df['salario'].str.replace('[\$,]', '').str.replace('USD', '').astype(float)

Ahora, su columna de salario tendrá valores numéricos coherentes:

títuloempresasalario
Ingeniero de softwareCorporación Tecnológica100000
Desarrollador seniorInnovatech120000
Junior DevStartupx80000
Analista de datosBigdata Inc95000
Científico de datos séniorDatamine140000

3: Tratamiento de los datos que faltan: Supongamos que en algunas ofertas de empleo falta información sobre el salario. En lugar de eliminar estas filas, puede optar por rellenar los valores que faltan basándose en alguna lógica, como el salario medio para ese puesto:

df['salario'].fillna(df.groupby('título')['salario'].transform('mediana'), inplace=True)

Paso 3: Análisis de los datos depurados

Con los datos depurados, ya puede realizar análisis significativos. Por ejemplo, es posible que desee conocer la distribución salarial entre los distintos puestos de trabajo:

imprimir(df.groupby('título')['salario'].describe())

Este comando le ofrecerá un resumen estadístico de cada puesto de trabajo, proporcionándole información sobre las tendencias salariales.

Ejemplo: Tratamiento de valores atípicos con NumPy

En algunos casos, los datos pueden contener valores atípicos, es decir, valores salariales extremadamente altos o bajos que pueden sesgar el análisis. NumPy puede utilizarse para limitar estos valores atípicos:

importar numpy como np

# Limitar los salarios a un umbral (por ejemplo, 200.000)
salario_umbral = 200000
 df['salario'] = np.where(df['salario'] > umbral_salario, umbral_salario, df['salario'])

print(df)

Después de tapar, su conjunto de datos podría tener este aspecto:

títuloempresasalario
Ingeniero de softwareCorporación Tecnológica100000
Desarrollador seniorInnovatech120000
Junior DevStartupx80000
Analista de datosBigdata Inc95000
Científico de datos séniorDatamine200000

Impacto en la percepción y la toma de decisiones

Al limpiar y preprocesar sus datos, ha transformado un conjunto de datos desordenado en un recurso valioso. Ahora puede extraer información con confianza, como identificar las empresas mejor pagadas o analizar las tendencias salariales en los distintos sectores. Estos datos informan directamente a las estrategias empresariales, como la evaluación comparativa de salarios o los planes de adquisición de talento.

Conclusión y próximos pasos

En esta entrada del blog, hemos cubierto la importancia de la limpieza y el preprocesamiento de datos raspados. Desde la comprensión de los desafíos comunes hasta el aprovechamiento de potentes bibliotecas de Python como Pandas y NumPy, tu caja de herramientas está ahora equipada con lo esencial.

Recuerde que los datos limpios no son sólo un lujo, sino una necesidad para tomar decisiones precisas y fiables. Siguiendo las mejores prácticas aquí descritas, puede asegurarse de que su análisis de datos sea eficiente y eficaz.

¿Está listo para llevar su análisis de datos al siguiente nivel? Empieza hoy mismo a poner en práctica estas estrategias y consulta nuestros otros recursos para profundizar tus conocimientos sobre la limpieza y el preprocesamiento de datos. ¡Feliz análisis!