O Data Cleansing, ou limpeza de dados, é uma etapa crucial no processo de preparação e pré-processamento de dados em análise de dados, machine learning, e outras tarefas relacionadas. Segue abaixo alguns tópicos no que a limpeza de dados pode ser importante:

Qualidade dos Dados:

  • Dados sujos ou incorretos podem levar a conclusões errôneas e decisões inadequadas. A limpeza de dados melhora a qualidade geral dos dados, tornando as análises mais confiáveis.

Consistência:

  • Ajuda a garantir a consistência dos dados, eliminando discrepâncias e valores duplicados que podem surgir de fontes diferentes ou de processos de entrada de dados inconsistentes.

Conformidade com Padrões:

  • Garante que os dados estejam em conformidade com padrões e formatos predefinidos. Isso é especialmente importante quando se integram dados de várias fontes.

Principalmente se vier de uma fonte de dados externas (API) ou Banco de Dados (MongoDB, Postgres e etc).

Detecção e Tratamento de Outliers:

  • Identifica e lida com valores atípicos (outliers) que podem distorcer as análises estatísticas e modelos de machine learning.

Melhoria da Precisão dos Modelos:

  • Para modelos de machine learning, a qualidade dos dados é crucial. Dados limpos e bem-preparados aumentam a precisão dos modelos e a capacidade de generalização para novos dados.

Tratamento de Dados Ausentes:

  • Identificação e tratamento de valores ausentes, seja preenchendo-os com valores adequados ou removendo registros correspondentes, evitando assim a introdução de viés nos resultados.
None

Facilidade de Compreensão:

  • Dados limpos são mais fáceis de entender e interpretar, facilitando a colaboração entre membros da equipe e tornando os resultados mais acessíveis para tomadores de decisão.

Já viu aquele UUID todo bagunçado vindo de um MongoDB?

None
Exemplo de dado não estrutura

Economia de Recursos:

  • Reduz a necessidade de retrabalho devido a erros nos dados, economizando tempo e recursos que seriam gastos na correção de problemas resultantes de dados sujos.

Imagine rodar milhares de linhas, depois de um longo tempo e descobrir entre as últimas que existe dado faltante ou com tipo errado?

Exemplo de um código simples que faz a limpeza de dados do tipo NaN (Not a Number), NaT (Not a Type) e padronização de Datas.

class DataCleansing:

  def __init__(self, data):
      self.data = data
  
  def tratar_dados(self):
  
      numeric_columns = self.data.select_dtypes(include=['int64', 'float64']).columns
      self.data[numeric_columns] = self.data[numeric_columns].fillna(0)
      
      objet_columns = self.data.select_dtypes(include=['object']).columns
      self.data[objet_columns] = self.data[objet_columns].replace({np.nan: None}) 
  
      date_columns = self.data.select_dtypes(include=['datetime64[ns]']).columns
      self.data[date_columns] = self.data[date_columns].replace({pd.NaT: pd.to_datetime('1900-01-01')})
import pandas as pd
import numpy as np
import requests
import json
from datetime import datetime

url_despesa = "https://wstransparencia.vilavelha.es.gov.br/api/despesa?exercicio=2023"

df_despesas = None

try:
    response = requests.get(url_despesa)
    response.raise_for_status()
    if response.status_code == 200:
        json_convertido = json.loads(response.text)
        df_despesas = pd.DataFrame(json_convertido)

        df_despesas['Data'] = df_despesas.apply(lambda linha: datetime.strptime(linha['Data'], "%Y-%m-%dT%H:%M:%S").strftime("%d-%m-%Y"), axis=1)

        DataCleansing(df_despesas).tratar_dados()
except requests.exceptions.HTTPError as e:
    print(e)

Neste exemplo, o código verifica as colunas do tipo int64 e float64, insere o valor 0 cada vez que encontrar a informação NaN.

None
Função fillna insere o valor 0 quando encontrado NaN

O mesmo acontece com as colunas no formato de objeto e datas:

None
Função replace para sobrescrever os NaN para None

Nesses casos acima, todo e qualquer NaN será substituído por None (null em Python) e no formato NaT por uma data fixa "1900–01–01" (podendo ser por None também).

None

Como a API retornou informações de datas, resolvi padroniza-las para o formato dia-mês-ano:

df_despesas['Data'] = df_despesas.apply(lambda linha: datetime.strptime(linha['Data'], "%Y-%m-%dT%H:%M:%S").strftime("%d-%m-%Y"), axis=1)
None
Resultado da conversão com o código acima

Python possui suas bibliotecas ricas em funcionalidades como pandas, numpy, e scikit-learn, é uma escolha popular para a limpeza de dados devido à sua simplicidade, flexibilidade e vasta comunidade de suporte. O processo de Data Cleansing em Python envolve manipulação eficiente de dados, tratamento de valores ausentes, detecção de outliers e aplicação de transformações necessárias para garantir a qualidade dos dados antes da análise ou modelagem.