Gestire i dati mancanti

Analisi esplorativa dei dati in Python

George Boorman

Curriculum Manager, DataCamp

Perché i dati mancanti sono un problema?

  • Alterano le distribuzioni
    • Mancano le altezze degli studenti più alti
  • Meno rappresentativi della popolazione
    • Alcuni gruppi sovra/sottorappresentati, es. mancano i più anziani
  • Possono portare a conclusioni errate

Distribuzione altezze: campione vs popolazione; il campione ha massimo e media più bassi

Analisi esplorativa dei dati in Python

Dati sui lavori dei data professional

Colonna Descrizione Tipo
Working_Year Anno di rilevazione Float
Designation Titolo di lavoro String
Experience Livello di esperienza, es. "Mid", "Senior" String
Employment_Status Tipo di contratto, es. "FT", "PT" String
Employee_Location Paese di lavoro String
Company_Size Dimensione azienda, es. "S", "M", "L" String
Remote_Working_Ratio Percentuale di lavoro da remoto Integer
Salary_USD Stipendio in dollari USA Float
Analisi esplorativa dei dati in Python

Stipendio per livello di esperienza

Box plot degli stipendi per livello di esperienza con dataset pulito; limite superiore ~600000 dollari

Box plot degli stipendi per livello di esperienza con dati mancanti; limite superiore ~450000 dollari

Analisi esplorativa dei dati in Python

Verificare i valori mancanti

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
Analisi esplorativa dei dati in Python

Strategie per gestire i dati mancanti

  • Elimina i valori mancanti
    • 5% o meno del totale
  • Imputa media, mediana, moda
    • Dipende da distribuzione e contesto
  • Imputa per sotto-gruppo
    • Livelli di esperienza diversi → mediana stipendio diversa
Analisi esplorativa dei dati in Python

Eliminare i valori mancanti

threshold = len(salaries) * 0.05
print(threshold)
30
Analisi esplorativa dei dati in Python

Eliminare i valori mancanti

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)
Analisi esplorativa dei dati in Python

Imputare una statistica riassuntiva

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])
Analisi esplorativa dei dati in Python

Verificare i mancanti rimanenti

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
Analisi esplorativa dei dati in Python

Imputare per sotto-gruppo

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}
Analisi esplorativa dei dati in Python

Imputare per sotto-gruppo

salaries["Salary_USD"] = salaries["Salary_USD"].fillna(salaries["Experience"].map(salaries_dict))
Analisi esplorativa dei dati in Python

Nessun valore mancante!

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
Analisi esplorativa dei dati in Python

Ari, esercitati!

Analisi esplorativa dei dati in Python

Preparing Video For Download...