Imputación de valores categóricos

Cómo tratar datos faltantes en Python

Suraj Donthi

Deep Learning & Computer Vision Consultant

Complejidad con valores categóricos

  • La mayoría de valores categóricos son cadenas
  • No se pueden hacer operaciones con cadenas
  • Hay que convertir/codificar a valores numéricos e imputar
Cómo tratar datos faltantes en Python

Técnicas de conversión

Codificador one-hot
Color Color_Red Color_Green Color_Blue
Red 1 0 0
Green 0 1 0
Blue 0 0 1
Red 1 0 0
Blue 0 0 1
Blue 0 0 1
Codificador ordinal
Color Valor
Red 0
Green 1
Blue 2
Red 0
Blue 2
Blue 2
Cómo tratar datos faltantes en Python

Técnicas de imputación

  • Rellenar con la categoría más frecuente
  • Imputar con modelos estadísticos como KNN
Cómo tratar datos faltantes en Python

Datos de perfil de usuarios

users = pd.read_csv('userprofile.csv')
users.head()
    smoker    drink_level    dress_preference ambience    hijos        activity     budget
0    False    abstemious        informal      family    independent    student      medium
1    False    abstemious        informal      family    independent    student      low
2    False    social drinker    formal        family    independent    student      low
3    False    abstemious        informal      family    independent    professional medium
4    False    abstemious     no preference    family    independent    student      medium
Cómo tratar datos faltantes en Python

Codificación ordinal

from sklearn.preprocessing import OrdinalEncoder

# Crear codificador ordinal ambience_ord_enc = OrdinalEncoder() # Seleccionar valores no nulos en ambience ambience = users['ambience'] ambience_not_null = ambience[ambience.notnull()] reshaped_vals = ambience_not_null.values.reshape(-1, 1)
# Codificar los valores no nulos de ambience encoded_vals = ambience_ord_enc.fit_transform(reshaped_vals)
# Sustituir la columna ambience por valores ordinales users.loc[ambience.notnull(), 'ambience'] = np.squeeze(encoded_vals)
Cómo tratar datos faltantes en Python

Codificación ordinal

# Crear diccionario para codificadores ordinales
ordinal_enc_dict = {}

# Iterar por columnas a codificar
for col_name in users:
    # Crear codificador ordinal para la columna
    ordinal_enc_dict[col_name] = OrdinalEncoder()
    col = users[col_name]

    # Seleccionar los valores no nulos de la columna
    col_not_null = col[col.notnull()]
    reshaped_vals = col_not_null.values.reshape(-1, 1)

    # Codificar los valores no nulos de la columna
    encoded_vals = ordinal_enc_dict[col_name].fit_transform(reshaped_vals)

    # Sustituir los valores de la columna por valores ordinales
    users.loc[col.notnull(), col_name] = np.squeeze(encoded_vals)
Cómo tratar datos faltantes en Python

Imputación con KNN

users_KNN_imputed = users.copy(deep=True)

# Crear imputador KNN KNN_imputer = KNN()
users_KNN_imputed.iloc[:, :] = np.round(KNN_imputer.fit_transform(users))
for col_name in users_KNN_imputed: # Remodelar a 2 dimensiones para # evitar errores al guardar en el DataFrame reshaped = users_KNN_imputed[col_name].values.reshape(-1, 1) users_KNN_imputed[col_name] = \ ordinal_enc_dict[col_name].inverse_transform(reshaped)
Cómo tratar datos faltantes en Python

Resumen

Pasos para imputar valores categóricos

  • Convertir columnas categóricas no ausentes a valores ordinales
  • Imputar los valores ausentes en el DataFrame ordinal
  • Volver de ordinales a categóricos
Cómo tratar datos faltantes en Python

¡Vamos a practicar!

Cómo tratar datos faltantes en Python

Preparing Video For Download...