Como tratar dados nulos no dataset?
Um post sobre data wrangling, o que fazer com os dados nulos?
Conheça nosso canal no YouTube, com cursos gratuitos de qualidade e vídeos semanais, para acessar o canal clique aqui!
Limpeza de dados
Uma parte muito importante do data wrangling, etapa que limpamos e corrigimos dados no processo de análise, é a limpeza dos dados que não queremos ou estão incompletos.
Neste episódio vou mostrar desde a identificação de dados incorretos até onde decidimos o que fazer com os mesmos.
Vamos utilizar basicamente o pandas como Jupyter Notebook
Lembrando que fiz um post exclusivamente para identificar dados nulos, veja aqui
Outra observação importante é que estamos utilizando a linguagem Python na lib pandas, mas esta etapa pode ser feita em outras partes do processo, por exemplo em SQL quando obtemos os dados de uma base
Ei você leitor! Criei um novo blog para os meus conteúdos, pois o Medium mesmo sendo uma excelente plataforma, me limitava em alguns recursos, que acredito que podem atrapalhar seu aprendizado/leitura…
Você pode acessar cliquando aqui!
Obrigado pela atenção, e boa leitura! :)
E também, o repositório deste post é este aqui!
Datasets
Vamos utilizar dois conjuntos de dados, para duas aplicações distintas de limpeza
O primeiro tem dados de chamadas de emergência, veja aqui
O segundo é o famosão do Titanic
Iniciando
Vamos importar as libs que usaremos, depois o dataset e testar se está funcionando
Identificando linhas nulas
Como já abordada no artigo anterior, onde explico mais a fundo como funciona, vamos utilizar o metodo isnull junto de sum para identificar os dados faltantes
O que sabemos até agora:
Bom até aqui vemos que mais de 39 mil colunas de zip code estão nulas, e também que 115 de twp, que é referente as cidades, também estão vazias
Vamos criar um caso que a coluna de cidades é essencial para nossa análise, logo linhas que tem este dado faltante devem ser excluídas, então vamos limpar as linhas sem cidade
Explicando o método
Utilizamos o método dropna para fazer as alterações, agora vamos entender como funciona
df.dropna(axis=0, how=’any’, thresh=None, subset=None, inplace=False)
- axis: Se for 0 serão ‘dropadas’ as linhas que contem os dados faltantes, caso 1 remove a coluna inteira que tem dados faltantes;
- how: Determina se a coluna vai ser removida do DataFrame, se passarmos ‘any’ como valor do parâmetro se tiver apenas um valor faltante que seja a coluna é removida, se passarmos ‘all’ precisamos que todos os valores sejam faltantes/nulos para que a coluna seja removida;
- thresh: com um inteiro, podemos definir o mínimo de colunas de NaN aceitáveis para começar a dropar, ex: caso tenha thresh = 50, precisamos que a coluna tenha mais 50 de valorers faltantes para o método ser aplicado;
- subset: se estamos removendo linhas, podemos inserir um array de colunas onde o metodo será aplicado;
- inplace: caso seja True aplica as alterações no dataset de forma automática;
O que aconteceu?
Bom, executamos o método dropna no dataset, com o parâmetro subset para escolher a coluna, assim não mexemos nos dados de zip code
Vamos observar as mudanças
Eliminando todos os dados NaN do dataset:
Se na verdade todos os dados NaN podem atrapalhar nossa análise, simplesmente podemos chamar o metodo no dataset
Alem disso podemos utilizar o parâmetro inplace = True para não termos que igualar a variável, assim as mudanças já serão salvas automaticamente, veja:
Conclusão:
Vimos que podemos tanto eliminar linhas com dados faltantes por coluna ou o dataset inteiro
Há também outros parâmetros que podem nos ajudar, como o inplace
Outro caso
Vamos reiniciar nossa variável df com outro dataset, para aplicarmos agora uma técnica de substituição/edição e não remoção como vimos anteriormente
Iniciando pela idade
Como podemos ver há 177 linhas com idades nulas
Em nosso caso, não podemos deletar nenhuma linha, pois as informações são todas fundamentais
O que poderíamos fazer neste caso?
Bom, optaremos por calcular a média da coluna idade e substituir os dados nulos/NaN por este valor calculado
Ajustando o valor
Como este valor quebrado não nos interessa muito, pois precisamos de um número inteiro, arredondamos o valor com auxílio da biblioteca math e o método floor
E depois disso substituir os valores nulos
Substituição concluída
Como podemos verificar, as linhas de age foram substituídas com sucesso
Com esta verificação abaixo já possível identificar algumas células com a idade média de 29
Próximo caso
Este é semelhante ao primeiro, vamos supor que precisamos de algum dado na coluna cabine diferente de NaN
Pois na hora de apresentar os dados é importante para nosso público alvo que eles saibam a inexistência do cadastro das cabines
Então vamos substituir elas com um valor fixo, por exemplo ‘Não cadastrada’
Conclusão
Creio que nesses 4 casos que abordei, já podemos ter uma ideia do que fazer para tratar os dados nulos
São algumas das ações que podemos tomar:
- Dropar a coluna que contenha dados nulos;
- Dropar apenas as linhas com dados nulos;
- Substituir pela média da coluna;
- Substituir por um valor fixo;
Destrinchamos o método dropna, abordando todos os seus parâmetros e também vimos a importância geral do inplace, que pode alterar o dataset no ato da execução do método
Lembrando que essa parte do processo de data wrangling é decisiva, é o que vai tornar nossa análise boa ou ruim, pois estes dados mal cadastrados podem comprometer todo o processo
Obrigado a todos que leram, e qualquer feedback será bem-vindo :)
Até a próxima!