Codificación One Hot Encoding de una característica categórica con pandas

En este escenario vamos a aplicar el método de codificación One Hot Encoding a las características categóricas del dataset Titanic proveído por seaborn. Para ello utilizaremos la función get_dummies de pandas. Comencemos cargando el dataset y examinándolo:

titanic = sns.load_dataset("titanic")

titanic.head()

Dataset Titanic

Veamos los tipos de las características:

titanic.dtypes

survived          int64
pclass            int64
sex              object
age             float64
sibsp             int64
parch             int64
fare            float64
embarked         object
class          category
who              object
adult_male         bool
deck           category
embark_town      object
alive            object
alone              bool
dtype: object

En este dataset, las características categóricas son las correspondientes a los tipos "object" y "category". Extraigamos la lista de estas características usando el método select_dtypes de pandas:

cat_features = titanic.select_dtypes(include = ["object", "category"]).columns
cat_features

Index(['sex', 'embarked', 'class', 'who', 'deck', 'embark_town', 'alive'], dtype='object')

Ahora podemos pasar a la función pd.get_dummies el subconjunto del dataframe titanic formado por estas características:

cat_titanic = pd.get_dummies(titanic[cat_features], drop_first = True, dummy_na = True)
cat_titanic.head()

Resultado de la función get_dummies

Hemos configurado la función con dos argumentos adicionales:

  • drop_first = True, que elimina la primera de las columnas generadas para cada característica con el objetivo de evitar la colinealidad (que una de las columnas sea combinación lineal de las demás)
  • dummy_na = True, que genera una columna adicional para los valores nulos que se encuentren en cada característica

Ahora, basta eliminar las características originales:

titanic.drop(cat_features, axis = 1, inplace = True)

...y concatenar el dataframe titanic resultante con el dataframe que hemos generado con las características "dummies":

titanic = pd.concat([titanic, cat_titanic], axis = 1)

titanic.head()

Dataset final
Categoría
Submitted by admin on Sun, 04/14/2019 - 18:45