Imputazione di valori categorici

Gestire i dati mancanti in Python

Suraj Donthi

Deep Learning & Computer Vision Consultant

Complessità con i valori categorici

  • Molti valori categorici sono stringhe
  • Non si possono eseguire operazioni sulle stringhe
  • Serve convertire/codificare le stringhe in numeri e imputare
Gestire i dati mancanti in Python

Tecniche di conversione

One-hot encoder
Colore 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
Ordinal encoder
Colore Valore
Red 0
Green 1
Blue 2
Red 0
Blue 2
Blue 2
Gestire i dati mancanti in Python

Tecniche di imputazione

  • Riempi con la categoria più frequente
  • Imputa con modelli statistici come KNN
Gestire i dati mancanti in Python

Dati profilo utenti

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
Gestire i dati mancanti in Python

Ordinal encoding

from sklearn.preprocessing import OrdinalEncoder

# Crea l'Ordinal Encoder ambience_ord_enc = OrdinalEncoder() # Seleziona i valori non null di ambience ambience = users['ambience'] ambience_not_null = ambience[ambience.notnull()] reshaped_vals = ambience_not_null.values.reshape(-1, 1)
# Codifica i valori non null di ambience encoded_vals = ambience_ord_enc.fit_transform(reshaped_vals)
# Sostituisci la colonna ambience con valori ordinali users.loc[ambience.notnull(), 'ambience'] = np.squeeze(encoded_vals)
Gestire i dati mancanti in Python

Ordinal encoding

# Crea un dizionario per gli ordinal encoder
ordinal_enc_dict = {}

# Cicla sulle colonne da codificare
for col_name in users:
    # Crea l'ordinal encoder per la colonna
    ordinal_enc_dict[col_name] = OrdinalEncoder()
    col = users[col_name]

    # Seleziona i valori non null nella colonna
    col_not_null = col[col.notnull()]
    reshaped_vals = col_not_null.values.reshape(-1, 1)

    # Codifica i valori non null della colonna
    encoded_vals = ordinal_enc_dict[col_name].fit_transform(reshaped_vals)

    # Sostituisci i valori della colonna con valori ordinali
    users.loc[col.notnull(), col_name] = np.squeeze(encoded_vals)
Gestire i dati mancanti in Python

Imputazione con KNN

users_KNN_imputed = users.copy(deep=True)

# Crea l'imputer KNN KNN_imputer = KNN()
users_KNN_imputed.iloc[:, :] = np.round(KNN_imputer.fit_transform(users))
for col_name in users_KNN_imputed: # Rimodella a 2 dimensioni per evitare errori # durante il salvataggio nel DataFrame reshaped = users_KNN_imputed[col_name].values.reshape(-1, 1) users_KNN_imputed[col_name] = \ ordinal_enc_dict[col_name].inverse_transform(reshaped)
Gestire i dati mancanti in Python

Riepilogo

Passi per imputare valori categorici

  • Converti le colonne categoriche non mancanti in valori ordinali
  • Imputa i mancanti nel DataFrame ordinale
  • Riconverti dagli ordinali ai valori categorici
Gestire i dati mancanti in Python

Passiamo alla pratica!

Gestire i dati mancanti in Python

Preparing Video For Download...