5. Pré-processamento de Dados
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étodo | Classe sklearn | Quando usar |
|---|---|---|
| Padronização | StandardScaler | Dados com outliers; média 0 e desvio 1. |
| Normalização | MinMaxScaler | Transformar valores para o intervalo [0, 1]. |
Variáveis categóricas → numéricas
| Método | Comportamento |
|---|---|
LabelEncoder | Atribui um inteiro a cada categoria (pode introduzir ordem indevida). |
OneHotEncoder | Cria 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)