O pré-processamento é a etapa mais crítica antes de aplicar algoritmos de ML. Dados brutos raramente estão prontos para uso: podem conter inconsistências, valores ausentes, atributos em escalas diferentes e variáveis categóricas em formato texto.

Tratamento de inconsistências e dados ausentes

Dados inconsistentes

Valores que violam regras do domínio (ex.: idade negativa). Abordagens:

  • Remover linhas/colunas (não recomendado — perda de informação).
  • Preencher manualmente.
  • Preencher com estatísticas (média ou mediana).

Dados ausentes

  • Identificar valores nulos com isnull().sum().
  • Preencher com média/mediana (fillna) ou métodos avançados (interpolação, imputação por modelos).

Transformação de variáveis

Escalonamento (scaling)

Alinha atributos na mesma escala para evitar que valores maiores dominem o modelo.

MétodoClasse sklearnQuando usar
PadronizaçãoStandardScalerDados com outliers; média 0 e desvio 1.
NormalizaçãoMinMaxScalerTransformar valores para o intervalo [0, 1].

Variáveis categóricas → numéricas

MétodoComportamento
LabelEncoderAtribui um inteiro a cada categoria (pode introduzir ordem indevida).
OneHotEncoderCria colunas binárias por categoria (preferido na disciplina).

Exercício: base Mountain x Praia

A base mountains_vs_beaches_preferences.csv contém preferências de viagem. O pré-processamento envolve OneHotEncoder nos atributos categóricos, escalonamento com StandardScaler, divisão treino/teste e salvamento em mb.pkl.

Talk is cheap, show me the code: Bases utilizadas nesta aula (disponíveis no Google Drive): mountains_vs_beaches_preferences.csv · census.csv

"""Atividade Pré-Processamento.ipynb
Automatically generated by Colab."""

#biblioteca para gerar gráficos dinâmicos
!pip install plotly --upgrade
#pandas é uma biblioteca que trabalha com a importação de arquivos .csv
import pandas as pd
#numpy é uma biblioteca para a realização de operações em arrays
import numpy as np
#seaborn é uma biblioteca para vizualização de gráficos
import seaborn as sb
#matplotlib é também uma biblioteca para a geração de gráficos
import matplotlib.pyplot as plt
import plotly.express as px

"""PARTE I – carregamento da base"""
base_mb = pd.read_csv("/content/drive/MyDrive/Colab Notebooks/mountains_vs_beaches_preferences.csv")
base_mb.isnull().sum()

"""PARTE II – Divisão entre previsores e classe"""
base_mb.columns
X_mb = base_mb.iloc[:, 0:13]
Y_mb = base_mb.iloc[:, 0:13].values

"""PARTE III – Atributos categóricos para numéricos (Usar apenas o OneHotEncoder)"""
from sklearn.preprocessing import OneHotEncoder
from sklearn.compose import ColumnTransformer
oneHoteEncoder_mb = ColumnTransformer(transformers=[('OneHot', OneHotEncoder(), [1, 3, 5, 7, 10])], remainder='passthrough')
X_mb = oneHoteEncoder_mb.fit_transform(X_mb)

"""PARTE IV - Escalonamento"""
from sklearn.preprocessing import StandardScaler
scaler_mb = StandardScaler()
X_mb = scaler_mb.fit_transform(X_mb)
from sklearn.model_selection import train_test_split
X_mb_treinamento, X_mb_teste, Y_mb_treinamento, Y_mb_teste = train_test_split(X_mb, Y_mb, test_size = 0.15, random_state = 0)
import pickle #salvar variáveis em disco
with open('mb.pkl', mode = 'wb') as f:
    pickle.dump([X_mb_treinamento,Y_mb_treinamento, X_mb_teste, Y_mb_teste], f)