Skip to main content

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 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.

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:
1

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.
2

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.
3

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.
4

Encoding, imputación y split

Las funciones encoding(), build_preprocessor() y split_train_test() separan features de la variable objetivo, construyen un ColumnTransformer con imputación de medianas y moda más OneHotEncoding, y dividen los datos en train/test estratificado (80/20).

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.
import seaborn as sns
import pandas as pd

def load_penguins():
    df = sns.load_dataset('penguins')
    return df
Firma: 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

from app.logic.load_data import load_penguins

df = load_penguins()
print(df.shape)   # (344, 7)
print(df.dtypes)

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.
ColumnaTipoDescripción
speciesobjectVariable objetivo: Adelie, Chinstrap o Gentoo
islandobjectIsla de origen: Biscoe, Dream o Torgersen
bill_length_mmfloat64Longitud del culmen (pico) en milímetros
bill_depth_mmfloat64Profundidad del culmen en milímetros
flipper_length_mmfloat64Longitud de la aleta en milímetros
body_mass_gfloat64Masa corporal en gramos
sexobjectSexo: Male o Female
La variable objetivo 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 campo sex. 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:
df = load_penguins()
print(df.isnull().sum())
Salida esperada:
species               0
island                0
bill_length_mm        2
bill_depth_mm         2
flipper_length_mm     2
body_mass_g           2
sex                  11
dtype: int64
Los nulos numéricos se gestionan en el 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.

Build docs developers (and LLMs) love