1
resposta

[Dúvida] Quais bibliotecas utilizar para limpar dados para Machine Learning

O autor Thomas C. Redman, em seu artigo “Seizing Opportunity in Data Quality” (2017), ele destaca que dados de baixa qualidade podem consumir até 25% da receita de uma organização. O que o programador ou analista está utilizando para minimizar esses impactos?

1 resposta

Olá, Pablo! Tudo bom?

Realmente o tratamento dos dados é um processo que faz toda diferença na análise das informações.

Vou citar aqui algumas bibliotecas que já estão muito bem consolidadas nos campos de Análise e Engenharia de Dados, vamos lá?!

Pandas

É a biblioteca Python queridinha do pessoal de Dados, usada para manipulação de dados tabulares (DataFrames) que também conta com funções e métodos de limpeza de dados. Muito usada para filtragem, transformação e agregação. Métodos úteis:

  • fillna()
  • dropna()
  • replace()

NumPy

Também é uma biblioteca Python que fornece manipulação de arrays e operações numéricas eficientes. Usada para tratar dados numéricos e aplicar normalização e substituições. Recursos úteis:

  • isnan()
  • unique()
  • nan_to_num()

Scikit-learn

Um módulo do Python usado para o pré-processamento de dados para modelos de Machine Learning. Utilizado também para padronizar variáveis, lidar com valores ausentes e transformar dados categóricos. Ferramentas úteis:

  • MinMaxScaler
  • OneHotEncoder
  • StandardScaler

Exemplo prático

Vou usar o Google Colab para simular uma base de dados com alguns dados ausentes:

import numpy as np
import pandas as pd

# Criando o DataFrame com dados fictícios
dados = {
    'id': range(1, 21),
    'nome': ['Ana', 'Bruno', 'Carlos', 'Daniela', 'Eduardo', None, 'Fernanda', 'Gabriel', None, 'Helena',
             'Igor', 'Joana', 'Karla', 'Lucas', 'Marina', None, 'Natália', 'Otávio', 'Paula', 'Renato'],
    'idade': [28, 35, 22, None, 40, 19, 33, None, 31, 25, 45, 38, None, 29, 34, 36, None, 30, 27, None],
    'salario': [3000, 4200, None, 3900, 5000, 3200, None, 4100, 3600, 3400,
                None, 4700, 3100, None, 3900, 2800, 4300, None, 3600, 4000]
}

df = pd.DataFrame(dados)

print("DataFrame original com valores ausentes:")
df

Resultado:

Uma tabela de dados exibindo indivíduos com seus IDs, nomes, idades e salários, destacando valores ausentes em caixas vermelhas.

Repare que esses valores ausentes (None/NaN) podem afetar a análise e aprendizagem em modelos.

Uma forma de tratar esses dados seria usando o método fillna() para:

  • Preencher nomes ausentes com "Desconhecido"
  • Preencher idades ausentes com a média das idades
  • Preencher salários ausentes com a mediana dos salários

O código para isso ficaria assim:

media_idade = round(df['idade'].mean(), 0)

df_tratado = df.fillna({
    'nome': 'Desconhecido',
    'idade': media_idade,
    'salario': df['salario'].median()
})

print("\nDataFrame após o tratamento com fillna():")
df_tratado

Observações:

  • fillna() aplica os valores de substituição por coluna, de forma vetorizada e eficiente.
  • media_idade = round(df['idade'].mean(), 0) calcula a média das idades ignorando o NaN.
  • df['salario'].median() calcula a mediana dos salários para suavizar o impacto de outliers.

Resultado:

Uma tabela exibindo dados dos funcionários, destacando nomes, idades e salários, com algumas entradas marcadas como "Desconhecido" (desconhecido).

Dessa forma temos uma base de dados tratada para melhor ser analisada ou usada em modelos!

Espero ter ajudado e fico à disposição se precisar.

Abraço e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado