This commit is contained in:
2025-03-05 14:26:21 -03:00
parent 836fdfe5e0
commit dcfd2cdeaf
7 changed files with 1251 additions and 415 deletions

View File

@@ -4,6 +4,9 @@ import numpy as np
from time import sleep
from datetime import datetime
import csv
from odf.opendocument import OpenDocumentSpreadsheet
from odf.table import Table, TableRow, TableCell
from odf.text import P
def listar_csvs(diretorio):
@@ -68,7 +71,7 @@ def rodar_decendio(decendios,qtd_veranicos, estacoes, file):
print("Decendio...")
#estacoes= [2244035]
estacoes= [2244035]
#decendios = decendios.head(24)
resultados = []
@@ -84,8 +87,6 @@ def rodar_decendio(decendios,qtd_veranicos, estacoes, file):
data_inicio = pd.to_datetime(selecao_estacao['INICIO'])
data_fim = pd.to_datetime(selecao_estacao['FINAL'])
filtro = decendios[(decendios['INICIO'] <= data_fim) & (decendios['FINAL'] >= data_inicio)]
dia =selecao_estacao['QTDDIAS']
@@ -94,13 +95,8 @@ def rodar_decendio(decendios,qtd_veranicos, estacoes, file):
filtro['dias_decendio'] = 0
filtro['amplitude'] =classificar_aplitude(dia)
diferenca=diferenca_dias(data_inicio, data_fim)+1
quantidade_veranicos = len(filtro) # Conta o número de linhas
print(index,"- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -")
print ('estacao: ',selecao_estacao , ' Qtd Dias: ', diferenca)
@@ -183,6 +179,7 @@ def rodar_decendio(decendios,qtd_veranicos, estacoes, file):
dados.append({
'CODIGO': selecao_estacao['CODIGO'],
'DECENDIO': row['DECENDIO'],
'KEY': row['DECENDIO'] + str(pd.to_datetime(row['INICIO']).year),
'AMPLITUDE': row['amplitude'],
'ANO': pd.to_datetime(row['INICIO']).year,
})
@@ -200,7 +197,6 @@ def rodar_decendio(decendios,qtd_veranicos, estacoes, file):
def transformar_decendio():
origem = '42veranicosclassificacao'
@@ -211,17 +207,159 @@ def transformar_decendio():
df = pd.read_csv("./42veranicosclassificacao/"+file, sep=";")
df_pivot = df.pivot(index="CODIGO", columns="DECENDIO", values="AMPLITUDE")
#df_pivot.reset_index(inplace=True)
#df_pivot.to_csv("./43descendiofinal/final"+file, sep=";", encoding="utf-8", index=False)
#Definir o ano hidrológico
def calcular_ano_hidrologico(data):
ano_atual = data.year
if data.month >= 9: # Setembro a Dezembro -> Ano atual/Ano seguinte
return f"{ano_atual}/{ano_atual + 1}"
else: # Janeiro a Abril -> Ano anterior/Ano atual
return f"{ano_atual - 1}/{ano_atual}"
import pandas as pd
def gerarmatrizembraco():
print("gerar csv 45 ano veranicos..")
origem = '42veranicosclassificacao'
files = listar_csvs(origem)
for file in files:
print(f"Encontrada pasta: ./{origem}/{file}")
estacao = pd.read_csv(f"./{origem}/{file}", delimiter=";", encoding="utf-8")
codigos = estacao['CODIGO'].unique()
for codigo in codigos:
print(codigo)
ano_hidrologico = pd.read_csv("./decendio.csv", sep=";")
# Converter INICIO para datetime
ano_hidrologico["INICIO"] = pd.to_datetime(ano_hidrologico["INICIO"], format="%d/%m/%Y")
# Criar coluna Decendio2 corretamente
ano_hidrologico["KEY"] = ano_hidrologico["DECENDIO"] + ano_hidrologico["INICIO"].dt.strftime("%Y")
# Aplicar a função corrigida
ano_hidrologico["ANO"] = ano_hidrologico["INICIO"].apply(calcular_ano_hidrologico)
ano_hidrologico["AMPLITUDE"] = 0
ano_hidrologico["ESTACAO"] = codigo
# Salvar CSV corrigido
file2= f"./47descendiofinal/{codigo}.csv"
if os.path.exists(file2): os.remove(file2)
ano_hidrologico.to_csv(file2, sep=";", encoding="utf-8", index=False)
def gerarmatrizfinal():
print("preencehr com os dados veranicos..")
origem= '42veranicosclassificacao'
destino = '47descendiofinal'
files = listar_csvs(origem)
for file in files:
print(f"Encontrada pasta: ./{origem}/{file}")
estacao = pd.read_csv(f"./{origem}/{file}", delimiter=";", encoding="utf-8")
codigos = estacao['CODIGO'].unique()
for codigo in codigos:
print(codigo)
filedestino= f"./{destino}/{codigo}.csv"
print(filedestino)
destino_df = pd.read_csv(filedestino, delimiter=";", encoding="utf-8")
origem = estacao[estacao['CODIGO'] == codigo]
for index, row in origem.iterrows():
key = row['KEY']
amplitude = row['AMPLITUDE']
mask = destino_df['KEY'] == key
if mask.any():
destino_df.loc[mask, 'AMPLITUDE'] = amplitude
# Salva o dataset de destino atualizado
destino_df.to_csv(filedestino, sep=";", index=False, encoding="utf-8")
def exportarcalc():
csv_file = "teste.csv"
ods_file = "saida.ods"
df_pivot.reset_index(inplace=True)
df_pivot.to_csv("./43descendiofinal/final"+file, sep=";", encoding="utf-8", index=False)
# Ler o CSV
df = pd.read_csv(csv_file, delimiter=";", encoding="utf-8")
# Criar documento ODS
ods = OpenDocumentSpreadsheet()
table = Table(name="Dados")
# Adicionar linha do ESTACAO
estacao = "2022454" # Valor fixo conforme exemplo
ano_hidrologico = f"ESTACAO: {estacao}"
row_ano = TableRow()
cell_ano = TableCell()
cell_ano.addElement(P(text=ano_hidrologico))
row_ano.addElement(cell_ano)
table.addElement(row_ano)
# Preparar os anos hidrológicos únicos
anos = df['ANO'].unique() # Pegar anos únicos
# Adicionar linha de cabeçalho com os anos
row_periodo = TableRow()
# Primeira célula vazia para alinhamento
cell_vazia = TableCell()
cell_vazia.addElement(P(text="DECÊNDIO"))
row_periodo.addElement(cell_vazia)
# Adicionar cada ano como cabeçalho
for ano in anos:
cell_ano = TableCell()
cell_ano.addElement(P(text=str(ano)))
row_periodo.addElement(cell_ano)
table.addElement(row_periodo)
# Agrupar dados por decêndio
decendios = df['DECENDIO'].unique()
# Adicionar os dados
for decendio in decendios:
table_row = TableRow()
# Primeira célula com o nome do decêndio
cell_decendio = TableCell()
cell_decendio.addElement(P(text=decendio))
table_row.addElement(cell_decendio)
# Adicionar valores para cada ano
for ano in anos:
# Filtrar o valor para o decêndio e ano específico
valor = df[(df['DECENDIO'] == decendio) & (df['ANO'] == ano)]['AMPLIUDE'].iloc[0] if not df[(df['DECENDIO'] == decendio) & (df['ANO'] == ano)].empty else 0
cell_valor = TableCell()
cell_valor.addElement(P(text=str(valor)))
table_row.addElement(cell_valor)
table.addElement(table_row)
# Adicionar a tabela ao documento
ods.spreadsheet.addElement(table)
# Salvar o arquivo ODS
ods.save(ods_file)
def carregar_decendios(file):
print("Abrindo arquivo decendio.")
dados_df = pd.read_csv(file, sep=';', decimal=',', parse_dates=['INICIO', 'FINAL'], dayfirst=True)
start_date = '1980-01-01'
end_date = '2022-12-31'
filtered_df = dados_df[(dados_df['INICIO'] >= start_date) & (dados_df['FINAL'] <= end_date)]