Está en la página 1de 5

Análisis de Autogeneración y Generación Distribuida - Colombia

2023/2024

January 23, 2024

1 Análisis de Autogeneración y Generación Distribuida


Autor: Juan Camilo Jaramillo Tascón: https://www.linkedin.com/in/juancjaramillot/

[ ]: #pip install pydataxm

[2]: from pydataxm import *


import datetime as dt
import pandas as pd

[3]: objetoAPI = pydataxm.ReadDB()

1.1 Generación por Recurso y Listado de Recursos


[4]: df =objetoAPI.get_collections("Gene")
df.head()

[4]: MetricId MetricName Entity MaxDays Type \


4 Gene Generación por Sistema Sistema 31 HourlyEntities
9 Gene Generación por Recurso Recurso 31 HourlyEntities

Url Filter \
4 http://servapibi.xm.com.co/hourly No aplica
9 http://servapibi.xm.com.co/hourly Codigo Submercado Generación

MetricUnits MetricDescription
4 kWh Generacion neta de cada una de las plantas Nac...
9 kWh Generacion neta de cada una de las plantas Nac...

[5]: df =objetoAPI.get_collections("ListadoRecursos")
df.head()

[5]: MetricId MetricName \


180 ListadoRecursos plantas y unidades que tiene asociadas un agen...
181 ListadoRecursos Listado Recursos con atributos por Sistema

1
Entity MaxDays Type Url \
180 Agente 731 ListsEntities http://servapibi.xm.com.co/list
181 Sistema 731 ListsEntities http://servapibi.xm.com.co/list

Filter MetricUnits MetricDescription


180 No aplica Listado de recursos y unidades que pertenecen ...
181 No aplica Listado de recursos con sus atributos y que se...

[ ]: df_gene = objetoAPI.request_data(
"Gene",
"Recurso",
dt.date(2023, 1, 1),
dt.date(2024, 1, 22))

df_gene['GenDia_MWh'] = round(
df_gene.sum(axis=1, numeric_only=True).div(10**3),2)
#df_gene.head()

[ ]: df_recurso = objetoAPI.request_data(
"ListadoRecursos",
"Sistema",
dt.date(2023, 1, 1),
dt.date(2024, 1, 22))

df_recurso.drop(columns=['Date'], inplace=True)
#df_recurso.head()

1.2 Procesamiento de información


[8]: df_ag_gd = pd.merge(
df_gene[['Date', 'GenDia_MWh', 'Values_code']],
df_recurso[['Values_Code', 'Values_RecType', 'Values_Name',
'Values_Type', 'Values_Disp', 'Values_EnerSource']],
left_on='Values_code',
right_on='Values_Code',
how='outer'
)

df_ag_gd = df_ag_gd[df_ag_gd['Values_RecType'].isin(['GEN. DISTRIBUIDA',


'AUTOGENERADOR',
'AUTOG PEQ. ESCALA'])]
df_ag_gd = df_ag_gd.fillna(0)
df_ag_gd = df_ag_gd.query('Date != 0')
df_ag_gd.drop(columns=['Values_code'], inplace=True)
df_ag_gd

2
[8]: Date GenDia_MWh Values_Code Values_RecType \
366 2023-01-01 00:00:00 15.64 2QRL GEN. DISTRIBUIDA
367 2023-01-02 00:00:00 15.79 2QRL GEN. DISTRIBUIDA
368 2023-01-03 00:00:00 15.78 2QRL GEN. DISTRIBUIDA
369 2023-01-04 00:00:00 15.76 2QRL GEN. DISTRIBUIDA
370 2023-01-05 00:00:00 15.00 2QRL GEN. DISTRIBUIDA
... ... ... ... ...
87366 2024-01-16 00:00:00 5.64 3IJF AUTOGENERADOR
87367 2024-01-17 00:00:00 10.35 3IJF AUTOGENERADOR
87368 2024-01-18 00:00:00 4.71 3IJF AUTOGENERADOR
87369 2024-01-19 00:00:00 2.07 3IJF AUTOGENERADOR
87370 2024-01-20 00:00:00 2.87 3IJF AUTOGENERADOR

Values_Name Values_Type Values_Disp \


366 LA REBUSCA HIDRAULICA NO DESPACHADO CENTRALMENTE
367 LA REBUSCA HIDRAULICA NO DESPACHADO CENTRALMENTE
368 LA REBUSCA HIDRAULICA NO DESPACHADO CENTRALMENTE
369 LA REBUSCA HIDRAULICA NO DESPACHADO CENTRALMENTE
370 LA REBUSCA HIDRAULICA NO DESPACHADO CENTRALMENTE
... ... ... ...
87366 AUTOG COSTAYACO TERMICA NO DESPACHADO CENTRALMENTE
87367 AUTOG COSTAYACO TERMICA NO DESPACHADO CENTRALMENTE
87368 AUTOG COSTAYACO TERMICA NO DESPACHADO CENTRALMENTE
87369 AUTOG COSTAYACO TERMICA NO DESPACHADO CENTRALMENTE
87370 AUTOG COSTAYACO TERMICA NO DESPACHADO CENTRALMENTE

Values_EnerSource
366 AGUA
367 AGUA
368 AGUA
369 AGUA
370 AGUA
... ...
87366 GAS
87367 GAS
87368 GAS
87369 GAS
87370 GAS

[17240 rows x 8 columns]

[9]: df_pivot = df_ag_gd.pivot_table(


values='GenDia_MWh',
columns='Values_RecType',
aggfunc='sum',
index='Date'
)

3
df_pivot

[9]: Values_RecType AUTOG PEQ. ESCALA AUTOGENERADOR GEN. DISTRIBUIDA


Date
2023-01-01 0.03 1156.24 168.15
2023-01-02 0.02 999.08 169.35
2023-01-03 0.03 968.83 155.45
2023-01-04 0.03 991.53 177.72
2023-01-05 2.67 989.13 183.63
... ... ... ...
2024-01-16 25.77 1262.98 175.90
2024-01-17 29.19 1222.32 160.16
2024-01-18 33.77 1232.99 153.02
2024-01-19 36.52 1274.59 153.01
2024-01-20 31.48 1170.32 157.75

[385 rows x 3 columns]

1.3 Visualización de información - Serie de tiempo diaria


[10]: import matplotlib.pyplot as plt
import seaborn as sns

# Configurar el estilo de Seaborn (opcional)


sns.set(style="darkgrid")
color_palette = ['cyan', 'orange', 'purple']

# Crear el gráfico de serie temporal


plt.figure(figsize=(12, 4)) # Ajusta el tamaño del gráfico según tus necesidades

sns.lineplot(x='Date', y='AUTOG PEQ. ESCALA', data=df_pivot,


label='AUTOG PEQ. ESCALA', color=color_palette[0])
sns.lineplot(x='Date', y='AUTOGENERADOR', data=df_pivot,
label='AUTOGENERADOR', color=color_palette[1])
sns.lineplot(x='Date', y='GEN. DISTRIBUIDA', data=df_pivot,
label='GEN. DISTRIBUIDA', color=color_palette[2])

# Configurar el eje x para que muestre fechas de manera adecuada (opcional)


plt.xticks(rotation=45, ha='right')

# Configurar la leyenda y título del gráfico


plt.legend()
plt.title('Energía generada por Tipo de recurso')
plt.xlabel('Fecha')
plt.ylabel('MWh')

4
# Mostrar el gráfico
plt.show()

Autor: Juan Camilo Jaramillo Tascón: https://www.linkedin.com/in/juancjaramillot/

También podría gustarte