Umgang mit fehlenden Daten

Explorative Datenanalyse in Python

George Boorman

Curriculum Manager, DataCamp

Warum sind fehlende Daten ein Problem?

  • Auswirkung auf die Verteilung
    • Fehlende Körpergrößen von größeren Schülern
  • Weniger repräsentativ für die Grundgesamtheit
    • Bestimmte Gruppen überproportional vertreten, z. B. fehlen Daten zu den ältesten Schülern
  • Möglicherweise falsche Schlussfolgerungen

Vergleich der Größenverteilung der Stichprobe mit der der Grundgesamtheit, der zeigt, dass die Stichprobe einen niedrigeren Maximalwert und Mittelwert hat

Explorative Datenanalyse in Python

Jobdaten zu Datenberufen

Spalte Beschreibung Datentyp
Working_Year Jahr, in dem die Daten erhoben wurden Float
Designation Stellenbezeichnung String
Experience Erfahrung, z. B. "Mid", "Senior" String
Employment_Status Art des Arbeitsvertrags, z. B. "FT", "PT" String
Employee_Location Land der Anstellung String
Company_Size Bezeichnungen für die Unternehmensgröße, z. B. "S", "M", "L" String
Remote_Working_Ratio Prozentsatz der Zeit im Homeoffice Integer
Salary_USD Gehalt in US-Dollar Float
Explorative Datenanalyse in Python

Gehalt nach Erfahrungsniveau

Boxplot, der Gehälter nach Erfahrungsniveau, basierend auf dem bereinigten Datensatz, mit einer Obergrenze bei etwa 600.000 Dollar.

Boxplot der Gehälter nach Erfahrungsniveau anhand eines Datensatzes mit fehlenden Werten, der eine Obergrenze bei etwa 450.000 Dollar zeigt.

Explorative Datenanalyse in Python

Auf fehlende Werte prüfen

print(salaries.isna().sum())
Working_Year            12
Designation             27
Experience              33
Employment_Status       31
Employee_Location       28
Company_Size            40
Remote_Working_Ratio    24
Salary_USD              60
dtype: int64
Explorative Datenanalyse in Python

Strategien für den Umgang mit fehlenden Daten

  • Fehlende Werte weglassen
    • 5 % oder weniger der Werte insgesamt
  • Imputation durch Mittelwert, Median und Modus
    • je nach Verteilung und Zusammenhang
  • Imputation nach Untergruppen
    • Mediane der Gehälter unterschiedlich je nach Erfahrungsstufe
Explorative Datenanalyse in Python

Auslassen fehlender Werte

threshold = len(salaries) * 0.05
print(threshold)
30
Explorative Datenanalyse in Python

Auslassen fehlender Werte

cols_to_drop = salaries.columns[salaries.isna().sum() <= threshold]

print(cols_to_drop)
Index(['Working_Year', 'Designation', 'Employee_Location',
       'Remote_Working_Ratio'],
      dtype='object')
salaries.dropna(subset=cols_to_drop, inplace=True)
Explorative Datenanalyse in Python

Imputation einer zusammenfassenden Statistik

cols_with_missing_values = salaries.columns[salaries.isna().sum() > 0]
print(cols_with_missing_values)
Index(['Experience', 'Employment_Status', 'Company_Size', 'Salary_USD'], 
    dtype='object')
for col in cols_with_missing_values[:-1]:
    salaries[col].fillna(salaries[col].mode()[0])
Explorative Datenanalyse in Python

Überprüfen der restlichen fehlenden Werte

print(salaries.isna().sum())
Working_Year             0
Designation              0
Experience               0
Employment_Status        0
Employee_Location        0
Company_Size             0
Remote_Working_Ratio     0
Salary_USD              41
Explorative Datenanalyse in Python

Imputation nach Untergruppen

salaries_dict = salaries.groupby("Experience")["Salary_USD"].median().to_dict()

print(salaries_dict)
{'Entry': 55380.0, 'Executive': 135439.0, 'Mid': 74173.5, 'Senior': 128903.0}
Explorative Datenanalyse in Python

Imputation nach Untergruppen

salaries["Salary_USD"] = salaries["Salary_USD"].fillna(salaries["Experience"].map(salaries_dict))
Explorative Datenanalyse in Python

Keine fehlenden Werte mehr!

print(salaries.isna().sum())
Working_Year            0
Designation             0
Experience              0
Employment_Status       0
Employee_Location       0
Company_Size            0
Remote_Working_Ratio    0
Salary_USD              0
dtype: int64
Explorative Datenanalyse in Python

Lass uns üben!

Explorative Datenanalyse in Python

Preparing Video For Download...