No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Tratamiento de variables categóricas para imputación: codificación ordinal

6/17
Recursos

Aportes 13

Preguntas 1

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Siento que estas clases han sido full técnicas y cargadas… nada fácil

me hubiera servido la codificación ordinal en el curso de EDA 🐠

from sklearn import preprocessing

nhanes_transformed_df_aazg = nhanes_df.copy(deep=True)

label_encoder = preprocessing.LabelEncoder()

encoder_gender = label_encoder.fit_transform(nhanes_transformed_df_aazg.gender)
nhanes_transformed_df_aazg.gender = encoder_gender

nhanes_transformed_df_aazg.head()

Tratamiento de Variables categoricas para imputacion: Codificacion Ordinal

La mayor parte de las variables categoricas son cadenas de textos y por tanto realizar operaciones con ellas no es trivial. Es asi como surge la necesidad de convertir o codificar las cadenas de texto a numeros de manera que los algoritmos puedan entenderlos o asociarlos

Codificacion Ordinal

Consiste en mapear cada elemento unico de texto a un numero entero. Una vez realizada la codificacion podemos comenzar el proceso de imputacion introduciendo los datos a un algoritmo de imputacion

Aplicando la Codificacion Oordinal a todas las Variables de NHANES

  • Obtener las variables de tipo objeto y category
nhanes_df.select_dtypes(include=[object, 'category'])
  • Obtener solo los nombres de las variables con valores de tipo object y category y guardarlos
categorical_columns = nhanes_df.select_dtypes(include=[object, 'category']).columns

categorical_columns

--> Index(['general_health_condition', 'gender'], dtype='object')
  • Utiliza una funcion de sklearn para componer instrucciones de transformacion para los datos y guarda las transformaciones.
categorical_transformer = sklearn.compose.make_column_transformer(
    #   transformador                         variables a transformar
    (sklearn.preprocessing.OrdinalEncoder(), categorical_columns),
    remainder='passthrough' # permite omitir las demas variables para que no las transforme
)

categorical_transformer
  • Crea un nuevo dataframe con los datos transformados.
(
    pd.DataFrame(
        categorical_transformer.fit_transform(nhanes_df)
    )
)
  • Agrega los nombres de las variables nuevamente
nhanes_transformed_df = (
    pd.DataFrame(
        categorical_transformer.fit_transform(nhanes_df),
        columns=categorical_transformer.get_feature_names_out(),
        index=nhanes_df.index   # vuelve a los indices del dataframe original
    )
    .rename_columns(
        function = lambda x: x.removeprefix('ordinalencoder__')
    )
    .rename_columns(
        function = lambda x: x.removeprefix('remainder__')
    )
)

nhanes_transformed_df

6. Tratamiento de variables categóricas para imputación: codificación ordinal

  • La mayor parte de las variables categóricas son cadenas de texto.
  • Realizar operaciones con cadenas de texto NO es trivial.
  • Surge la necesidad de convertir o codificar las cadenas de texto a números.

Codificación ordinal

  • Asignarle un valor numérico a cada categoría
  • Siempre antes de encodear hacerle una copia al df
nhanes_transformed_df = (
    pd.DataFrame(
        categorical_tranformer.fit_transform(nhanes_df),
        columns=categorical_tranformer.get_feature_names_out(),
        index = nhanes_df.index
    )
    .rename_columns(
        function = lambda x: x.removeprefix('ordinalencoder__')
    )
        .rename_columns(
        function = lambda x: x.removeprefix('remainder__'))
) # Apply categorical transformer to the data
nhanes_transformed_df.head()

Con el siguiente código pueden obtener las clases de sus variables categóricas del DataFrame que se generó en el minuto 13:30

# Obtener el transformer
print('Transformers: ', categorical_transformer.transformers_, end='\n\n\n')

# Del transformer obtener las categorías y significados de los numeros generados
print('Categorias o clases: ', categorical_transformer.transformers_[0][1].categories_)

Ejemplo de Codificacion Ordinal mediante una Lista

  • Dado un conjunto de datos con dos caracteristicas, encontraremos los valores unicos por caracteristica y los transformaremos utilizando una codificacion ordinal
X = [['Male'], ['Female'], ['Female']]
X

--> [['Male'], ['Female'], ['Female']]
  • Creamos un encoder para agrupar la informacion y codificarla
encoder = sklearn.preprocessing.OrdinalEncoder()
  • Codificamos la lista anterior
encoder.fit_transform(X)

--> array([[1.],
	       [0.],
	       [0.]])
  • El hombre quedo con la codificacion 1 y la mujer con 0. Para cuando hay muchas categorias utilizamos el metodos categories_
encoder.categories_

--> [array(['Female', 'Male'], dtype=object)]
  • Calcular la inversa de la transformacion de manera que si hay un 1 aparezca un hombre y si hay un 0 aparezca una mujer
encoder.inverse_transform([[1],[1],[0]])

--> array([['Male'],
 	    	['Male'],
	        ['Female']], dtype=object)
Le cambió la voz?

Y otra cosa, segun la documentacion de skearn, ya el comando

encoder = sklearn.preprocessing.OrdinalEncoder()

no funciona para eso lo que se debe realizar es

from sklearn import preprocessing

encoder = preprocessing.OrdinalEncoder()

Eso es lo que dice la documentacion, y a mi me funciono asi, ya si a alguien le funciona de la primera forma no hay problema.

Pueden buscar Skearn 6.3. Preprocesamiento de datos

Algo curioso que me paso al momento de importar la libreria sklearn , es que me salia que no me aparecia, no se ejecutaba nada, cuando entre a la documentacion de sklearn , me entere que primero tenian que:

use

pip3 install scikit-learn 

en lugar de

pip3 install sklearn

reemplace sklearn por scikit-learn en sus archivos de requisitos de pip (requirements.txt, setup.cfg, Pipfile, etc…)
si una de sus dependencias usa el paquete sklearn, sería genial si se toma un tiempo para rastrear qué paquete usa sklearn en lugar de scikit-learn e informarlo a su rastreador de problemas.

Ya despues uno puede importar sklern de forma normal y con el mismo nombre

import sklearn

Lo comento pr si alguien esta siguiendo el ejercicio en otra aplicacion diferente a DeepNote.

Es importante acotar que para el mejor aprovechamiento del curso, hay que tener las bases de sklearn, lo cual no está en los requisitos del curso.

Estaba haciendo un algoritmo justamente para hacer esto, estaba seguro que ya existía, que bien Platzi y que bien Sklearn!!