Obsługa brakujących danych

Eksploracyjna analiza danych w Pythonie

George Boorman

Curriculum Manager, DataCamp

Dlaczego brakujące dane są problemem?

  • Wpływa na rozkłady
    • Brakujące wzrosty wyższych uczniów
  • Mniej reprezentatywne dla populacji
    • Pewne grupy nadreprezentowane, np. brak danych o najstarszych uczniach
  • Może prowadzić do błędnych wniosków

Rozkład wzrostu dla próby i populacji – próba ma niższe maksimum i średnią

Eksploracyjna analiza danych w Pythonie

Dane o zatrudnieniu specjalistów ds. danych

Kolumna Opis Typ danych
Working_Year Rok pozyskania danych Float
Designation Stanowisko String
Experience Poziom doświadczenia, np. "Mid", "Senior" String
Employment_Status Rodzaj umowy, np. "FT", "PT" String
Employee_Location Kraj zatrudnienia String
Company_Size Rozmiar firmy, np. "S", "M", "L" String
Remote_Working_Ratio Procent czasu pracy zdalnej Integer
Salary_USD Wynagrodzenie w dolarach Float
Eksploracyjna analiza danych w Pythonie

Wynagrodzenie według poziomu doświadczenia

Wykres pudełkowy wynagrodzeń według poziomu doświadczenia – czysty zbiór danych, górny limit ok. 600 000 USD

Wykres pudełkowy wynagrodzeń według poziomu doświadczenia – zbiór z brakującymi danymi, górny limit ok. 450 000 USD

Eksploracyjna analiza danych w Pythonie

Sprawdzanie brakujących wartości

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
Eksploracyjna analiza danych w Pythonie

Strategie obsługi brakujących danych

  • Usuń brakujące wartości
    • 5% lub mniej wszystkich wartości
  • Imputuj średnią, medianę, modę
    • Zależy od rozkładu i kontekstu
  • Imputuj według podgrup
    • Różne poziomy doświadczenia mają różne mediany wynagrodzenia
Eksploracyjna analiza danych w Pythonie

Usuwanie brakujących wartości

threshold = len(salaries) * 0.05
print(threshold)
30
Eksploracyjna analiza danych w Pythonie

Usuwanie brakujących wartości

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)
Eksploracyjna analiza danych w Pythonie

Imputacja statystyką podsumowującą

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])
Eksploracyjna analiza danych w Pythonie

Sprawdzanie pozostałych brakujących wartości

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
Eksploracyjna analiza danych w Pythonie

Imputacja według podgrup

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}
Eksploracyjna analiza danych w Pythonie

Imputacja według podgrup

salaries["Salary_USD"] = salaries["Salary_USD"].fillna(salaries["Experience"].map(salaries_dict))
Eksploracyjna analiza danych w Pythonie

Brak brakujących wartości!

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
Eksploracyjna analiza danych w Pythonie

Czas na ćwiczenia!

Eksploracyjna analiza danych w Pythonie

Preparing Video For Download...