Kategorische Werte imputieren

Umgang mit fehlenden Daten in Python

Suraj Donthi

Deep Learning & Computer Vision Consultant

Komplexität bei kategorialen Werten

  • Die meisten kategorialen Werte sind Strings
  • Mit Strings kannst du keine Operationen ausführen
  • Strings müssen in Zahlen konvertiert/encodiert und dann imputiert werden
Umgang mit fehlenden Daten in Python

Konvertierungstechniken

One-Hot-Encoding
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
Ordinal Encoding
Color Value
Red 0
Green 1
Blue 2
Red 0
Blue 2
Blue 2
Umgang mit fehlenden Daten in Python

Imputationstechniken

  • Mit der häufigsten Kategorie füllen
  • Mit statistischen Modellen wie KNN imputieren
Umgang mit fehlenden Daten in Python

Nutzendenprofile-Daten

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
Umgang mit fehlenden Daten in Python

Ordinal Encoding

from sklearn.preprocessing import OrdinalEncoder

# OrdinalEncoder erstellen ambience_ord_enc = OrdinalEncoder() # Nicht-leere Werte in ambience auswählen ambience = users['ambience'] ambience_not_null = ambience[ambience.notnull()] reshaped_vals = ambience_not_null.values.reshape(-1, 1)
# Die nicht-leeren ambience-Werte encodieren encoded_vals = ambience_ord_enc.fit_transform(reshaped_vals)
# ambience-Spalte durch ordinale Werte ersetzen users.loc[ambience.notnull(), 'ambience'] = np.squeeze(encoded_vals)
Umgang mit fehlenden Daten in Python

Ordinal Encoding

# Dictionary für OrdinalEncoder erstellen
ordinal_enc_dict = {}

# Über Spalten zum Encodieren iterieren
for col_name in users:
    # OrdinalEncoder für die Spalte erzeugen
    ordinal_enc_dict[col_name] = OrdinalEncoder()
    col = users[col_name]

    # Nicht-leere Werte der Spalte auswählen
    col_not_null = col[col.notnull()]
    reshaped_vals = col_not_null.values.reshape(-1, 1)

    # Die nicht-leeren Werte der Spalte encodieren
    encoded_vals = ordinal_enc_dict[col_name].fit_transform(reshaped_vals)

    # Werte der Spalte durch ordinale Werte ersetzen
    users.loc[col.notnull(), col_name] = np.squeeze(encoded_vals)
Umgang mit fehlenden Daten in Python

Imputieren mit KNN

users_KNN_imputed = users.copy(deep=True)

# KNN-Imputer erstellen KNN_imputer = KNN()
users_KNN_imputed.iloc[:, :] = np.round(KNN_imputer.fit_transform(users))
for col_name in users_KNN_imputed: # Werte in 2 Dimensionen umformen, um # Fehler beim Speichern im DataFrame zu vermeiden reshaped = users_KNN_imputed[col_name].values.reshape(-1, 1) users_KNN_imputed[col_name] = \ ordinal_enc_dict[col_name].inverse_transform(reshaped)
Umgang mit fehlenden Daten in Python

Zusammenfassung

Schritte zum Imputieren kategorialer Werte

  • Nicht-fehlende kategoriale Spalten in ordinale Werte umwandeln
  • Fehlwerte im ordinalen DataFrame imputieren
  • Ordinale wieder in kategoriale Werte zurückwandeln
Umgang mit fehlenden Daten in Python

Lass uns üben!

Umgang mit fehlenden Daten in Python

Preparing Video For Download...