Como lidar com dados ausentes

Análise Exploratória de Dados em Python

George Boorman

Curriculum Manager, DataCamp

Por que dados ausentes são um problema?

  • Afeta as distribuições
    • Alturas dos alunos mais altos ausentes
  • Menos representativo da população
    • Certos grupos representados de forma desproporcional. Ex.: sem dados de alunos mais velhos
  • Pode levar a conclusões erradas

Distribuição da altura da amostra versus população, mostrando que a amostra tem um máximo e uma média mais baixos

Análise Exploratória de Dados em Python

Dados de trabalho de profissionais de dados

Coluna Descrição Tipo de dados
Working_Year Ano em que os dados foram obtidos Float
Designation Cargo String
Experience Nível de experiência, ex.: "Mid", "Senior" String
Employment_Status Tipo de contrato de trabalho, ex.: "FT", "PT" String
Employee_Location País de trabalho String
Company_Size Rótulos para tamanho da empresa, ex: "S", "M", "L" String
Remote_Working_Ratio Porcentagem de tempo trabalhando remotamente Inteiro
Salary_USD Salário em dólares americanos Float
Análise Exploratória de Dados em Python

Salário por nível de experiência

Gráfico de caixa dos salários por nível de experiência usando o conjunto de dados limpo, com um limite superior próximo a 600.000 dólares.

Gráfico de caixa dos salários por nível de experiência usando um conjunto de dados com valores ausentes, mostrando um limite superior próximo a 450.000 dólares.

Análise Exploratória de Dados em Python

Verificar valores ausentes

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
Análise Exploratória de Dados em Python

Estratégias para lidar com dados ausentes

  • Excluir valores ausentes
    • 5% ou menos do total
  • Imputar média, mediana, moda
    • Depende da distribuição e do contexto
  • Imputar por subgrupo
    • Níveis diferentes de experiência têm salários médios diferentes
Análise Exploratória de Dados em Python

Excluir valores ausentes

threshold = len(salaries) * 0.05
print(threshold)
30
Análise Exploratória de Dados em Python

Excluir valores ausentes

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)
Análise Exploratória de Dados em Python

Imputar uma estatística resumida

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])
Análise Exploratória de Dados em Python

Verificar os valores ausentes restantes

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
Análise Exploratória de Dados em Python

Imputar por subgrupo

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}
Análise Exploratória de Dados em Python

Imputar por subgrupo

salaries["Salary_USD"] = salaries["Salary_USD"].fillna(salaries["Experience"].map(salaries_dict))
Análise Exploratória de Dados em Python

Chega de valores ausentes!

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
Análise Exploratória de Dados em Python

Vamos praticar!

Análise Exploratória de Dados em Python

Preparing Video For Download...