Codificación de Variables Categóricas en Python con Pandas y Scikit-Learn
Clase 18 de 25 • Curso de Matemáticas para Data Science: Estadística Descriptiva
Resumen
¿Cómo codificar numéricamente variables categóricas en Python?
En el mundo del análisis de datos y del machine learning, es crucial poder manejar diferentes tipos de datos de manera eficiente. Una pregunta recurrente es cómo transformar variables categóricas en datos numéricos en Python, para lo cual existen distintas estrategias que pueden aplicarse dependiendo del caso específico y las herramientas utilizadas, como pandas o scikit-learn. Aquí exploramos las diferencias entre estos métodos y su implementación práctica.
¿Qué es la codificación dummy y one-hot encoding?
Existen dos métodos principales para transformar variables categóricas en numéricas:
-
Dummmy encoding: Se trata de una representación compacta, donde, por ejemplo, si tenemos tres categorías (inglés, español y francés), podemos codificar esas tres categorías en un vector de dos números: Inglés (0,0), Español (0,1) y Francés (1,0). La debilidad de este método es que no puede manejar nuevas categorías o valores no esperados.
-
One-hot encoding: Aquí se crea un vector con tantas componentes como categorías existan. Siguiendo el ejemplo anterior, Inglés se codificaría como (1,0,0), Español como (0,1,0), y Francés como (0,0,1). Este método, aunque usa más números, permite codificar valores no identificados como (0,0,0), lo que le otorga flexibilidad al manejar nuevas categorías.
¿Cómo aplicar one-hot encoding en pandas?
En pandas, la función get_dummies
ofrece la funcionalidad necesaria para realizar un one-hot encoding, aunque el nombre de la función pueda generar confusión. Aquí un ejemplo de aplicación:
import pandas as pd
# Supongamos que tenemos un dataframe df con una columna categórica 'engine_type'
df = pd.DataFrame({'engine_type': ['diesel', 'electric', 'gas']})
# Aplicamos get_dummies para realizar un one-hot encoding
df_encoded = pd.get_dummies(df['engine_type'])
print(df_encoded)
Esto transformará la columna engine_type
en tres columnas binarias, una por cada categoría encontrada.
¿Cómo implementar one-hot encoding en scikit-learn?
Scikit-learn también ofrece soluciones robustas para el one-hot encoding mediante su clase OneHotEncoder
.
from sklearn.preprocessing import OneHotEncoder
# Inicializamos el codificador
encoder = OneHotEncoder(handle_unknown='ignore')
# Ajustamos el encoder a nuestros datos
encoder.fit(df[['engine_type']])
# Transformamos los datos
encoded_data = encoder.transform([['gas'], ['diesel'], ['unknown']]).toarray()
print(encoded_data)
Al configurarlo con handle_unknown='ignore'
, el encoder asignará un vector de ceros a cualquier categoría no conocida, multiplicando así la flexibilidad del método.
¿Es posible tratar variables numéricas como categóricas?
Definitivamente, y puede ser útil dependiendo del análisis a realizar. Un ejemplo es tratar los años de producción de un auto como categorías:
# Suponemos que gear_produced es una columna con años
encoder.fit(df[['gear_produced']])
# Transformamos años conocidos y desconocidos
encoded_years = encoder.transform([[2009], [2016], [1900]]).toarray()
print(encoded_years)
Al hacer esto, cada año se convierte en una categoría distinta, lo que si bien aumenta la dimensionalidad del dataset, ofrece una nueva perspectiva para su análisis.
Con estas técnicas en mano, tienes la capacidad de adaptar y manipular datos categóricos de una forma que potencie tus análisis y modelos. Sigue explorando y aplicando estas técnicas para avanzar en tu dominio del análisis de datos en Python.