.. DO NOT EDIT. .. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY. .. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE: .. "examples/plot_energiaf.py" .. LINE NUMBERS ARE GIVEN BELOW. .. only:: html .. note:: :class: sphx-glr-download-link-note :ref:`Go to the end ` to download the full example code. .. rst-class:: sphx-glr-example-title .. _sphx_glr_examples_plot_energiaf.py: ========================================================== Análise das séries sintéticas de energia afluente ========================================================== .. GENERATED FROM PYTHON SOURCE LINES 9-15 Os arquivos energiafXXX.dat contêm as séries sintéticas de energia natural afluente geradas pelo modelo NEWAVE durante a simulação forward. Estes arquivos são fundamentais para análise de cenários hidrológicos e avaliação da variabilidade energética do sistema. IMPORTANTE: Foi gerado um arquivo energiaf.dat reduzido utlizando o próprio módulo `inewave` para fins de demonstração com apenas 1 REE. Em um caso real, utilize o arquivo gerado pelo NEWAVE. .. GENERATED FROM PYTHON SOURCE LINES 15-26 .. code-block:: Python import plotly.express as px import plotly.io as pio from inewave.newave import Energiaf pio.templates.default = "ggplot2" # Leitura do arquivo energiaf arq_energiaf = Energiaf.read("./newave/energiaf.dat") .. GENERATED FROM PYTHON SOURCE LINES 27-32 **Configuração da leitura de arquivos binários** IMPORTANTE: Os arquivos energiaf são binários e requerem configuração específica baseada nas dimensões do estudo. Estes parâmetros normalmente vêm do arquivo forwarh.dat ou são conhecidos do caso de estudo: .. GENERATED FROM PYTHON SOURCE LINES 32-45 .. code-block:: Python # Exemplo de configuração típica (ajustar conforme o caso) numero_forwards = 200 # Número de séries forward numero_rees = 12 # Número de REEs numero_estagios = 60 # Número de estágios de planejamento numero_estagios_th = 12 # Número de estágios considerados para tendência hidrológica (6 ou 12 geralmente) print("Configuração da leitura:") print(f"- Séries forward: {numero_forwards}") print(f"- REEs: {numero_rees}") print(f"- Estágios: {numero_estagios}") print(f"- Estágios térmicos: {numero_estagios_th}") .. rst-class:: sphx-glr-script-out .. code-block:: none Configuração da leitura: - Séries forward: 200 - REEs: 12 - Estágios: 60 - Estágios térmicos: 12 .. GENERATED FROM PYTHON SOURCE LINES 46-49 **Estrutura dos dados de energia** As séries sintéticas são organizadas por estágio, REE e série forward: .. GENERATED FROM PYTHON SOURCE LINES 49-58 .. code-block:: Python series = arq_energiaf.series print(f"Total de registros de energia: {len(series)}") print("\nPrimeiros registros:") print(series.head()) print("\nEstatísticas básicas:") print(series.describe()) .. rst-class:: sphx-glr-script-out .. code-block:: none Total de registros de energia: 172800 Primeiros registros: estagio ree serie valor 0 -11 1 1 7274.313246 1 -11 1 2 11945.751618 2 -11 1 3 7437.112877 3 -11 1 4 7687.093101 4 -11 1 5 7788.548023 Estatísticas básicas: estagio ree serie valor count 172800.000000 172800.000000 172800.000000 56.000000 mean 24.500000 6.500000 100.500000 6303.242902 std 20.782665 3.452063 57.734472 2534.614664 min -11.000000 1.000000 1.000000 3134.981601 25% 6.750000 3.750000 50.750000 3961.181539 50% 24.500000 6.500000 100.500000 5635.625119 75% 42.250000 9.250000 150.250000 7687.093101 max 60.000000 12.000000 200.000000 11945.751618 .. GENERATED FROM PYTHON SOURCE LINES 59-62 **Análise por REE (Reservatório Equivalente de Energia)** Análise da distribuição de energia por REE: .. GENERATED FROM PYTHON SOURCE LINES 62-78 .. code-block:: Python print("Distribuição de energia por REE:") energia_por_ree = ( series.groupby("ree") .agg({"valor": ["count", "mean", "std", "min", "max"]}) .round(2) ) energia_por_ree.columns = [ "registros", "media", "desvio", "minimo", "maximo", ] print(energia_por_ree) .. rst-class:: sphx-glr-script-out .. code-block:: none Distribuição de energia por REE: registros media desvio minimo maximo ree 1 56 6303.24 2534.61 3134.98 11945.75 2 0 NaN NaN NaN NaN 3 0 NaN NaN NaN NaN 4 0 NaN NaN NaN NaN 5 0 NaN NaN NaN NaN 6 0 NaN NaN NaN NaN 7 0 NaN NaN NaN NaN 8 0 NaN NaN NaN NaN 9 0 NaN NaN NaN NaN 10 0 NaN NaN NaN NaN 11 0 NaN NaN NaN NaN 12 0 NaN NaN NaN NaN .. GENERATED FROM PYTHON SOURCE LINES 79-82 **Análise temporal das séries** Avaliando a evolução da energia ao longo dos estágios: .. GENERATED FROM PYTHON SOURCE LINES 82-122 .. code-block:: Python # Energia média por estágio energia_por_estagio = ( series.groupby("estagio")["valor"].agg(["mean", "std"]).reset_index() ) print("Energia média por estágio (primeiros 10 estágios):") print(energia_por_estagio.head(10)) # Gráfico da evolução temporal fig = px.line( energia_por_estagio, x="estagio", y="mean", title="Evolução da Energia Afluente Média por Estágio", labels={"mean": "Energia Média (MWmes)", "estagio": "Estágio"}, ) fig.add_scatter( x=energia_por_estagio["estagio"], y=energia_por_estagio["mean"] + energia_por_estagio["std"], mode="lines", line=dict(width=0), showlegend=False, hovertemplate=None, hoverinfo="skip", ) fig.add_scatter( x=energia_por_estagio["estagio"], y=energia_por_estagio["mean"] - energia_por_estagio["std"], mode="lines", line=dict(width=0), fill="tonexty", fillcolor="rgba(0,100,80,0.2)", name="±1 Desvio Padrão", hovertemplate=None, hoverinfo="skip", ) fig .. rst-class:: sphx-glr-script-out .. code-block:: none Energia média por estágio (primeiros 10 estágios): estagio mean std 0 -11 6303.242902 2534.614664 1 -10 NaN NaN 2 -9 NaN NaN 3 -8 NaN NaN 4 -7 NaN NaN 5 -6 NaN NaN 6 -5 NaN NaN 7 -4 NaN NaN 8 -3 NaN NaN 9 -2 NaN NaN .. raw:: html


.. GENERATED FROM PYTHON SOURCE LINES 123-126 **Análise de variabilidade entre séries** Comparando diferentes séries forward para avaliar a incerteza hidrológica: .. GENERATED FROM PYTHON SOURCE LINES 126-150 .. code-block:: Python # Selecionando um REE específico para análise detalhada ree_analise = 1 series_ree = series[series["ree"] == ree_analise] if len(series_ree) > 0: print(f"Análise de variabilidade - REE {ree_analise}:") # Estatísticas por série stats_por_serie = ( series_ree.groupby("serie")["valor"].agg(["mean", "std"]).reset_index() ) print("Estatísticas das séries forward:") print( f"- Energia média entre séries: {stats_por_serie['mean'].mean():.1f} MWmes" ) print( f"- Desvio padrão entre médias: {stats_por_serie['mean'].std():.1f} MWmes" ) print( f"- Coeficiente de variação: {stats_por_serie['mean'].std() / stats_por_serie['mean'].mean() * 100:.1f}%" ) .. rst-class:: sphx-glr-script-out .. code-block:: none Análise de variabilidade - REE 1: Estatísticas das séries forward: - Energia média entre séries: 6303.2 MWmes - Desvio padrão entre médias: 2534.6 MWmes - Coeficiente de variação: 40.2% .. GENERATED FROM PYTHON SOURCE LINES 151-154 **Análise sazonal** Identificando padrões sazonais nas séries sintéticas: .. GENERATED FROM PYTHON SOURCE LINES 154-196 .. code-block:: Python # Assumindo que os estágios representam meses (ajustar conforme necessário) series_com_mes = series.copy() series_com_mes["mes"] = ((series_com_mes["estagio"] - 1) % 12) + 1 # Energia média por mês energia_mensal = ( series_com_mes.groupby("mes")["valor"].agg(["mean", "std"]).reset_index() ) meses_nomes = [ "Jan", "Fev", "Mar", "Abr", "Mai", "Jun", "Jul", "Ago", "Set", "Out", "Nov", "Dez", ] energia_mensal["mes_nome"] = energia_mensal["mes"].map( lambda x: meses_nomes[x - 1] ) print("Padrão sazonal da energia afluente:") print(energia_mensal[["mes_nome", "mean", "std"]].round(1)) # Gráfico sazonal fig = px.bar( energia_mensal, x="mes_nome", y="mean", error_y="std", title="Padrão Sazonal da Energia Afluente", labels={"mean": "Energia Média (MWmes)", "mes_nome": "Mês"}, ) fig .. rst-class:: sphx-glr-script-out .. code-block:: none Padrão sazonal da energia afluente: mes_nome mean std 0 Jan 6303.2 2534.6 1 Fev NaN NaN 2 Mar NaN NaN 3 Abr NaN NaN 4 Mai NaN NaN 5 Jun NaN NaN 6 Jul NaN NaN 7 Ago NaN NaN 8 Set NaN NaN 9 Out NaN NaN 10 Nov NaN NaN 11 Dez NaN NaN .. raw:: html


.. GENERATED FROM PYTHON SOURCE LINES 197-200 **Análise de cenários extremos** Identificando cenários de energia alta e baixa: .. GENERATED FROM PYTHON SOURCE LINES 200-219 .. code-block:: Python # Energia total por série (somando todos os REEs e estágios) energia_total_serie = series.groupby("serie")["valor"].sum().reset_index() energia_total_serie = energia_total_serie.sort_values("valor") # Identificando cenários extremos p10 = energia_total_serie["valor"].quantile(0.10) p90 = energia_total_serie["valor"].quantile(0.90) cenarios_secos = energia_total_serie[energia_total_serie["valor"] <= p10] cenarios_umidos = energia_total_serie[energia_total_serie["valor"] >= p90] print("Análise de cenários extremos:") print(f"Cenários secos (≤P10): {len(cenarios_secos)} séries") print(f"Cenários úmidos (≥P90): {len(cenarios_umidos)} séries") print(f"Energia P10: {p10:.0f} MWmes") print(f"Energia P90: {p90:.0f} MWmes") print(f"Relação P90/P10: {p90 / p10:.2f}") .. rst-class:: sphx-glr-script-out .. code-block:: none Análise de cenários extremos: Cenários secos (≤P10): 144 séries Cenários úmidos (≥P90): 22 séries Energia P10: 0 MWmes Energia P90: 7274 MWmes /home/runner/work/inewave/inewave/examples/plot_energiaf.py:217: RuntimeWarning: divide by zero encountered in scalar divide Relação P90/P10: inf .. GENERATED FROM PYTHON SOURCE LINES 220-223 **Comparação entre REEs** Analisando correlações e diferenças entre REEs: .. GENERATED FROM PYTHON SOURCE LINES 223-245 .. code-block:: Python # Criando matriz REE x série para análise de correlação pivot_energia = series.pivot_table( index=["serie", "estagio"], columns="ree", values="valor" ) if len(pivot_energia.columns) > 1: # Matriz de correlação entre REEs correlacao_rees = pivot_energia.corr() print("Correlação entre REEs (primeiros 5x5):") print(correlacao_rees.iloc[:5, :5].round(3)) # Contribuição de cada REE para o total contrib_ree = series.groupby("ree")["valor"].sum() contrib_ree_pct = (contrib_ree / contrib_ree.sum() * 100).round(1) print("\nContribuição percentual por REE:") for ree, pct in contrib_ree_pct.items(): print(f"REE {ree}: {pct}%") .. GENERATED FROM PYTHON SOURCE LINES 246-249 **Processamento de dados para análises externas** Preparando dados para exportação ou análises complementares: .. GENERATED FROM PYTHON SOURCE LINES 249-288 .. code-block:: Python # Convertendo para formato pivot para análise em planilha energia_pivot = series.pivot_table( index=["estagio"], columns=["ree", "serie"], values="valor" ) print("Formato pivot para exportação:") print(f"Dimensões: {energia_pivot.shape}") print("Colunas (REE, Série):", energia_pivot.columns[:5].tolist()) # Resumo estatístico por REE resumo_ree = ( series.groupby("ree")["valor"] .agg([ "count", "mean", "std", "min", "max", lambda x: x.quantile(0.1), # P10 lambda x: x.quantile(0.5), # P50 lambda x: x.quantile(0.9), # P90 ]) .round(2) ) resumo_ree.columns = [ "registros", "media", "desvio", "minimo", "maximo", "P10", "P50", "P90", ] print("\nResumo estatístico por REE:") print(resumo_ree) .. rst-class:: sphx-glr-script-out .. code-block:: none Formato pivot para exportação: Dimensões: (1, 56) Colunas (REE, Série): [(1, 1), (1, 2), (1, 3), (1, 4), (1, 5)] Resumo estatístico por REE: registros media desvio minimo maximo P10 P50 P90 ree 1 56 6303.24 2534.61 3134.98 11945.75 3465.22 5635.63 10097.14 2 0 NaN NaN NaN NaN NaN NaN NaN 3 0 NaN NaN NaN NaN NaN NaN NaN 4 0 NaN NaN NaN NaN NaN NaN NaN 5 0 NaN NaN NaN NaN NaN NaN NaN 6 0 NaN NaN NaN NaN NaN NaN NaN 7 0 NaN NaN NaN NaN NaN NaN NaN 8 0 NaN NaN NaN NaN NaN NaN NaN 9 0 NaN NaN NaN NaN NaN NaN NaN 10 0 NaN NaN NaN NaN NaN NaN NaN 11 0 NaN NaN NaN NaN NaN NaN NaN 12 0 NaN NaN NaN NaN NaN NaN NaN .. GENERATED FROM PYTHON SOURCE LINES 289-290 **Exportação de resultados processados** .. GENERATED FROM PYTHON SOURCE LINES 290-301 .. code-block:: Python # Exemplo de como exportar dados processados print("\nOpções de exportação:") print("1. Séries originais: arq_energiaf.series") print("2. Formato pivot: energia_pivot") print("3. Resumo por REE: resumo_ree") print("4. Energia por estágio: energia_por_estagio") # Para salver em CSV (exemplo): # energia_por_estagio.to_csv('energia_por_estagio.csv', index=False) # resumo_ree.to_csv('resumo_energia_ree.csv') .. rst-class:: sphx-glr-script-out .. code-block:: none Opções de exportação: 1. Séries originais: arq_energiaf.series 2. Formato pivot: energia_pivot 3. Resumo por REE: resumo_ree 4. Energia por estágio: energia_por_estagio .. rst-class:: sphx-glr-timing **Total running time of the script:** (0 minutes 0.521 seconds) .. _sphx_glr_download_examples_plot_energiaf.py: .. only:: html .. container:: sphx-glr-footer sphx-glr-footer-example .. container:: sphx-glr-download sphx-glr-download-jupyter :download:`Download Jupyter notebook: plot_energiaf.ipynb ` .. container:: sphx-glr-download sphx-glr-download-python :download:`Download Python source code: plot_energiaf.py ` .. container:: sphx-glr-download sphx-glr-download-zip :download:`Download zipped: plot_energiaf.zip ` .. only:: html .. rst-class:: sphx-glr-signature `Gallery generated by Sphinx-Gallery `_