Síntese da Operação

Para realizar a síntese da operação de um caso do NEWAVE é necessário estar em um diretório no qual estão os principais arquivos de saída do modelo. Em geral, as variáveis da operação são extraídas das saídas do programa auxiliar NWLISTOP, no modo TABELAS (opção 2). Para a síntese do CMO por submercado, por estágio, são necessários os arquivos cmargXXX-med.out. Para a síntese do EARM para o SIN, é necessário o earmfsin.out. 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 dger.dat, ree.dat e sistema.dat. Neste contexto, basta fazer:

$ sintetizador-newave operacao --processadores 4

O sintetizador irá exibir o log da sua execução:

>>> 2024-04-22 09:53:56,845 INFO: # Realizando síntese da OPERACAO #
>>> .
>>> .
>>> .
>>> 2024-07-16 17:33:36,613 INFO: Realizando sintese de VEVAP_UHE
>>> 2024-07-16 17:33:36,615 INFO: Tempo para compactacao dos dados: 0.00 s
>>> 2024-07-16 17:33:36,616 INFO: Tempo para calculo dos limites: 0.00 s
>>> 2024-07-16 17:33:36,640 INFO: Tempo para armazenamento na cache: 0.00 s
>>> 2024-07-16 17:33:36,641 INFO: Tempo para preparacao para exportacao: 0.02 s
>>> 2024-07-16 17:33:36,646 INFO: Tempo para exportacao dos dados: 0.01 s
>>> 2024-07-16 17:33:36,647 INFO: Tempo para sintese de VEVAP_UHE: 0.03 s
>>> 2024-07-16 17:33:36,647 INFO: Realizando sintese de VEVAP_REE
>>> 2024-07-16 17:33:36,649 INFO: Tempo para compactacao dos dados: 0.00 s
>>> 2024-07-16 17:33:36,650 INFO: Tempo para calculo dos limites: 0.00 s
>>> 2024-07-16 17:33:36,676 INFO: Tempo para preparacao para exportacao: 0.03 s
>>> 2024-07-16 17:33:36,681 INFO: Tempo para exportacao dos dados: 0.01 s
>>> 2024-07-16 17:33:36,682 INFO: Tempo para sintese de VEVAP_REE: 0.03 s
>>> 2024-07-16 17:33:36,682 INFO: Realizando sintese de VEVAP_SBM
>>> 2024-07-16 17:33:36,684 INFO: Tempo para compactacao dos dados: 0.00 s
>>> 2024-07-16 17:33:36,684 INFO: Tempo para calculo dos limites: 0.00 s
>>> 2024-07-16 17:33:36,706 INFO: Tempo para preparacao para exportacao: 0.02 s
>>> 2024-07-16 17:33:36,711 INFO: Tempo para exportacao dos dados: 0.01 s
>>> 2024-07-16 17:33:36,712 INFO: Tempo para sintese de VEVAP_SBM: 0.03 s
>>> 2024-07-16 17:33:36,712 INFO: Realizando sintese de VEVAP_SIN
>>> 2024-07-16 17:33:36,714 INFO: Tempo para compactacao dos dados: 0.00 s
>>> 2024-07-16 17:33:36,714 INFO: Tempo para calculo dos limites: 0.00 s
>>> 2024-07-16 17:33:36,738 INFO: Tempo para preparacao para exportacao: 0.02 s
>>> 2024-07-16 17:33:36,743 INFO: Tempo para exportacao dos dados: 0.00 s
>>> 2024-07-16 17:33:36,743 INFO: Tempo para sintese de VEVAP_SIN: 0.03 s
>>> 2024-07-16 17:33:39,162 INFO: Tempo para sintese da operacao: 36.47 s
>>> 2024-07-16 17:33:39,187 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 plotly.graph_objects as go
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   VAGUA_REE               VAGUA  ...     False    False
2   VAGUA_UHE               VAGUA  ...     False    False
3  VAGUAI_UHE   VAGUA Incremental  ...     False    False
4    CTER_SBM         Custo de GT  ...     False    False
5    CTER_SIN         Custo de GT  ...     False    False
6     COP_SIN               COPER  ...     False    False
7    ENAA_REE                 ENA  ...     False    False
8    ENAA_SBM                 ENA  ...     False    False
9    ENAA_SIN                 ENA  ...     False    False

[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")
earmf = pd.read_parquet("sintese/EARMF_SIN.parquet")
varmf = pd.read_parquet("sintese/VARMF_UHE.parquet")

O formato dos dados de CMO:

print(cmo.head(10))
   codigo_submercado  estagio  ... limite_inferior limite_superior
0                  1        1  ...            -inf             inf
1                  1        1  ...            -inf             inf
2                  1        1  ...            -inf             inf
3                  1        1  ...            -inf             inf
4                  1        1  ...            -inf             inf
5                  1        1  ...            -inf             inf
6                  1        1  ...            -inf             inf
7                  1        1  ...            -inf             inf
8                  1        1  ...            -inf             inf
9                  1        1  ...            -inf             inf

[10 rows x 10 columns]

Os tipos de dados da síntese de CMO:

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 EARMF:

print(earmf.head(10))
    estagio               data_inicio  ... limite_inferior  limite_superior
0         1 2023-10-01 00:00:00+00:00  ...         61712.0         292509.0
2         1 2023-10-01 00:00:00+00:00  ...         61712.0         292509.0
3         1 2023-10-01 00:00:00+00:00  ...         61712.0         292509.0
4         1 2023-10-01 00:00:00+00:00  ...         61712.0         292509.0
5         1 2023-10-01 00:00:00+00:00  ...         61712.0         292509.0
6         1 2023-10-01 00:00:00+00:00  ...         61712.0         292509.0
1         1 2023-10-01 00:00:00+00:00  ...         61712.0         292509.0
31        2 2023-11-01 00:00:00+00:00  ...         61724.0         292574.0
32        2 2023-11-01 00:00:00+00:00  ...         61724.0         292574.0
33        2 2023-11-01 00:00:00+00:00  ...         61724.0         292574.0

[10 rows x 9 columns]

Os tipos de dados da síntese de EARMF:

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 VARMF:

print(varmf.head(10))
    codigo_usina  codigo_ree  ...  limite_inferior  limite_superior
0              1          10  ...            120.0            792.0
1              1          10  ...            120.0            792.0
2              1          10  ...            120.0            792.0
3              1          10  ...            120.0            792.0
4              1          10  ...            120.0            792.0
5              1          10  ...            120.0            792.0
6              1          10  ...            120.0            792.0
30             1          10  ...            120.0            792.0
31             1          10  ...            120.0            792.0
32             1          10  ...            120.0            792.0

[10 rows x 12 columns]

Os tipos de dados da síntese de VARMF:

codigo_usina                       int64
codigo_ree                         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

De modo geral, os arquivos das sínteses de operação sempre possuem as colunas estagio, data_inicio, data_fim, cenario, patamar e valor. A depender se o arquivo é relativo a uma agregação espacial diferente de todo o SIN, 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 submercado.

A coluna de cenários contém somente inteiros de 1 a N, onde N é o número de séries da simulação final do modelo.

cenarios = earmf["cenario"].unique().tolist()
print(cenarios)
[1, 3, 4, 5, 6, 7, 2]

Através das estatísticas é possível fazer um gráfico de caixas, para ilustrar a dispersão da variável da operação com os cenários:

fig = px.box(earmf, x="data_inicio", y="valor")
fig


Para variáveis da operação que possuam diferentes subconjuntos, como os submercados, podem ser utilizados gráficos de violino para avaliação da dispersão:

cmos_2omes = cmo.loc[cmo["estagio"] == 2]
fig = px.violin(
    cmos_2omes,
    y="valor",
    color="codigo_submercado",
    box=True,
)
fig


Para dados por UHE, como o número de subconjuntos é muito grande, é possível fazer um subconjunto dos elementos de interesse para a visualização:

varmf_1oano = varmf.loc[
    (varmf["estagio"] <= 12) & varmf["codigo_usina"].isin([6, 169, 251, 275])
]
fig = px.box(
    varmf_1oano,
    x="data_inicio",
    y="valor",
    facet_col_wrap=2,
    facet_col="codigo_usina",
)
fig


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:

estatisticas = pd.read_parquet("sintese/ESTATISTICAS_OPERACAO_UHE.parquet")
print(estatisticas.head(10))
  variavel  estagio  ... limite_inferior limite_superior
0    VAGUA        1  ...            -inf             inf
1   VAGUAI        1  ...            -inf             inf
2     VTUR        1  ...             0.0          562.82
3     VVER        1  ...             0.0             inf
4     QTUR        1  ...             0.0          214.00
5     QVER        1  ...             0.0             inf
6     QAFL        1  ...             0.0             inf
7     QINC        1  ...            -inf             inf
8     VAFL        1  ...             0.0             inf
9     VINC        1  ...            -inf             inf

[10 rows x 13 columns]

As informações dos arquivos de estatísticas são:

Index(['variavel', 'estagio', 'data_inicio', 'data_fim', 'cenario', 'patamar',
       'duracao_patamar', 'valor', 'codigo_usina', 'codigo_ree',
       'codigo_submercado', 'limite_inferior', 'limite_superior'],
      dtype='object')

Um arquivo único é gerado para as estatísticas de todas as variáveis, agregadas por cada elemento do sistema.:

print(estatisticas["variavel"].unique())
<StringArray>
[   'VAGUA',   'VAGUAI',     'VTUR',     'VVER',     'QTUR',     'QVER',
     'QAFL',     'QINC',     'VAFL',     'VINC',     'QDEF',     'VDEF',
     'VRET',     'VDES',     'QRET',     'QDES',    'VARMF',    'VARMI',
    'VARPF',    'VARPI',     'GHID',   'VGHMIN',    'VFPHA',     'HMON',
     'HJUS',     'HLIQ',     'VEVP', 'VPOSEVAP', 'VNEGEVAP',    'VEVAP']
Length: 30, dtype: string

As estatísticas disponíveis são os valores mínimos, máximos, médios e quantis a cada 5 percentis para cada variável de cada elemento de sistema. No caso das UHEs:

print(estatisticas["cenario"].unique())
['max' 'mean' 'median' 'min' 'p10' 'p15' 'p20' 'p25' 'p30' 'p35' 'p40'
 'p45' 'p5' 'p55' 'p60' 'p65' 'p70' 'p75' 'p80' 'p85' 'p90' 'p95' 'std']

Total running time of the script: (0 minutes 0.618 seconds)

Gallery generated by Sphinx-Gallery