np-where y LabelEncoder son funciones que permiten transformar una variable no numérica en numérica. En nuestro caso, utilizaremos np-where y LabelEncoder para convertir una variable booleana en numérica. Esta labor se realizará en un dataset sobre cáncer de mama que posee 31 variables, de las cuales todas son numéricas, exceptuando una: diagnosis.
¿Qué encontrarás en este post?
Togglenp-where y LabelEncoder: conversión de variables
Tenemos, por tanto, las siguientes variables:
Veamos cómo sería el proceso de transformación de la variable diagnosis, con tipo “object”, por medio de np-where y LabelEncoder:
#np-where y LabelEncoder
#opción 1. np.where
datal ['label_opcion1'] = np.where (data ['diagnosis'] = 'M', 1, 0)
# opción 2. LabelEncoder
from sklearn import preprocessing
le = preprocessing.LabelEncoder ()
le.fit (data ['diagnosis'])
print (list (le.classes_))
data ['label_opcion2'] = le.transform (data ['diagnosis'])
data.head (20)
#hay muchas más opciones: onehot, ordinal, mean...
np.where funciona si se trata de variables binarias. Si no es algo binario, no es posible hacer la conversión. numpy where funciona del siguiente modo: defines una condición y la función devuelve los elementos de x o y, dependiendo de la condición. La condición en el ejemplo anterior sería: si data [‘diagnosis’] es igual a M, si esta condición es sí, escoge 1; si es no, escoge 0. Esta decisión la guardamos en label_opcion1 y eso es todo.
LabelEncoder funciona diferente. Lo primero que hacemos es el preprocessing o preprocesamiento con LabelEncoder; posteriormente, hacemos un fit sobre los datos y luego hacemos un transform.
¿Cuál es la diferencia entre fit y transform?
Existe una pequeña diferencia entre fit y transform, aunque puedan parecer similares.
- El fit, por una parte, se encarga de entrenar, es decir, adapta un objeto a los datos que tenemos.
- El transform, por otra parte, consiste en aplicar un cambio sobre los datos.
Veamos un ejemplo de cómo funciona LabelEncoder. Tenemos el siguiente conjunto de datos:
azul, 0 rojo, 1 negro, 0 blanco, 0 naranja, 1 azul, 0 rojo, 1 negro, 0 blanco, 0 naranja, 1 azul, 0 rojo, 1 negro, 0 blanco, 0 naranja, 1 azul, 0 rojo, 1 negro, 0 blanco, 0 naranja, 1 azul, 0 rojo, 1 negro, 0 blanco, 0 naranja, 1 azul, 0 rojo, 1 negro, 0 blanco, 0 naranja, 1
le_data = pd.read_csv ('./data/labelencoder.txt')
le_data.head ()
color | tag | |
0 | azul | 0 |
1 | rojo | 1 |
2 | negro | 0 |
3 | blanco | 0 |
4 | naranja | 1 |
from sklearn import preprocessing
le = preprocessing.LabelEncoder ()
le.fit (data ['color'])
print (list (le.classes_))
[‘azul’, ‘blanco’, ‘naranja’, ‘negro’, ‘rojo’]
Lo que hemos hecho ha sido un LabelEncoder, le hacemos un .fit con respecto a ‘color’ y lo que nos da como resultado son las clases que hay en esta columna.
Si le quitáramos ‘negro’ a la lista y elimináramos ‘rojo’, el resultado sería: [‘azul’, ‘blanco’, ‘naranja’, ‘rojo’], porque solo nos pondría las clases únicas que hay en la lista.
Y si al código anterior le añadimos las líneas que te mostramos a continuación, lo que hace es crearnos un número por cada etiqueta.
le_data ['label_color'] = le.transform (le_data ['color'])
le_data.head (15)
color | tag | label_color | |
0 | azul | 0 | 0 |
1 | rojo | 1 | 3 |
2 | rojo | 1 | 3 |
3 | rojo | 1 | 3 |
4 | rojo | 1 | 3 |
5 | blanco | 0 | 1 |
6 | naranja | 1 | 2 |
¿Qué sigue?
Ahora que hemos visto cómo funcionan np-where y LabelEncoder, podemos dar el siguiente paso y seguir aprendiendo por medio del Big Data, Inteligencia Artificial & Machine Learning Full Stack Bootcamp, una formación intensiva en la que podrás adquirir toda la fundamentación teórica y práctica para seguir tu camino como data scientist. ¡No esperes más y solicita información ahora para transformar tu futuro!