El preprocesamiento de datos es una etapa fundamental en cualquier proyecto de Machine Learning. Antes de entrenar cualquier modelo, es crucial asegurarse de que los datos est茅n en un formato adecuado, limpio y estructurado. Una biblioteca que facilita enormemente esta tarea es Pandas, que ofrece herramientas eficientes para la manipulaci贸n y an谩lisis de datos. En este art铆culo exploraremos las t茅cnicas m谩s utilizadas de preprocesamiento de datos en Machine Learning con Pandas.
Los modelos de Machine Learning son tan buenos como los datos que reciben. Los datos reales suelen estar llenos de imperfecciones: valores faltantes, tipos de datos incorrectos, valores at铆picos y m谩s. Si un modelo recibe datos sin preprocesar, sus predicciones ser谩n imprecisas y poco confiables. El preprocesamiento permite:
Ahora, exploremos algunas de las t茅cnicas m谩s importantes utilizando Pandas.
El primer paso es cargar el conjunto de datos y realizar una exploraci贸n preliminar. Pandas permite cargar datos desde una variedad de fuentes, como archivos CSV, Excel o bases de datos SQL.
import pandas as pd
# Cargar un archivo CSV
data = pd.read_csv('dataset.csv')
# Mostrar las primeras filas del dataset
print(data.head())
La funci贸n head()
nos da una vista r谩pida de las primeras cinco filas del conjunto de datos, lo que permite detectar si hay alg煤n problema evidente en la estructura de los datos.
Pandas tambi茅n ofrece la funci贸n describe()
para obtener estad铆sticas b谩sicas, como el promedio, la desviaci贸n est谩ndar y los percentiles.
print(data.describe())
Esto ayuda a identificar posibles problemas como valores at铆picos y escalas de variables inconsistentes.
Los valores faltantes son comunes en los conjuntos de datos. Pandas ofrece varias formas de lidiar con ellos, dependiendo del enfoque que se desee adoptar:
Si una columna o fila tiene demasiados valores faltantes, podr铆amos optar por eliminarla.
# Eliminar filas con valores nulos
data_cleaned = data.dropna()
# Eliminar columnas con valores nulos
data_cleaned = data.dropna(axis=1)
Otra opci贸n es reemplazar los valores faltantes por la media, mediana o un valor personalizado.
# Reemplazar valores nulos con la media de la columna
data['columna'] = data['columna'].fillna(data['columna'].mean())
# Reemplazar valores nulos con un valor espec铆fico
data['columna'] = data['columna'].fillna(0)
Es com煤n encontrar datos que no est谩n en el tipo correcto, como n煤meros almacenados como cadenas o fechas como texto plano. Pandas facilita la conversi贸n de tipos de datos.
Para trabajar con fechas, es esencial asegurarse de que est茅n en el formato adecuado.
data['fecha'] = pd.to_datetime(data['fecha'])
Los algoritmos de Machine Learning necesitan datos num茅ricos, por lo que las variables categ贸ricas deben transformarse en n煤meros. Pandas ofrece get_dummies()
para crear variables dummy o de indicador.
# Crear variables dummy para una columna categ贸rica
data = pd.get_dummies(data, columns=['columna_categorica'])
Algunos algoritmos son sensibles a la escala de las variables. El escalado y la normalizaci贸n garantizan que todas las caracter铆sticas se midan en la misma escala, mejorando el rendimiento del modelo.
El escalado se refiere a ajustar los valores de las caracter铆sticas para que est茅n en un rango espec铆fico, como [0, 1].
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
data[['col1', 'col2']] = scaler.fit_transform(data[['col1', 'col2']])
La normalizaci贸n implica ajustar los datos para que la media sea 0 y la desviaci贸n est谩ndar sea 1.
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
data[['col1', 'col2']] = scaler.fit_transform(data[['col1', 'col2']])
Los valores at铆picos pueden distorsionar los modelos, especialmente aquellos basados en distancias como la regresi贸n lineal o k-nearest neighbors. Identificar y tratar estos valores es crucial.
Una forma com煤n de identificar outliers es usando el rango intercuartil (IQR).
Q1 = data['columna'].quantile(0.25)
Q3 = data['columna'].quantile(0.75)
IQR = Q3 - Q1
# Identificar outliers
outliers = data[(data['columna'] < (Q1 - 1.5 * IQR)) | (data['columna'] > (Q3 + 1.5 * IQR))]
Dependiendo del contexto, podemos eliminar los outliers o transformarlos.
# Eliminar outliers
data_cleaned = data[~((data['columna'] < (Q1 - 1.5 * IQR)) | (data['columna'] > (Q3 + 1.5 * IQR)))]
El _feature engineering_ es el proceso de crear nuevas variables a partir de las existentes. Esto puede mejorar la capacidad predictiva del modelo.
Pandas permite combinar varias columnas para crear nuevas caracter铆sticas.
# Crear una nueva columna combinando dos existentes
data['nueva_columna'] = data['columna1'] + data['columna2']
Es posible aplicar funciones a columnas para crear nuevas caracter铆sticas derivadas.
# Aplicar una funci贸n personalizada a una columna
data['log_columna'] = data['columna'].apply(lambda x: np.log(x) if x > 0 else 0)
Una vez que los datos est谩n listos, el 煤ltimo paso del preprocesamiento es dividir el conjunto de datos en entrenamiento y prueba.
from sklearn.model_selection import train_test_split
X = data.drop('target', axis=1)
y = data['target']
# Dividir el dataset en 80% entrenamiento y 20% prueba
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
Esta divisi贸n garantiza que el modelo se entrene con un subconjunto de datos y se eval煤e con otro conjunto no visto previamente.
El preprocesamiento de datos es una etapa cr铆tica que no debe pasarse por alto en el desarrollo de modelos de Machine Learning. Con las herramientas que ofrece Pandas, puedes limpiar, transformar y preparar tus datos de manera eficiente, mejorando as铆 el rendimiento de tus modelos. Desde la gesti贸n de valores nulos hasta la creaci贸n de nuevas caracter铆sticas, las t茅cnicas de preprocesamiento son esenciales para garantizar el 茅xito en cualquier proyecto de Machine Learning.
Jorge Garc铆a
Fullstack developer