Hantera saknade värden

Exploratory Data Analysis i Python

George Boorman

Curriculum Manager, DataCamp

Varför är saknade värden ett problem?

  • Påverkar fördelningar
    • Saknade längddata för längre elever
  • Mindre representativt för populationen
    • Vissa grupper är oproportionerligt representerade, t.ex. saknas data om de äldsta eleverna
  • Kan leda till felaktiga slutsatser

Längdfördelning för urval och population, där urvalet har ett lägre maximum och medelvärde

Exploratory Data Analysis i Python

Jobbdata för dataproffs

Kolumn Beskrivning Datatyp
Working_Year År då data hämtades Float
Designation Jobbtitel String
Experience Erfarenhetsnivå, t.ex. "Mid", "Senior" String
Employment_Status Typ av anställningsavtal, t.ex. "FT", "PT" String
Employee_Location Anställningsland String
Company_Size Etiketter för företagsstorlek, t.ex. "S", "M", "L" String
Remote_Working_Ratio Andel tid med distansarbete Integer
Salary_USD Lön i US-dollar Float
Exploratory Data Analysis i Python

Lön per erfarenhetsnivå

Lådagram över löner per erfarenhetsnivå med ren datamängd, med ett övre gränsvärde nära 600 000 dollar

Lådagram över löner per erfarenhetsnivå med datamängd med saknade värden, med ett övre gränsvärde nära 450 000 dollar

Exploratory Data Analysis i Python

Kontrollera saknade värden

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
Exploratory Data Analysis i Python

Strategier för att hantera saknade värden

  • Ta bort saknade värden
    • 5 % eller mindre av alla värden
  • Imputera medelvärde, median, typvärde
    • Beror på fördelning och sammanhang
  • Imputera per undergrupp
    • Olika erfarenhetsnivåer har olika medianlön
Exploratory Data Analysis i Python

Ta bort saknade värden

threshold = len(salaries) * 0.05
print(threshold)
30
Exploratory Data Analysis i Python

Ta bort saknade värden

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)
Exploratory Data Analysis i Python

Imputera ett sammanfattningsmått

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])
Exploratory Data Analysis i Python

Kontrollera återstående saknade värden

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
Exploratory Data Analysis i Python

Imputera per undergrupp

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}
Exploratory Data Analysis i Python

Imputera per undergrupp

salaries["Salary_USD"] = salaries["Salary_USD"].fillna(salaries["Experience"].map(salaries_dict))
Exploratory Data Analysis i Python

Inga saknade värden kvar!

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
Exploratory Data Analysis i Python

Nu kör vi en övning!

Exploratory Data Analysis i Python

Preparing Video For Download...