.. DO NOT EDIT. .. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY. .. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE: .. "examples/plot_restricoes_eletricas.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_restricoes_eletricas.py: ===================================================== Processamento das restrições elétricas (CSV) ===================================================== .. GENERATED FROM PYTHON SOURCE LINES 8-9 Para realizar o processamento do restricao-eletrica.csv, será utilizado o módulo plotly .. GENERATED FROM PYTHON SOURCE LINES 9-18 .. code-block:: Python import re import pandas as pd import plotly.express as px import plotly.io as pio pio.templates.default = "ggplot2" .. GENERATED FROM PYTHON SOURCE LINES 19-23 O restricao-eletrica.csv é um arquivo de entrada das LIBS que contém as restrições elétricas do sistema, incluindo fórmulas, períodos de validade e limites por patamar. Para processar a sua informação, o usuário deve importar a classe `Restricoes`, que contém todos os métodos necessários .. GENERATED FROM PYTHON SOURCE LINES 23-28 .. code-block:: Python from inewave.libs import Restricoes arq_restricoes = Restricoes.read("./libs/restricao-eletrica.csv") .. GENERATED FROM PYTHON SOURCE LINES 29-33 A implementação de todos os arquivos das LIBS segue o formato de arquivos por registro, contendo informações em linhas de comentários e com delimitador ';'. Além disso, a primeira coluna sempre identifica qual o registro cadastrado na linha em questão. O número total de colunas em cada linha é variável, de acordo com o valor da primeira coluna. .. GENERATED FROM PYTHON SOURCE LINES 35-38 **Análise das fórmulas de restrições elétricas (RE)** Estão disponíveis métodos para cada registro, com argumentos opcionais para realizar filtros nos objetos a serem processados .. GENERATED FROM PYTHON SOURCE LINES 38-70 .. code-block:: Python restricoes_re = arq_restricoes.re(df=True) print(f"Total de restrições RE: {len(restricoes_re)}") print("Colunas:", list(restricoes_re.columns)) print("\nPrimeiras restrições:") print(restricoes_re.head()) # Análise dos componentes das fórmulas usinas_hidr = [] intercambios = [] for formula in restricoes_re["formula"]: # Buscar referências a usinas hidrelétricas uh_matches = re.findall(r"ger_usih\((\d+)\)", formula) usinas_hidr.extend([int(uh) for uh in uh_matches]) # Buscar referências a intercâmbios int_matches = re.findall(r"ener_interc\((\d+),(\d+)\)", formula) intercambios.extend([(int(orig), int(dest)) for orig, dest in int_matches]) print("\nComponentes encontrados:") print(f"- Usinas hidrelétricas: {len(set(usinas_hidr))}") print(f"- Intercâmbios: {len(set(intercambios))}") # Visualização fig = px.bar( x=restricoes_re["codigo_restricao"], y=[1] * len(restricoes_re), title="Códigos de Restrições Elétricas", labels={"x": "Código da Restrição", "y": "Contagem"}, ) fig .. rst-class:: sphx-glr-script-out .. code-block:: none Total de restrições RE: 6 Colunas: ['codigo_restricao', 'formula'] Primeiras restrições: codigo_restricao formula 0 1 ger_usih(285) + ger_usih(287) 1 20 1.0ener_interc(2,1) + 0.5ger_usih(66) 2 21 1.0ener_interc(11,1) + ger_usih(261)+ ger_usih... 3 22 1.0ener_interc(11,1) + 1.0ener_interc(3,1) + g... 4 23 1.0ener_interc(11,1) + 1.0ener_interc(3,1) + 1... Componentes encontrados: - Usinas hidrelétricas: 7 - Intercâmbios: 4 .. raw:: html


.. GENERATED FROM PYTHON SOURCE LINES 71-73 **Análise dos períodos de validade (RE-HORIZ-PER)** É possível obter os períodos de validade das restrições .. GENERATED FROM PYTHON SOURCE LINES 73-106 .. code-block:: Python horiz_per = None horiz_per = arq_restricoes.re_horiz_per(df=True) print(f"\nPeríodos de validade: {len(horiz_per)}") print("Colunas:", list(horiz_per.columns)) print("\nPrimeiros períodos:") print(horiz_per.head()) # Análise temporal horiz_per_copy = horiz_per.copy() horiz_per_copy["data_inicio_dt"] = pd.to_datetime(horiz_per_copy["data_inicio"]) horiz_per_copy["data_fim_dt"] = pd.to_datetime(horiz_per_copy["data_fim"]) horiz_per_copy["duracao_dias"] = ( horiz_per_copy["data_fim_dt"] - horiz_per_copy["data_inicio_dt"] ).dt.days + 1 print("\nAnálise temporal:") print(f"- Duração média: {horiz_per_copy['duracao_dias'].mean():.1f} dias") print(f"- Duração mínima: {horiz_per_copy['duracao_dias'].min()} dias") print(f"- Duração máxima: {horiz_per_copy['duracao_dias'].max()} dias") # Visualização temporal fig = px.timeline( horiz_per_copy, x_start="data_inicio_dt", x_end="data_fim_dt", y="codigo_restricao", title="Períodos de Validade das Restrições", labels={"codigo_restricao": "Código da Restrição"}, ) fig .. rst-class:: sphx-glr-script-out .. code-block:: none Períodos de validade: 6 Colunas: ['codigo_restricao', 'data_fim', 'data_inicio'] Primeiros períodos: codigo_restricao data_fim data_inicio 0 1 2025-07-01 2025-06-01 1 20 2026-05-01 2025-06-01 2 21 2026-05-01 2025-06-01 3 22 2025-07-01 2025-06-01 4 23 2026-05-01 2025-08-01 Análise temporal: - Duração média: 172.8 dias - Duração mínima: 31 dias - Duração máxima: 335 dias .. raw:: html


.. GENERATED FROM PYTHON SOURCE LINES 107-110 **Edição de registros** É possível realizar a edição dos objetos retornados relacionados a cada registro. Para tal, basta atribuir valores a cada propriedade: .. GENERATED FROM PYTHON SOURCE LINES 110-127 .. code-block:: Python # Exemplo com restrição RE (se dados disponíveis) restricoes_exemplo = arq_restricoes.re(codigo_restricao=1) print(f"\nRestrição original: {restricoes_exemplo.formula}") # Exemplo de modificação (comentado para não alterar dados): # restricoes_exemplo.formula = "ger_usih(285) + ger_usih(287) + ger_usih(300)" print("✓ Fórmula pode ser modificada via propriedade .formula") periodo_exemplo = arq_restricoes.re_horiz_per(codigo_restricao=1) print( f"Período original: {periodo_exemplo.data_inicio} a {periodo_exemplo.data_fim}" ) # Exemplo de modificação (comentado para não alterar dados): # from datetime import datetime # periodo_exemplo.data_fim = datetime(2025, 8, 31) print("✓ Período pode ser modificado via propriedades .data_inicio e .data_fim") .. rst-class:: sphx-glr-script-out .. code-block:: none Restrição original: ger_usih(285) + ger_usih(287) ✓ Fórmula pode ser modificada via propriedade .formula Período original: 2025-06-01 00:00:00 a 2025-07-01 00:00:00 ✓ Período pode ser modificado via propriedades .data_inicio e .data_fim .. rst-class:: sphx-glr-timing **Total running time of the script:** (0 minutes 0.077 seconds) .. _sphx_glr_download_examples_plot_restricoes_eletricas.py: .. only:: html .. container:: sphx-glr-footer sphx-glr-footer-example .. container:: sphx-glr-download sphx-glr-download-jupyter :download:`Download Jupyter notebook: plot_restricoes_eletricas.ipynb ` .. container:: sphx-glr-download sphx-glr-download-python :download:`Download Python source code: plot_restricoes_eletricas.py ` .. container:: sphx-glr-download sphx-glr-download-zip :download:`Download zipped: plot_restricoes_eletricas.zip ` .. only:: html .. rst-class:: sphx-glr-signature `Gallery generated by Sphinx-Gallery `_