Dominando a Limpeza e Preparação de Dados com Pandas
- #Python
- #Machine Learning
A limpeza e preparação de dados são etapas cruciais em qualquer processo de Machine Learning. A qualidade e a integridade dos dados influenciam diretamente a precisão e o desempenho dos modelos de Machine Learning. Neste artigo, irei explorar a importância dessas etapas e fornecer exemplos práticos de como lidar com dados ausentes (NaN) e duplicatas usando a biblioteca Pandas em Python.
A Importância da Limpeza e Preparação de Dados no Machine Learning
Antes de começarmos a construir modelos de Machine Learning, é fundamental garantir que nossos dados estejam limpos e preparados adequadamente. Aqui estão algumas razões pelas quais essa etapa é essencial:
- Qualidade dos dados: Dados inconsistentes, imprecisos ou incompletos podem levar a modelos imprecisos e resultados enganosos. A limpeza dos dados ajuda a remover erros e inconsistências, garantindo que os modelos sejam alimentados com informações confiáveis.
- Redução de viés: Dados desequilibrados ou tendenciosos podem introduzir viés nos modelos de Machine Learning, resultando em previsões injustas ou enviesadas. A limpeza cuidadosa dos dados pode ajudar a mitigar esses problemas, tornando as previsões mais justas e confiáveis.
- Desempenho do modelo: Dados limpos e bem preparados permitem que os modelos de Machine Learning sejam treinados de forma mais eficiente e eficaz. Isso resulta em modelos mais precisos e com melhor desempenho geral.
Agora, vamos explorar alguns exemplos práticos de como lidar com dados ausentes (NaN) e duplicatas usando a biblioteca Pandas.
Tratando Dados Ausentes (NaN)
Os dados ausentes podem ser um desafio comum ao lidar com conjuntos de dados do mundo real. A biblioteca Pandas oferece várias opções para lidar com dados ausentes. Vamos considerar um exemplo fictício de um conjunto de dados de vendas contendo informações sobre clientes, produtos e quantidades vendidas.
Exclusão de Dados Ausentes
Em alguns casos, podemos optar por excluir as linhas ou colunas que contêm dados ausentes, se essas omissões não prejudicarem significativamente a representatividade dos dados.
Suponha que temos um DataFrame chamado "df_vendas" com informações sobre as vendas de um determinado produto. No entanto, essa tabela possui valores ausentes na coluna "Quantidade".
import pandas as pd
data = {'Produto': ['A', 'B', 'C', 'D'],
'Quantidade': [10, None, 15, 20],
'Preço': [100, 200, 150, None]}
df_vendas = pd.DataFrame(data)
O dataframe df_vendas original:
Podemos aplicar diferentes estratégias para lidar com os valores ausentes:
1 - Exclusão de valores ausentes: Em alguns casos, podemos optar por excluir as linhas ou colunas que contêm dados ausentes, se essas omissões não prejudicarem significativamente a representatividade dos dados. Por exemplo:
df_vendas_sem_nulos = df_vendas.dropna()
Que resulta em:
Observe que a linha com o produto "B" foi removida porque continha um valor ausente na coluna "Quantidade".
2 - Preenchimento de valores ausentes com um valor específico: Em outros casos, pode ser mais apropriado preencher os valores ausentes com estimativas razoáveis. Por exemplo, podemos preencher os valores ausentes com a média da coluna correspondente:
df_vendas_preenchido = df_vendas.fillna(0)
Que resulta em:
Todos os valores ausentes foram preenchidos com o valor 0.
3 - Preenchimento de valores ausentes com a média: Além de preencher com valores específicos, podemos preencher com métricas como média e medina. No exemplo abaixo é feito um preenchimento com média:
media_quantidade = df_vendas['Quantidade'].mean(
media_preco = df_vendas['Preço'].mean()
df_vendas['Quantidade'].fillna(media_quantidade, inplace=True)
df_vendas['Preço'].fillna(media_preco, inplace=True))
Que resulta em:
Os valores ausentes foram preenchidos com as médias da coluna correspondente.
4 - Interpolação de valores ausentes: Em alguns casos, podemos utilizar técnicas de interpolação para estimar os valores ausentes com base nos dados existentes. A biblioteca Pandas oferece métodos como interpolate() para realizar essa tarefa. Por exemplo, podemos realizar uma interpolação linear para preencher os valores ausentes:
df_vendas['Preço'].interpolate(method='linear', inplace=True)
df_vendas['Quantidade'].interpolate(method='linear', inplace=True)
Que resulta em:
As colunas "Preço" e "Quantidade" agora contém valores interpolados entre os valores existentes. O valor ausente foi preenchido com um valor calculado com base na interpolação linear dos números em cada coluna.
Tratamento de Duplicatas:
Duplicatas nos dados podem ocorrer devido a erros de coleta, entradas de dados repetidas ou outras razões. Essas duplicatas podem afetar negativamente a precisão dos modelos de Machine Learning. Vamos considerar um exemplo fictício de um conjunto de dados de registros de funcionários, onde pode haver duplicatas com base no nome do funcionário.
Suponha que temos um DataFrame chamado "df_clientes" com informações sobre clientes de uma empresa, incluindo o número do CPF. Porém, essa tabela possui algumas linhas duplicadas.
import pandas as pd
data = {'Nome': ['Maria', 'João', 'Ana', 'Pedro', 'Maria'],
'CPF': ['12345678901', '98765432109', '12345678901', '34567890123', '12345678901'],
'Idade': [30, 25, 40, 35, 30]}
df_clientes = pd.DataFrame(data)
O dataframe original:
Podemos aplicar as seguintes estratégias para tratar as duplicatas:
1 - Identificação e remoção de duplicatas através de indexação booleana
O método duplicated() retorna um array de booleanos onde é possível identifica onde há a duplicata.
duplicatas = df_clientes.duplicated()
print(duplicatas)
Resultado:
0 False
1 False
2 False
3 False
4 True
dtype: bool
Vemos que o CPF do índice 4 deu True, ou seja, está duplicado. E no caso a duplicação aconteceu com no nome da cliente Maria (indice 0).
Agora é só fazer a seleção indexada nos elementos que não são duplicados.
df_clientes[~duplicatas]
print(df_clientes[~duplicatas])
#Resultado
Nome CPF Idade
0 Maria 12345678901 30
1 João 98765432109 25
2 Ana 12345678901 40
3 Pedro 34567890123 35
2 - Remoção direta por método:
Aqui o método é mais direto e já elimina sem precisa realizar a indexação.
df_clientes_sem_duplicatas = df_clientes.drop_duplicates()
#Resultado
Nome CPF Idade
0 Maria 12345678901 30
1 João 98765432109 25
2 Ana 12345678901 40
3 Pedro 34567890123 35
As linhas duplicadas foram removidas, mantendo apenas a primeira ocorrência de cada conjunto de duplicatas.
É importante lembrar que a remoção de duplicatas é baseada na comparação de todas as colunas do DataFrame. Caso seja necessário considerar apenas uma coluna específica para identificar duplicatas, é possível utilizar o argumento subset na função drop_duplicates().
Em resumo:
A limpeza e preparação de dados utilizando o Pandas é uma etapa essencial no processo de machine learning. Neste artigo, você aprendeu sobre a importância dessa etapa e exploramos exemplos práticos de como tratar valores ausentes e duplicatas.
Para tratar valores ausentes, podemos excluir as linhas com valores ausentes, preenchê-los com valores específicos, como zeros ou a média dos dados, ou realizar interpolação para estimar valores ausentes com base em padrões existentes.
Quanto às duplicatas, identificamos e removemos linhas duplicadas do DataFrame com base em todas as colunas ou em colunas específicas.
É fundamental adaptar as técnicas de limpeza e preparação de dados de acordo com as características do conjunto de dados e as necessidades do projeto de machine learning. Pratique essas técnicas com conjuntos de dados reais para aprimorar suas habilidades e obter resultados mais confiáveis em suas análises e modelos de machine learning.
#pandas #python #tratamentodedados #machinelearning #nan #notanumber #datascience #dataanalytics #analisededados #aprendizagemdemaquinas #limpezadedados #cienciadedados