El preprocesamiento es la fase más crítica de cualquier proyecto de machine learning: ningún modelo, por sofisticado que sea, puede compensar datos mal preparados. En este módulo trabajamos con el dataset Palmer Penguins (344 filas, 7 columnas) y abordamos los cuatro problemas más habituales en datasets reales: valores nulos presentes tanto en variables numéricas como en la variable de sexo, outliers que sesgan las distribuciones, variables categóricas que los modelos no pueden consumir directamente, y la necesidad de crear features derivadas que capturen relaciones morfológicas entre variables. El resultado es un pipeline reproducible y limpio, listo para alimentar modelos de clasificación como Random Forest o XGBoost.Documentation Index
Fetch the complete documentation index at: https://mintlify.com/HelenDiMo/pildora-bootcamp-preprocesamiento/llms.txt
Use this file to discover all available pages before exploring further.
El pipeline de preprocesamiento
El flujo de trabajo se estructura en cuatro etapas secuenciales. Cada una transforma el dataframe y lo pasa a la siguiente:Carga y exploración
La función
load_penguins() carga el dataset directamente desde seaborn. Devuelve un pd.DataFrame con 344 filas y 7 columnas listo para explorar, incluyendo los valores nulos originales.Tratamiento de outliers
La función
cap_outliers(df, col) aplica el método IQR para detectar valores atípicos en una columna numérica y los sustituye por el límite correspondiente (winsorizing/capping). Se preservan todas las filas del dataset.Feature engineering
La función
add_bill_ratio(df) crea la columna derivada bill_ratio = bill_length_mm / bill_depth_mm, un descriptor de forma del pico que mejora la separación entre las tres especies.Módulo load_data
El módulo app/logic/load_data.py contiene una única función responsable de la carga del dataset. Utiliza el cargador integrado de seaborn, que descarga y cachea automáticamente el CSV oficial de Palmer Penguins desde su repositorio de datasets.
load_penguins() → pd.DataFrame
No acepta parámetros. Devuelve el dataset completo sin ningún filtrado ni transformación, conservando todos los valores nulos originales.
Ejemplo de uso
Descripción del dataset
El dataset Palmer Penguins contiene observaciones de tres especies de pingüinos recogidas en el archipiélago Palmer (Antártida). Tiene 344 filas y 7 columnas.| Columna | Tipo | Descripción |
|---|---|---|
species | object | Variable objetivo: Adelie, Chinstrap o Gentoo |
island | object | Isla de origen: Biscoe, Dream o Torgersen |
bill_length_mm | float64 | Longitud del culmen (pico) en milímetros |
bill_depth_mm | float64 | Profundidad del culmen en milímetros |
flipper_length_mm | float64 | Longitud de la aleta en milímetros |
body_mass_g | float64 | Masa corporal en gramos |
sex | object | Sexo: Male o Female |
species tiene tres clases: Adelie (152 ejemplares), Gentoo (124) y Chinstrap (68). La distribución no está perfectamente balanceada, lo que justifica el uso de stratify=y al dividir el dataset.
Valores nulos
El dataset Palmer Penguins contiene valores nulos distribuidos de forma heterogénea. Hay 2 filas en las que faltan todas las medidas (bill_length_mm, bill_depth_mm, flipper_length_mm, body_mass_g) y adicionalmente 11 filas en las que solo falta el camposex. La variable objetivo species no tiene ningún nulo, lo que la hace segura para usar directamente como target sin imputación previa.
Para inspeccionar la distribución de nulos:
ColumnTransformer con SimpleImputer(strategy='median'), y los nulos en sex con SimpleImputer(strategy='most_frequent'). De esta forma no se descarta ninguna fila del dataset.
Explora el resto del módulo
Outliers
Detección y capping de valores atípicos con el método IQR. Preserva todas las filas del dataset.
Feature Engineering
Creación de
bill_ratio, un descriptor morfológico derivado que mejora la discriminación entre especies.Encoding y Split
Imputación, OneHotEncoding y división estratificada train/test con scikit-learn.
Demo interactiva
Explora el pipeline completo paso a paso en la aplicación Streamlit del módulo.