El primer enfoque es identificar los distintos valores existentes en la variable y sustituir cada uno de ellos por un número, normalmente números enteros, comenzando por el 0, enfoque denominado Label Encoding. Así, en el dataset Titanic que acabamos de ver, la característica "sex" puede tomar los valores "male" y "female", cosa que podemos confirmar con el método unique de las series pandas:
titanic.sex.unique()
De esta forma, podríamos sustituir "male" por el valor 0 y "female" por el valor 1, por ejemplo. Aunque hay varias formas de conseguirlo, mencionemos la clase LabelEncoder de scikit-learn. Una vez importada e instanciada, este codificador puede entrenarse con el método .fit(), indicando como argumento el conjunto de valores que deseamos transformar. En este entrenamiento se identifican los valores únicos de la característica y los valores numéricos por los que se van a reemplazar. El método .transform(), aplicado al mismo u otro conjunto de valores, reemplaza los valores únicos identificados por los valores numéricos equivalentes. El método .fit_transform() nos permite entrenar el codificador y transformar el conjunto de datos en un único paso. Apliquémoslo a la característica "sex" del dataframe Titanic:
from sklearn.preprocessing import LabelEncoder
encoder = LabelEncoder()
titanic["sex"] = encoder.fit_transform(titanic["sex"])
Echemos un vistazo al resultado:
titanic.head()
Una vez entrenado el codificador, podemos acceder a las clases identificadas con el atributo .classes_:
encoder.classes_
El valor numérico por el que sustituir a cada una de estas categorías es el índice que ocupa en el array anterior (a female se le ha asignado el valor 0 y a male el valor 1).