Nota
Go to the end to download the full example code.
Síntese da Operação
Para realizar a síntese da operação de um caso do DESSEM é necessário estar em um diretório
no qual estão os principais arquivos de saída do modelo.
Além dos arquivos dos quais são extraídas as variáveis em si, são lidos também alguns arquivos de entrada
do modelo, como o entdados, dadvaz, dessem.arq e operuh. Neste contexto, basta fazer:
$ sintetizador-dessem operacao
O sintetizador irá exibir o log da sua execução:
>>> 2025-04-08 14:26:58,020 INFO: # Realizando síntese da OPERACAO #
>>> .
>>> .
>>> .
>>> 2025-04-08 14:27:18,274 INFO: Realizando sintese de CFU_SIN
>>> 2025-04-08 14:27:18,317 INFO: Tempo para obtenção dos dados do pdo_operacao para SIN: 0.04 s
>>> 2025-04-08 14:27:18,318 INFO: Tempo para compactacao dos dados: 0.00 s
>>> 2025-04-08 14:27:18,319 INFO: Tempo para calculo dos limites: 0.00 s
>>> 2025-04-08 14:27:18,327 INFO: Tempo para preparacao para exportacao: 0.01 s
>>> 2025-04-08 14:27:18,334 INFO: Tempo para exportacao dos dados: 0.01 s
>>> 2025-04-08 14:27:18,334 INFO: Tempo para sintese de CFU_SIN: 0.06 s
>>> 2025-04-08 14:27:18,335 INFO: Realizando sintese de INT_SBP
>>> 2025-04-08 14:27:18,398 INFO: Lendo arquivo PDO_INTER.DAT
>>> 2025-04-08 14:27:18,946 INFO: Tempo para obtenção dos dados do pdo_inter para SBP: 0.61 s
>>> 2025-04-08 14:27:18,948 INFO: Tempo para compactacao dos dados: 0.00 s
>>> 2025-04-08 14:27:18,949 INFO: Tempo para calculo dos limites: 0.00 s
>>> 2025-04-08 14:27:18,956 INFO: Tempo para preparacao para exportacao: 0.01 s
>>> 2025-04-08 14:27:18,963 INFO: Tempo para exportacao dos dados: 0.01 s
>>> 2025-04-08 14:27:18,963 INFO: Tempo para sintese de INT_SBP: 0.63 s
>>> 2025-04-08 14:27:18,963 INFO: Realizando sintese de VCALHA_UHE
>>> 2025-04-08 14:27:19,009 INFO: Lendo arquivo PDO_OPER_TVIAG_CALHA.DAT
>>> 2025-04-08 14:27:19,108 INFO: Tempo para obtenção dos dados do pdo_oper_tviag_calha para UHE: 0.14 s
>>> 2025-04-08 14:27:19,110 INFO: Tempo para compactacao dos dados: 0.00 s
>>> 2025-04-08 14:27:19,111 INFO: Tempo para calculo dos limites: 0.00 s
>>> 2025-04-08 14:27:19,120 INFO: Tempo para preparacao para exportacao: 0.01 s
>>> 2025-04-08 14:27:19,129 INFO: Tempo para exportacao dos dados: 0.01 s
>>> 2025-04-08 14:27:19,130 INFO: Tempo para sintese de VCALHA_UHE: 0.17 s
>>> 2025-04-08 14:27:19,366 INFO: Tempo para sintese da operacao: 21.34 s
>>> 2025-04-08 14:27:19,366 INFO: # Fim da síntese #
Os arquivos serão salvos no subdiretório sintese. Para realizar o processamento,
pode ser utilizado o próprio python:
import plotly.express as px
import pandas as pd
Para a síntese da operação é produzido um arquivo com as informações das sínteses que foram realizadas:
metadados = pd.read_parquet("sintese/METADADOS_OPERACAO.parquet")
print(metadados.head(10))
chave nome_curto_variavel ... calculado limitado
0 CMO_SBM CMO ... False False
1 MER_SBM Mercado ... False False
2 MER_SIN Mercado ... False False
3 MERL_SBM Mercado Líq. ... False False
4 MERL_SIN Mercado Líq. ... False False
5 GHID_UHE GH ... False True
6 GHID_SBM GH ... False True
7 GHID_SIN GH ... False True
8 GTER_UTE GT ... False True
9 GTER_SBM GT ... False True
[10 rows x 8 columns]
Os arquivos com os nomes das sínteses de operação armazenam os dados de todos os cenários simulados.
cmo = pd.read_parquet("sintese/CMO_SBM.parquet")
gter = pd.read_parquet("sintese/GTER_UTE.parquet")
mer = pd.read_parquet("sintese/MER_SIN.parquet")
O formato dos dados de GTER:
print(gter.head(10))
codigo_usina codigo_submercado ... limite_inferior limite_superior
0 1 1 ... 640.0 640.0
1 1 1 ... 640.0 640.0
2 1 1 ... 640.0 640.0
3 1 1 ... 640.0 640.0
4 1 1 ... 640.0 640.0
5 1 1 ... 640.0 640.0
6 1 1 ... 640.0 640.0
7 1 1 ... 640.0 640.0
8 1 1 ... 640.0 640.0
9 1 1 ... 640.0 640.0
[10 rows x 11 columns]
Os tipos de dados da síntese de GTER:
codigo_usina int64
codigo_submercado int64
estagio int64
data_inicio datetime64[ns, UTC]
data_fim datetime64[ns, UTC]
cenario int64
patamar int64
duracao_patamar float64
valor float64
limite_inferior float64
limite_superior float64
dtype: object
O formato dos dados de MER:
print(mer.head(10))
estagio data_inicio ... limite_inferior limite_superior
0 1 2024-10-25 00:00:00+00:00 ... -inf inf
1 2 2024-10-25 00:30:00+00:00 ... -inf inf
2 3 2024-10-25 01:00:00+00:00 ... -inf inf
3 4 2024-10-25 01:30:00+00:00 ... -inf inf
4 5 2024-10-25 02:00:00+00:00 ... -inf inf
5 6 2024-10-25 02:30:00+00:00 ... -inf inf
6 7 2024-10-25 03:00:00+00:00 ... -inf inf
7 8 2024-10-25 03:30:00+00:00 ... -inf inf
8 9 2024-10-25 04:00:00+00:00 ... -inf inf
9 10 2024-10-25 04:30:00+00:00 ... -inf inf
[10 rows x 9 columns]
Os tipos de dados da síntese de MER:
estagio int64
data_inicio datetime64[ns, UTC]
data_fim datetime64[ns, UTC]
cenario int64
patamar int64
duracao_patamar float64
valor float64
limite_inferior float64
limite_superior float64
dtype: object
O formato dos dados de MER:
print(cmo.head(10))
codigo_submercado estagio ... limite_inferior limite_superior
0 1 1 ... -inf inf
1 1 2 ... -inf inf
2 1 3 ... -inf inf
3 1 4 ... -inf inf
4 1 5 ... -inf inf
5 1 6 ... -inf inf
6 1 7 ... -inf inf
7 1 8 ... -inf inf
8 1 9 ... -inf inf
9 1 10 ... -inf inf
[10 rows x 10 columns]
Os tipos de dados da síntese de MER:
codigo_submercado int64
estagio int64
data_inicio datetime64[ns, UTC]
data_fim datetime64[ns, UTC]
cenario int64
patamar int64
duracao_patamar float64
valor float64
limite_inferior float64
limite_superior float64
dtype: object
De modo geral, os arquivos das sínteses de operação sempre possuem as colunas
estagio, data_inicio, data_fim, cenario, patamar, duracao_patamar e valor.
A depender se o arquivo é relativo a uma agregação espacial diferente de todo o SIN ou
agregação temporal diferente do valor médio por estágio, existirão outras colunas
adicionais para determinar de qual subconjunto da agregação o dado pertence. Por exemplo,
no arquivo da síntese de CMO_SBM, existe uma coluna adicional de nome codigo_submercado.
A coluna de cenários contém não somente inteiros de 1 a N, onde N é o número de séries da simulação final do modelo. No caso específico do DESSEM, determinístico, apenas o cenário de índice 1 é obervado.
[1]
Para variáveis da operação que possuam diferentes subconjuntos, como os submercados, podem ser visualizadas as variáveis simultâneamente.
fig = px.line(
cmo,
x="data_fim",
y="valor",
color="codigo_submercado",
)
fig
Para dados por UTE, como o número de subconjuntos é muito grande, é possível fazer um subconjunto dos elementos de interesse para a visualização:
Além dos arquivos com as sínteses dos cenários, estão disponíveis também os arquivos que agregam estatísticas das previsões. No caso do DESSEM, determinístico, com apenas 1 cenário, os arquivos que contém estatísticas apresentam apenas a estatística de média, que correspondem aos próprios valores por cenário observados nas sínteses individuais.
estatisticas_uhe = pd.read_parquet("sintese/ESTATISTICAS_OPERACAO_UHE.parquet")
print(estatisticas_uhe.head(10))
metricas = estatisticas_uhe["cenario"].unique()
print(metricas)
variavel codigo_usina codigo_ree ... valor limite_inferior limite_superior
0 GHID 1 10 ... 6.64 0.0 46.0
1 GHID 1 10 ... 6.64 0.0 46.0
2 GHID 1 10 ... 6.65 0.0 46.0
3 GHID 1 10 ... 6.65 0.0 46.0
4 GHID 1 10 ... 6.65 0.0 46.0
5 GHID 1 10 ... 6.65 0.0 46.0
6 GHID 1 10 ... 6.65 0.0 46.0
7 GHID 1 10 ... 6.65 0.0 46.0
8 GHID 1 10 ... 10.41 0.0 46.0
9 GHID 1 10 ... 10.41 0.0 46.0
[10 rows x 13 columns]
['mean']
Total running time of the script: (0 minutes 0.165 seconds)