Módulo de Atualização do Dataset Principal
O módulo Atualizar Dataset é a fase final e crucial do nosso pipeline de automação. Ele é responsável por integrar e consolidar todos os dados processados, combinando informações numéricas e booleanas em um novo banco de dados, e então atualizando o dataset principal do projeto. Este processo garante que suas análises e relatórios sejam sempre baseados nas informações mais recentes e abrangentes
Como Funciona
A pasta Atualizar-Dataset/codigos/
possuí dois scripts, o primeiro cria um novo banco de dados com todos os dados processados até então, e o segundo atualiza o dataset principal do projeto com os novos dados coletados. A seguir uma explicação mais aprofundada a cerca dos scripts:
Criar dataset com dados novos
O script 01_Criar_DB.py
, localizado em Atualizar-Dataset/codigos/
, orquestra as seguintes ações:
- Definição de Caminhos: O script primeiro define os caminhos para os arquivos de entrada e saída. Ele busca:
DB.xlsx
: O dataset contendo colunas numéricas combinadas (gerado pelo módulo de Ajuste de Colunas Numéricas).colunas_combinadas.xlsx
: O dataset contendo colunas booleanas combinadas (gerado pelo módulo de Ajuste de Colunas Booleanas).- O arquivo de saída
DB_novo.csv
será gerado dentro da pastaAtualizar-Dataset/datasets/
.
- Carregamento dos DataFrames:: Os arquivos
DB.xlsx
ecolunas_combinadas.xlsx
são lidos e carregados como DataFrames do Pandas. - Concatenação por Colunas: Os dois DataFrames são concatenados lado a lado (ou seja, por colunas). Isso significa que as colunas do dataset numérico e as colunas do dataset booleano são unidas para formar um único DataFrame abrangente.
- Salvamento do Novo Dataset: O DataFrame combinado resultante é salvo em um novo arquivo CSV chamado
DB_novo.csv
no diretórioAtualizar-Dataset/datasets/
. - Confirmação: Uma mensagem de sucesso é exibida no console, indicando que o novo banco de dados foi gerado com êxito. Em caso de qualquer problema durante o processo, uma mensagem de erro será exibida.
Exemplo de Código: 01_Criar_DB.py
A seguir, o código completo do script Atualizar-Dataset/codigos/01_Criar_DB.py
, que ilustra a lógica de união dos datasets.
import pandas as pd
from pathlib import Path
import os # Necessário para criar diretórios se não existirem
# Obtém o diretório do script atual e a raiz do projeto
script_dir = Path(__file__).parent.parent
projeto_raiz = script_dir.parent
# Define os caminhos completos para os arquivos de entrada
caminho_db_a = projeto_raiz / 'Ajuste-Colunas-Numericas' / "DB.xlsx"
caminho_db_b = projeto_raiz / 'Ajuste-Colunas-Booleanas' / "colunas_combinadas.xlsx"
# Define o caminho completo para o arquivo CSV de saída
# Ele será salvo dentro da pasta 'datasets' do módulo 'Atualizar-Dataset'
caminho_pasta_saida = script_dir / "datasets"
caminho_arquivo_saida_csv = script_dir / "datasets" /"DB_novo.csv"
# Garante que o diretório de saída exista
os.makedirs(caminho_pasta_saida, exist_ok=True)
try:
print("=== Juntando Colunas Numericas e Booleanas num só DB.... ===")
# Carrega os DataFrames dos arquivos XLSX
db_a = pd.read_excel(caminho_db_a)
db_b = pd.read_excel(caminho_db_b)
# Lista de DataFrames a serem combinados
dataframes = [db_a, db_b]
# Concatena os DataFrames por colunas (lado a lado)
# Assumimos que as linhas se alinham ou que a ordem é garantida pelos processos anteriores.
# Se houver necessidade de merge por chaves (ID, etc.), a lógica aqui seria diferente (pd.merge).
df_combined = pd.concat(dataframes, axis=1)
# Salvando em csv
df_combined.to_csv(caminho_arquivo_saida_csv, index=False)
print("✅Novo Banco de Dados Gerado com Sucesso!!")
except Exception as e:
print(f"Ocorreu um erro: {e}")
Atualizar dataset antigo com dados novos
O script 02_Atualizar_DB.py
, localizado em Atualizar-Dataset/codigos/
, executa as seguintes ações:
- Definição de Caminhos: O script primeiro define os caminhos para os arquivos de entrada e saída. Ele busca:
relatorios.csv
: O dataset "antigo" ou base, localizado emAtualizar-Dataset/datasets/
.DB_novo.csv
: O dataset "novo", que contém as informações mais recentes (gerado pelo passo anterior), também localizado emAtualizar-Dataset/datasets/
.- Os arquivos de saída finais,
Dataset.xlsx
erelatorios.csv
, serão gerados na raiz do projeto.
- Carregamento dos DataFrames:: Os arquivos
relatorios.csv
eDB_novo.csv
são lidos e carregados como DataFrames do Pandas (df_a
edf_b
, respectivamente). - Remoção de Colunas Específicas:: O script remove as colunas 'Ação' e 'Filtro' do dataset
relatorios.csv
(df_a
). Essa etapa é crucial para padronizar o dataset antigo antes da concatenação. - Concatenação Vertical dos DataFrames: Os dois DataFrames (
df_a
modificado edf_b
) são concatenados verticalmente, ou seja, as linhas dedf_b
são adicionadas abaixo das linhas dedf_a
. Oignore_index=True
garante que o índice do novo DataFrame seja reiniciado. - Salvamento dos Datasets Finais: O DataFrame final combinado (
df_final
) é salvo em dois formatos diferentes na raiz do projeto:Dataset.xlsx
: Uma versão em Excel.relatorios.csv
: Uma versão em CSV, ideal para análises e relatórios.
- Confirmação: Uma mensagem de sucesso é exibida no console, confirmando que o banco de dados foi atualizado com êxito.
Exemplo de Código: 02_Atualizar_DB.py
A seguir, o código completo do script Atualizar-Dataset/codigos/02_Atualizar_DB.py
, que ilustra a lógica de união e remoção de colunas.
import pandas as pd
from pathlib import Path
# Define os caminhos do script e da raiz do projeto
script_dir = Path(__file__).parent.parent
projeto_raiz = script_dir.parent
# Define os caminhos para os arquivos de entrada (dentro da pasta 'datasets' do módulo)
caminho_db_a = script_dir / "datasets" / "relatorios.csv" # Dataset antigo/base
caminho_db_b = script_dir / "datasets" / "DB_novo.csv" # Dataset novo, gerado no passo anterior
# Define os caminhos para os arquivos de saída (na raiz do projeto)
arquivo_saida_xlsx = projeto_raiz / "Dataset.xlsx"
arquivo_saida_csv = projeto_raiz / "relatorios.csv"
try:
print("=== Carregando datasets para atualização... ===")
df_a = pd.read_csv(caminho_db_a)
df_b = pd.read_csv(caminho_db_b)
print(f"Dataset 'relatorios.csv' (antigo) carregado com {len(df_a.columns)} colunas e {len(df_a)} linhas.")
print(f"Dataset 'DB_novo.csv' (novo) carregado com {len(df_b.columns)} colunas e {len(df_b)} linhas.")
# Remove colunas específicas do dataset antigo
# O 'inplace=True' modifica o DataFrame diretamente sem retornar uma cópia
print("Removendo colunas 'Ação' e 'Filtro' do dataset antigo...")
df_a.drop(columns=['Ação',"Filtro"], inplace=True)
print(f"Colunas restantes no dataset antigo: {len(df_a.columns)}")
# Agora o df_a já não tem mais as colunas "Ação" e "Filtro"
print("\n=== Concatenando Banco de Dados antigo com o novo... ===")
# Concatena os DataFrames verticalmente (empilhando as linhas)
# ignore_index=True redefine o índice do DataFrame final
df_final = pd.concat([df_a, df_b], ignore_index=True)
print(f"Concatenação concluída. O DataFrame final possui {len(df_final)} linhas e {len(df_final.columns)} colunas.")
# Salvando o DataFrame final em formato XLSX
print(f"Salvando o Banco de Dados atualizado em '{arquivo_saida_xlsx}'...")
df_final.to_excel(arquivo_saida_xlsx, index=False)
# Salvando o DataFrame final em formato CSV
print(f"Salvando o Banco de Dados atualizado em '{arquivo_saida_csv}'...")
df_final.to_csv(arquivo_saida_csv, index=False)
print("✅ Banco de dados Atualizado com Sucesso!!")
except FileNotFoundError as e:
print(f"Erro: Um dos arquivos de entrada não foi encontrado. Verifique se eles existem nos caminhos esperados: {e}")
except KeyError as e:
print(f"Erro: Uma das colunas a serem removidas não foi encontrada no dataset antigo: {e}")
except Exception as e:
print(f"Ocorreu um erro inesperado durante a atualização do banco de dados: {e}")