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:
xxxxxxxxxximport pandas as pdimport numpy as npfrom sklearn.model_selection import train_test_splitfrom keras.models import Sequentialfrom keras.layers import Dense# 1. Ler o arquivo Exceldf = 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 entraday = 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 neuralmodel = Sequential()model.add(Dense(12, input_dim=5, activation='relu')) # 5 entradasmodel.add(Dense(8, activation='relu'))model.add(Dense(1, activation='sigmoid')) # 1 saída bináriamodel.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])# 5. Treinar o modelohistory = 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 nomeinput_columns = ['Temperatura', 'Umidade', 'Pressao', 'VelocidadeVento', 'Precipitacao']output_column = 'AlertaTempestade'X = df[input_columns].valuesy = df[output_column].valuesSe 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 tipoX_train = df[df['Tipo'] == 'Treino'][input_columns].valuesy_train = df[df['Tipo'] == 'Treino'][output_column].valuesX_test = df[df['Tipo'] == 'Teste'][input_columns].valuesy_test = df[df['Tipo'] == 'Teste'][output_column].valuesNormalize os dados antes do treinamento:
xxxxxxxxxxfrom sklearn.preprocessing import StandardScalerscaler = 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).
xxxxxxxxxxfrom sklearn.preprocessing import StandardScaler# Dados de exemplo (features numéricas)X = [[10, 2], [20, 4], [30, 6]]# Criar e aplicar o StandardScalerscaler = 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# TreinoX_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:
xxxxxxxxxxtrain_comments = df[df['Tipo'] == 'Treino']['Comentario'].valuestest_comments = df[df['Tipo'] == 'Teste']['Comentario'].valuesFernando Passold, 29/03/2025