Gestionarea valorilor lipsă

Analiza exploratorie a datelor în Python

George Boorman

Curriculum Manager, DataCamp

De ce sunt valorile lipsă o problemă?

  • Afectează distribuțiile
    • Lipsesc înălțimile studenților mai înalți
  • Mai puțin reprezentativ pentru populație
    • Anumite grupuri sunt suprareprezentate, ex. lipsa datelor despre cei mai în vârstă studenți
  • Poate duce la concluzii incorecte

Distribuția înălțimii pentru eșantion față de populație, arătând că eșantionul are un maxim și o medie mai mică

Analiza exploratorie a datelor în Python

Date despre locurile de muncă ale profesioniștilor în date

Coloană Descriere Tip de date
Working_Year Anul în care au fost obținute datele Float
Designation Titlul postului String
Experience Nivel de experiență, ex. "Mid", "Senior" String
Employment_Status Tip de contract, ex. "FT", "PT" String
Employee_Location Țara angajatorului String
Company_Size Etichete pentru dimensiunea companiei, ex. "S", "M", "L" String
Remote_Working_Ratio Procentul timpului lucrat de la distanță Integer
Salary_USD Salariul în dolari SUA Float
Analiza exploratorie a datelor în Python

Salariu pe nivel de experiență

Grafic box plot al salariilor pe nivel de experiență folosind setul de date curat, cu o limită superioară de aproximativ 600.000 de dolari

Grafic box plot al salariilor pe nivel de experiență folosind un set de date cu valori lipsă, cu o limită superioară de aproximativ 450.000 de dolari

Analiza exploratorie a datelor în Python

Verificarea valorilor lipsă

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
Analiza exploratorie a datelor în Python

Strategii pentru gestionarea valorilor lipsă

  • Eliminarea valorilor lipsă
    • 5% sau mai puțin din totalul valorilor
  • Imputarea mediei, medianei, modului
    • Depinde de distribuție și context
  • Imputarea pe subgrupe
    • Niveluri de experiență diferite au salarii mediane diferite
Analiza exploratorie a datelor în Python

Eliminarea valorilor lipsă

threshold = len(salaries) * 0.05
print(threshold)
30
Analiza exploratorie a datelor în Python

Eliminarea valorilor lipsă

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)
Analiza exploratorie a datelor în Python

Imputarea unei statistici rezumative

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])
Analiza exploratorie a datelor în Python

Verificarea valorilor lipsă rămase

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
Analiza exploratorie a datelor în Python

Imputarea pe subgrupe

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}
Analiza exploratorie a datelor în Python

Imputarea pe subgrupe

salaries["Salary_USD"] = salaries["Salary_USD"].fillna(salaries["Experience"].map(salaries_dict))
Analiza exploratorie a datelor în Python

Nu mai există valori lipsă!

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
Analiza exploratorie a datelor în Python

Să exersăm!

Analiza exploratorie a datelor în Python

Preparing Video For Download...