Búsqueda de sitios web

7 formas de mejorar tus habilidades de limpieza de datos con Python


Mejore la limpieza de datos de Python corrigiendo entradas no válidas, convirtiendo tipos, codificando variables, manejando valores atípicos, seleccionando características, escalando y completando valores faltantes.

Imagen del autor

Limpiar los datos es una de las partes más importantes y que consumen más tiempo de cualquier proyecto de ciencia de datos.

Con el mejor algoritmo, aún necesitas datos limpios para obtener buenos resultados.

En este artículo, te daré siete trucos para mejorar tu juego de limpieza de datos en Python.

1. Manejo de entradas de datos no válidas

Los conjuntos de datos de la vida real a menudo contienen entradas de datos no válidas. Para evitar corrupción o valores inesperados, estos deben corregirse antes de cualquier análisis.

Predicción del precio

Utilizaremos este proyecto de las siguientes cinco maneras. Haensel AMS ha utilizado este proyecto de datos en el proceso de contratación para el puesto de científico de datos. Aquí está el enlace a este proyecto.

Aplicación

En nuestro conjunto de datos, el loc1 La columna contiene valores de cadena inesperados como 'S' y 'T', que no debería estar presente si loc1 sea numérico.

# Check for invalid entries in 'loc1'
df["loc1"].value_counts()

Aquí está el resultado.

Ahora, eliminemos las filas que incluyen valores no válidos.

# Remove rows with invalid 'loc1' values
df = df[(df["loc1"].str.contains("S") == False) & (df["loc1"].str.contains("T") == False)] 
df.shape

Aquí está el resultado.

Evaluemos el resultado.

  • Antes de limpiar: El value_counts() el resultado muestra que 'S' y 'T' aparecen una vez cada uno en loc1 .
  • Después de la limpieza: eliminar estas entradas reduce el tamaño del conjunto de datos de 10 000 a 9998 filas.
  • Impacto: la eliminación de entradas no válidas garantiza que los datos erróneos no distorsionen los análisis y modelos posteriores.

2. Convertir tipos de datos adecuadamente

Los tipos de datos utilizados deben ser correctos para que posteriormente puedas realizar operaciones específicas. Convertir datos al tipo adecuado proporciona una forma de garantizar cálculos correctos y evitar errores.

Aplicación

El loc1 y loc2 las columnas son inicialmente del tipo object, posiblemente debido a ceros a la izquierda o caracteres no numéricos. Deben convertirse a tipos numéricos para su análisis.

Aquí está el código.

df["loc2"] = pd.to_numeric(df["loc2"], errors='coerce')
df["loc1"] = pd.to_numeric(df["loc1"], errors='coerce')
df.dropna(inplace = True)
df.shape

Aquí está el resultado.

Evaluemos lo que hicimos aquí.

  • Después de la conversión: se convierten a float64 o int64 tipos.
  • Pérdida de datos: el conjunto de datos se reduce ligeramente en tamaño (de 9998 a 9993 filas) debido a que se eliminan filas con valores no convertibles.
  • Impacto: la conversión de tipos de datos permite operaciones numéricas y es esencial para el modelado.

3. Codificación de variables categóricas

Los modelos de aprendizaje automático solo pueden consumir entradas numéricas. Por lo tanto, los valores categóricos deben someterse al proceso de codificación, transformándolos en una forma numérica, que preservará su información inherente.

Aplicación

La dow (día de la semana) la columna es categórica con valores como 'Mon', 'Tue', etc. Utilizó dos métodos para codificar estos datos:

  1. Codificación One-Hot: creación de columnas binarias para cada categoría.
  2. Codificación ordinal: asignación de categorías a valores numéricos.

Veamos ejemplos.

Codificación en caliente

# Create dummy variables
dow_dummies = pd.get_dummies(df['dow'])
df = df.join(dow_dummies).drop('dow', axis=1)
df.head()

Aquí está el resultado.

Codificación ordinal

# Map days of the week to numerical values
days_of_week = {'Mon': 1, 'Tue': 2, 'Wed': 3, 'Thu': 4, 'Fri': 5, 'Sat': 6, 'Sun': 7}
df['dow'] = df['dow'].map(days_of_week)
df.head()

Aquí está el resultado.

Evaluemos el resultado.

  • Codificación One-Hot: agrega nuevas columnas (Mon, Tue, etc.) con binario indicadores.
  • Codificación ordinal: reemplaza los valores dow con representaciones numéricas.
  • Impacto: ambos métodos convierten datos categóricos a un formato adecuado para modelar. La codificación one-hot es preferible cuando no existe un orden inherente, mientras que la codificación ordinal asume un orden.

4. Manejo de valores atípicos

Los valores atípicos pueden distorsionar sus análisis estadísticos y arruinar sus modelos. Identificar y controlar los valores atípicos es una forma de contrarrestar esto y aumentar la solidez de sus resultados.

Aplicación

Primero revisemos los valores atípicos. Aquí está el c
oda.

from pandas.plotting import scatter_matrix

# Suppress the output of the scatter_matrix function
_ = scatter_matrix(result.iloc[:,0:7], figsize=(12, 8))

Aquí está el resultado.

Veamos los valores de párrafo1

result["para1"].value_counts()

Aquí está el resultado.

Hemos identificado que el para1 La columna tiene valores extremos (por ejemplo, 337), que son valores atípicos en comparación con el resto de los datos. Filtremos esta columna.

# Analyze 'para1' value counts
print(result["para1"].value_counts())

# Remove outliers in 'para1'
result = result[result["para1"] < 10]

Aquí está la evaluación del resultado.

  • Antes de la eliminación: para1 tiene valores hasta 337, mientras que la mayoría de las entradas están entre 0 y 7.
  • Después de la eliminación: entradas con para1 >= 10 se eliminan, lo que reduce el tamaño del conjunto de datos.
  • Impacto: eliminar los valores atípicos evita que sesguen el análisis y mejora el rendimiento del modelo.

5. Selección de funciones basada en la correlación

Solo se seleccionan las características que se correlacionan altamente con la variable de destino, lo que puede aumentar la precisión del modelo y reducir la complejidad.

Aplicación

Calculó la correlación entre las características y la variable objetivo precio, seleccionando las características principales.

five_best = []
df_5 = pd.DataFrame(result.corr()["price"]).sort_values(by = "price", ascending = False)
df_5 = df_5.drop(df_5.index[0]).head(5)
for i in range(len(df_5)):
    five_best.append(df_5.index[i])
five_best

Aquí está el resultado.

Aquí está la evaluación de lo que hicimos.

  • Funciones principales identificadas: ['para2', 'para4', 'para3', 'para1', ' Viernes]
  • Impacto: uso de funciones con una mayor correlación con el precio puede mejorar el poder predictivo de sus modelos.

6. Funciones de escala

El escalado garantiza que todas las funciones contribuyan por igual al proceso de entrenamiento del modelo, lo cual es especialmente importante para algoritmos sensibles a las escalas de funciones.

Escalar cada característica y garantizar que todas contribuyan de la misma manera al modelo es muy importante en el aprendizaje automático, especialmente para algunos algoritmos que son sensibles a diferentes escalas de características de entrada.

Aplicación

Aplicamos diferentes técnicas de escalado:

  • Escala mín.-máx.
  • Escalado estándar
  • Escalado robusto

Entonces, veamos su aplicación.

Ejemplo de escala estándar

from sklearn.preprocessing import StandardScaler

# Separate features and target
X = result.drop('price', axis=1)
y = result['price']

# Apply Standard Scaling
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

Evaluemos lo que hemos hecho.

  • Rendimiento del modelo: el escalado mejoró los errores de entrenamiento y prueba del modelo.
  • Comparación: comparó el rendimiento de diferentes métodos de escalado.
  • Impacto: el escalado adecuado puede conducir a una convergencia más rápida y una mejor precisión del modelo.

7. Manejo de valores faltantes

Los modelos de aprendizaje automático pueden volverse extravagantes con valores faltantes. Llenar significa asegurarse de que el conjunto para fines de capacitación esté completamente realizado.

Construcción de modelos sobre un conjunto de datos sintéticos

Este proyecto de datos se utilizó durante la contratación para los puestos de ciencia de datos de Capital One. Aquí está el enlace.

Aplicación

Sus conjuntos de datos contienen valores faltantes en varias funciones. Para mantener la integridad de los datos, eligió completar estos valores faltantes con la mediana de cada característica.

Primero, comprobemos los valores que faltan.

# Check missing values in train_data
missing_train = train_data.isna().sum()
print("Missing values in train_data:")
print(missing_train[missing_train > 0])

# Check missing values in test_data
missing_test = test_data.isna().sum()
print("\nMissing values in test_data:")
print(missing_test[missing_test > 0])

Aquí está el resultado.

Ahora, veamos qué código usaremos para limpiar.

# Filling missing values in train_data with median
for column in train_data.columns:
    median_value = train_data[column].median()
    train_data[column].fillna(median_value, inplace=True)

# Filling missing values in test_data with median
for column in test_data.columns:
    median_value = test_data[column].median()
    test_data[column].fillna(median_value, inplace=True)

Ahora, comprobemos una vez más. Aquí está el código.

# Check missing values in train_data
missing_train = train_data.isna().sum()
print("Missing values in train_data:")
print(missing_train[missing_train > 0])

# Check missing values in test_data
missing_test = test_data.isna().sum()
print("\nMissing values in test_data:")
print(missing_test[missing_test > 0])

Aquí está el resultado.

Evaluemos lo que hicimos aquí.

  • Antes de la imputación: a numerosas funciones les faltan valores en ambos conjuntos de datos.
  • Después de la imputación: se completan todos los valores faltantes; los conjuntos de datos están completos.
  • Impacto: mejora el rendimiento del modelo al proporcionar un conjunto de datos completo para entrenamiento y evaluación.

Pensamientos finales

En este artículo, hemos descubierto siete métodos clave de limpieza de datos que le enseñarán más sobre Python y le ayudarán a crear mejores modelos. Además, consulte estas Bibliotecas Python para limpieza de datos.

El uso de estos métodos mejorará enormemente su análisis de datos, especialmente en proyectos de datos de la vida real. También lo preparará para el proceso de contratación de científicos de datos.