Blog

Como Tratar Dados Ausentes com Pandas

Carlos Melo
Escrito por Carlos Melo em 13/08/2019
Como Tratar Dados Ausentes com Pandas
Junte-se a mais de 3.500 pessoas

Entre para nossa lista e receba conteúdos exclusivos e com prioridade

Dados ausentes são uma das maiores dificuldades da etapa exploratória dos dados em um projeto de Data Science.

Durante a fase em que estamos aprendendo, lendo livros e seguindo tutoriais, não temos tanto esse tipo de trabalho, pois os dados já vêm mais “redondinhos”.

Tratando valores ausentes (missing data) com Pandas do Python.
Saber o que fazer com dados ausentes (missing data) vai impactar diretamente na qualidade e desempenho do seu modelo de Machine Learning

Entretanto, essa não é a realidade do mundo real, onde a gente vai se deparar com uma infinidade de problemas e missing data.

Excluir, completar ou ignorar?! Qual a melhor abordagem? Hoje nós vamos falar sobre as principais técnicas para lidar com dados ausentes e entender o trade-off entre elas.

Para ver o código completo, acompanhar este artigo ou testar no seu computador, acesse meu Github no botão abaixo.

Ah, seguindo uma promessa antiga que eu vivia fazendo no Instagram, resolvi começar um canal no YouTube!

Agora você pode acompanhar este artigo em formato de vídeo também. Aproveita e já se inscreve por lá 🙂

Identificando dados ausentes

Algoritmos de Machine Learning não são capazes de lidar com valores ausentes (missing data). Se você já tentou rodar, viu que a mensagem de erro é bem clara em relação a isso.

Identificar valores ausentes em Data Science com Pandas do Python.
Identificar valores ausentes é algo que você deve fazer logo no começo do seu projeto de Data Science.

Um valor ausente é facilmente identificado nos campos da sua estrutura de dados como NaN. Para seu modelo rodar sem problemas, você tem que limpar os dados (data cleaning) em uma etapa anterior. É aí que surge a dúvida: o que eu faço com eles?

Não existe uma resposta 100% correta, pois cada abordagem tem suas vantagens e desvantagens, mas vamos dar uma olhada naquelas que são mais usadas.

Para isso, vamos importar um conjunto de dados do Kaggle para usar de exemplo.

Importando os dados

Vou usar o conjunto de dados House Prices: Advanced Regression Techniques neste exemplo, pois ele apresenta várias colunas com valores inexistentes.

Nesse dataset, temos 80 variáveis (colunas) e 1460 entradas (linhas) no arquivo train.csv. Eu vou baixar apenas esse arquivo e vou usar a (Kaggle API)(https://www.kaggle.com/docs/api), uma vez que ela me permite baixar o arquivo diretamente do Terminal.

Baixaremos este dataset por meio da API do Kaggle.

Se você não conhece a API, (olhe a documentação no Github)[https://github.com/Kaggle/kaggle-api]. Aprender a usar essa API vai te ajudar muito, não apenas pela facilidade, mas porque deixa seu notebook replicável para quem clonar ele.

Identificando dados ausentes

A primeira coisa que você tem que saber quando lida com um conjunto de dados novos, é a quantidade e proporção dos missing values.

Identificando valores ausentes (missing values) com Pandas do Python.
Saiba identificar corretamente os valores ausentes em um conjunto de dados, com a biblioteca Pandas.

Para identificar valores ausentes, por colunas, você pode usar:

  • df.describe() para retornar um resumo estatístico das variáveis numéricas
  • df.info() para dar um resumo de valores não-nulos encontrados
  • df.isnull().sum() para retornar a soma dos valores nulos encontrados

Usando essa última opção, vamos ver as 10 colunas com mais valores ausentes para esse dataset.

Lidando com dados ausentes

Como eu falei lá em cima, não existe uma resposta 100% correta ou 100% errada sobre como você deve tratar os valores ausentes do seu conjunto de dados.

Toda escolha tem uma renúncia. Você tem que estar ciente disso e testar o que vai se adequar melhor àquela situação.

Vou passar aqui alguns dos métodos mais frequentementes usados por cientistas de dados, e como você poderia aplicar esses métodos nos dados que acabamos de importar.

Excluir valores ausentes

Esta é uma decisão mais radical, e deve ser feita apenas em casos onde não haverá impacto significativo no modelo. Ao eliminar uma linha inteira, você joga fora um monte de informação que poderia ser extremamente importante.

Eu uso essa opção apenas quando meu dataset é consideravelmente grande e a quantidade de valores ausentes é relativamente insignificante.

Excluir valores ausentes com Pandas do Python.
Ao excluir valores ausentes, você elimina também linhas ou colunas, jogando fora informações que poderiam ser importantes.

Para fazer isso, você vai usar o método df.dropna(). Esse método é direto, e remove os valores NaN encontrados no DataFrame.

Por padrão, se você não informar o eixo, serão eliminadas todas as linhas relativas à celula contendo o valor ausente (df.dropna(axis=0)). 

Caso você deseje eliminar uma coluna inteira onde existam NaN, você deve informar explicitamente com df.dropna(axis=1)

No exemplo abaixo, todos os valores NaN da coluna GarageFinish serão eliminados. Compare o shape antes e depois.

Preencher valores ausentes

Esta abordagem é a mais utilizada, pois você não joga fora informação útil. Aqui, a dúvida que você vai ter é em relação a qual valor usar para preencher os dados faltantes.

Valores ausentes, preenchendo com Pandas e Python.
Normalmente, preencher valores ausentes é a melhor decisão.

Existem técnicas avançadas que são combinadas com o preenchimento de valores, como por exemplo analisar correlações ou mesmo construir um modelo preditivo para missing values.

Entretanto, uma abordagem direta e simples consiste em substituir os NaN pela mediana da coluna. Isso é feito mediante o método df.fillna(), informando o valor desejado como argumento.

Vamos extrair a mediana da coluna LotFrontage e preencher os valores faltantes com ela.

Usar valor mais frequente

Para preencher missing values no último exemplo, usamos a mediana da coluna. Entretanto, caso a variável fosse categórica (e não numérica), poderíamos verificar qual o valor mais frequente e usar ele no preenchimento.

Para identificar o valor mais frequente, basta usar o método value_counts(), extrair o maior valor e informar ele como argumento de fillna().

Como você pode aplicar esses métodos e melhorar suas análises de Data Science?

Eu vivo falando no meu Instagram sobre a importância da fase de análise de dados em um projeto de Data Science.

Aquilo que diferencia um cientista de dados é a sua capacidade de entender, explorar e tratar os dados da melhor maneira possível.

Em datasets reais, não tenha dúvida que você vai se deparar com muita inconsistência, lançamentos errados, bases diferentes e muitos valores ausentes.

Saber o que fazer com esses valores vai aumentar muito o desempenho do seu algoritmo de Machine Learning e nos seus resultados.

Aproveite para começar a aplicar os métodos que você viu aqui nos seus projetos. Que tal testar esses métodos com os dados do Desafio do Titanic?

Hey,

o que você achou deste conteúdo? Conte nos comentários.

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Entre para nossa lista e receba conteúdos exclusivos e com prioridade

Junte-se a mais de 3.500 pessoas

FAQ e Curso
Curso Data Science