Limpeza de dados: Conceitos, Problemas e Tratamento
O que é Limpeza de dados?
A limpeza de dados, também conhecida como pré-processamento de dados, é uma etapa fundamental na ciência de dados. Envolve a identificação, correção e remoção de erros, inconsistências e ruídos nos dados coletados, a fim de obter um conjunto de dados limpo e confiável para análise.
Porque é necessária a Limpeza dos dados?
A limpeza de dados é necessária porque os conjuntos de dados geralmente contêm informações incompletas, imprecisas, duplicadas ou inconsistentes, o que pode levar a resultados imprecisos e conclusões errôneas se não for tratado corretamente. Além disso, os dados podem conter valores discrepantes (outliers) que são muito diferentes dos demais e podem distorcer as análises.
Como surgem os problemas nos dados?
1 - Banco de dados sem controle de entrada.
2 - Sistemas Legados.
3 - Falta de padronização na operação dos dados.
4 - Alterações e Erros no processo.
Quais os problemas mais comuns quando se faz a limpeza?
Tratamento com python:
No exemplo abaixo temos todos os problemas descritos, usaremos o dataset a seguir como teste para o nosso tratamento.
Importando as bibliotecas, nosso dataset e lendo seus cinco primeiros valores:
#Importar bibliotecas import pandas as pd import seaborn as srn import statistics as sts #Importar dados dataset = pd.read_csv("../Data/Clientes.csv", sep=",") #Visualizar dados dataset.head()
Saída:
1) Primeiro problema a resolver será renomear a coluna "?" pela identificação correta.
#Primeiro problema: Renomear a coluna = ? dataset.rename(columns={"?":"Score"}, inplace=True) dataset.head()
Saída:
2) Remover os Dados Nulos.
2.1) Verificar se existem e a quantidade presente:
#Verificar dados nulos e somar. dataset.isnull().sum()
Saída:
2.2) Calcular a mediana e substituir os valores nulos pelo seu valor.
#Encontrando a mediana. mediana = sts.median(dataset['Idade']) #Substituindo os valores nulos pela mediana. dataset['Idade'].fillna(mediana, inplace=True) #Verificar se ainda há dados nulos. dataset.isnull().sum()
Saída:
3) Remover valores numéricos que estão fora do nosso domínio.
3.1) Verificar se há idades fora do domínio(18 a 100):
#Visualizar os valores fora do domínio na idade. #Dominio: 18 a 100 anos. dataset.loc[(dataset['Idade'] < 18 ) | ( dataset['Idade'] > 100) ]
Saída:
3.2) Alterar as idades que estão fora do domínio pela mediana.
#Substituir os valores pela mediana. dataset.loc[(dataset['Idade'] < 0 ) | ( dataset['Idade'] > 100), 'Idade'] = mediana #Verificar se ainda há idades fora do domínio. dataset.loc[(dataset['Idade'] < 18 ) | ( dataset['Idade'] > 100) ]
Saída:
É esperada uma tabela vazia!
4) Outliers.
4.1) Analisando os dados em busca de outliers.
#Gráfico de dispersão considerando o Score. score = dataset['Score'] srn.scatterplot(data=score)
Saída:
4.2) Substituir os outliers pela mediana.
#Nesse caso vamos considerar os outliers como valores > 800. dataset.loc[dataset['Score'] > 800 ] #Calcular a mediana. mediana = sts.median(dataset['Score']) #Substituir os outliers pela mediana. dataset.loc[dataset['Score'] > 800, 'Score'] = mediana #Verificar se ainda há outliers. srn.scatterplot(data=score)
Saída:
5) Falta de padrão nos valores categóricos.
5.1) Verificando a coluna 'Sexo' a procura de valores que diferem do padrão(F e M):
#Explorando a coluna Sexo. valores = dataset.groupby(['Sexo']).size() valores
Saída:
5.2) Padronizar o valores categóricos, substituindo 'MAS', 'FEM' e 'Feminino' por 'M' e 'F':
#Padronizando os valores de Sexo. dataset.loc[dataset['Sexo'] == 'MAS', 'Sexo'] = "M" dataset.loc[dataset['Sexo'].isin( ['FEM','Feminino']), 'Sexo'] = "F" #Visualiza o resultado valores = dataset.groupby(['Sexo']).size() valores
Saída:
6) Remover dados duplicados.
6.1) Verificando se há clientes duplicados, para isso verificamos se há um ID duplicado:
#Dados duplicados, buscamos pelo ID(dado único) dataset[dataset.duplicated(['Id'],keep=False)]
Saída:
6.2) Apagando as linhas duplicadas:
#Excluir os dados duplicados. #keep = manter a primeira ocorrência e excluir as demais. dataset.drop_duplicates(subset="Id", keep='first',inplace=True) #Buscando se ainda há duplicados. dataset[dataset.duplicated(['Id'],keep=False)]
Saída:
É esperada uma tabela vazia!
Segue o link para acessar o código na integra: Código
Essas são apenas algumas das tarefas comuns na limpeza de dados. O processo exato pode variar dependendo do conjunto de dados e do problema em questão. No entanto, o objetivo principal é garantir que os dados estejam corretos, completos e consistentes antes de prosseguir para as etapas de análise e modelagem na ciência de dados.
Comentários
Postar um comentário