Leitura de Dados a partir de arquivos ExcelObjetivoArquivo Exemplo ExcelCódigo Python/Keras para Leitura e ProcessamentoVersão Alternativa com Especificação Explícita das ColunasSeparação Personalizada de Treino/TesteDicas Adicionais1. Pré-processamentoO que fazem as funções fit_transform e transform?Função fit_transform()
Sintaxe de UsoQuando Usar fit_transform()
?Cuidados ImportantesReferências2. Validação de Dados 3. Manter Comentários
Suponha que se queria proceder à leitura de dados para conjuntos de treino e testes de uma rede neural usando Python/Keras, à partir de arquivos Excel usando Python/Pandas para ler o arquivo com os dados.
Segue abaixo um exemplo de arquivo Excel (dados_treinamento.xlsx):
Temperatura | Umidade | Pressao | VelocidadeVento | Precipitacao | AlertaTempestade | Comentario |
---|---|---|---|---|---|---|
28.5 | 0.65 | 1013 | 12.3 | 0.0 | 0 | Dia normal |
32.1 | 0.72 | 1005 | 25.7 | 5.2 | 1 | Possível tempestade |
22.3 | 0.58 | 1018 | 8.1 | 0.0 | 0 | Dia fresco |
30.7 | 0.85 | 990 | 35.2 | 15.8 | 1 | Tempestade iminente |
... | ... | ... | ... | ... | ... | ... |
Neste exemplo:
xxxxxxxxxx
import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from keras.models import Sequential
from keras.layers import Dense
# 1. Ler o arquivo Excel
df = pd.read_excel('dados_treinamento.xlsx')
# 2. Separar features (X) e target (y)
# Supondo que as colunas de entrada são as primeiras 5 e a saída é a 6ª
X = df.iloc[:, 0:5].values # Primeiras 5 colunas como entrada
y = df.iloc[:, 5].values # 6ª coluna como saída
# 3. Separar conjuntos de treino e teste (70% treino, 30% teste)
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.3, random_state=42
)
# 4. Criar e compilar a rede neural
model = Sequential()
model.add(Dense(12, input_dim=5, activation='relu')) # 5 entradas
model.add(Dense(8, activation='relu'))
model.add(Dense(1, activation='sigmoid')) # 1 saída binária
model.compile(loss='binary_crossentropy',
optimizer='adam',
metrics=['accuracy'])
# 5. Treinar o modelo
history = model.fit(X_train, y_train,
validation_data=(X_test, y_test),
epochs=100, batch_size=10)
# 6. Avaliar o modelo
_, accuracy = model.evaluate(X_test, y_test)
print(f'Acurácia no conjunto de teste: {accuracy*100:.2f}%')
Se preferir especificar explicitamente quais colunas são entrada e saída:
xxxxxxxxxx
# Especificar colunas por nome
input_columns = ['Temperatura', 'Umidade', 'Pressao', 'VelocidadeVento', 'Precipitacao']
output_column = 'AlertaTempestade'
X = df[input_columns].values
y = df[output_column].values
Se você quiser definir manualmente quais linhas são para treino e quais são para teste (por exemplo, usando uma coluna específica no Excel):
xxxxxxxxxx
# Adicionando uma coluna "Tipo" ao Excel com valores "Treino" ou "Teste"
df = pd.read_excel('dados_treinamento_com_tipo.xlsx')
# Separar por tipo
X_train = df[df['Tipo'] == 'Treino'][input_columns].values
y_train = df[df['Tipo'] == 'Treino'][output_column].values
X_test = df[df['Tipo'] == 'Teste'][input_columns].values
y_test = df[df['Tipo'] == 'Teste'][output_column].values
Normalize os dados antes do treinamento:
xxxxxxxxxx
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)
A função fit_transform()
do StandardScaler
no Scikit-Learn é uma ferramenta (essencial) para pré-processamento de dados em Machine Learning, especialmente útil para redes neurais e algoritmos sensíveis à escala dos dados.
fit_transform()
Normalização dos Dados:
Transforma os dados para ter média zero (μ = 0) e desvio padrão unitário (σ = 1).
Ver: Importância de dados com média zero e desvio padrão unitário, se for o caso.
Equação:
Onde:
Dupla Função:
fit()
: Calcula a média e o desvio padrão dos dados. transform()
: Aplica a transformação (normalização). fit_transform()
faz ambos de uma vez (otimizado para eficiência).
xxxxxxxxxx
from sklearn.preprocessing import StandardScaler
# Dados de exemplo (features numéricas)
X = [[10, 2], [20, 4], [30, 6]]
# Criar e aplicar o StandardScaler
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
print(X_scaled)
Saída (dados normalizados):
xxxxxxxxxx
[[-1.22474487 -1.22474487]
[ 0. 0. ]
[ 1.22474487 1.22474487]]
fit_transform()
?Antes de Algoritmos Sensíveis à Escala:
Evitar Viés (Bias) em Features de Diferentes Escalas:
Acelerar a Convergência em Gradiente Descendente (importante para deep learning).
Só Use fit_transform()
nos Dados de Treino!
Para evitar data leakage, nunca use em dados de teste. Em vez disso:
xxxxxxxxxx
# Treino
X_train_scaled = scaler.fit_transform(X_train)
# Teste (usa mesma média e desvio do treino)
X_test_scaled = scaler.transform(X_test) # NÃO use fit_transform() aqui!
Não Use em Dados Categóricos (apenas numéricos contínuos).
Se Houver Outliers, considere RobustScaler
(baseado em medianas) em vez de StandardScaler
.
A idéia aqui é "filtrar" os dados para evitar desde o problema mais óbvio de entradas inesperadads (por exemplo, strings em campos numéricos), mas também padrões inconsistentes ou incorretos que possam levar uma "polarização" (bias) indesejado, sobre-aprendizado sobre dados com muito ruído (a rede aprende com o ruído), falhas silenciosas (percebidas durante uso devido à previsões absurdas realizadas, o efeito "hallucination"), problemas de escalonamento (faixas absurdas de valores para algumas entradas) e vazamento de dados (maus conjuntos de treino e testes).
Para uma avaliação mais robusta, veja Validação de Dados.
Se quiser manter os comentários para eventuais futuras referências:
xxxxxxxxxx
train_comments = df[df['Tipo'] == 'Treino']['Comentario'].values
test_comments = df[df['Tipo'] == 'Teste']['Comentario'].values
Fernando Passold, 29/03/2025