### Example Hourly Request with Filters Source: https://github.com/equipoanaliticaxm/api_xm/blob/master/README.md An example demonstrating how to make a POST request to the hourly endpoint with specific filters for 'Recurso'. ```http POST: https://servapibi.xm.com.co/hourly Body: {"MetricId": "Gene", "StartDate":"2022-09-01", "EndDate":"2022-09-02", "Entity": "Recurso", "Filter":["TBST","GVIO"]} ``` -------------------------------- ### Install pydataxm Source: https://github.com/equipoanaliticaxm/api_xm/blob/master/README.md Command to install the pydataxm library using pip. ```console pip install pydataxm ``` -------------------------------- ### Querying Available Metrics Source: https://github.com/equipoanaliticaxm/api_xm/blob/master/README.md Demonstrates how to get a list of available metrics from the XM API using Python. ```python from pydataxm.pydataxm import ReadDB # Construir la clase que contiene los métodos de pydataxm objetoAPI = pydataxm.ReadDB() objetoAPI.get_collections() ``` -------------------------------- ### Querying Projections of Quantities and Prices Source: https://github.com/equipoanaliticaxm/api_xm/blob/master/examples/pydatasimem/estadisticas_contratos/proyecciones_cantidades_precios_mercado_regulado_top_agentes.ipynb This code snippet shows how to instantiate the ReadSIMEM class with a specific dataset ID, start date, and end date to fetch projected quantities and prices for energy contracts in the regulated market. ```python id_dataset = '8d10e6' # ID del conjunto de datos a consultar fecha_inicial = '2025-06-01' # Fecha de inicio del rango de consulta fecha_final = '2030-05-31' # Fecha de fin del rango de consulta simem = ReadSIMEM(dataset_id=id_dataset, start_date=fecha_inicial, end_date=fecha_final) # Instancia de la clase ReadSIMEM con los parámetros definidos df_dataset = simem.main() # Ejecución del método principal para obtener los datos en un DataFrame df_dataset.head(5) # Visualización de las primeras 20 filas del DataFrame ``` -------------------------------- ### Example Usage - Real Generation Data Source: https://github.com/equipoanaliticaxm/api_xm/blob/master/README.md This snippet demonstrates how to search for a dataset associated with real generation and query it for arbitrary dates without using filters. ```python # Importación from pydataxm.pydatasimem import ReadSIMEM, CatalogSIMEM # Buscar el id del conjunto de datos catalogo = CatalogSIMEM('Datasets') data_catalogo = catalogo.get_data() print(data_catalogo.query("nombreConjuntoDatos.str.contains('Generación Real')")) # Crear una instancia de ReadSIMEM dataset_id = 'E17D25' fecha_inicio = '2024-04-01' fecha_fin = '2024-04-30' generacion = ReadSIMEM(dataset_id, fecha_inicio, fecha_fin) # Recuperar datos data = generacion.main(filter=False) print(data) ``` -------------------------------- ### Instalación de pydataxm Source: https://github.com/equipoanaliticaxm/api_xm/blob/master/examples/pydataxm/PBI_2_pydataxm_Connection_Tutorial.ipynb Comando para instalar la librería pydataxm en el entorno local. ```bash #pip install pydataxm ``` -------------------------------- ### Request to Get Lists of Variables, Crossings, and Filters Source: https://github.com/equipoanaliticaxm/api_xm/blob/master/README.md Example request to the '/lists' endpoint to retrieve the total inventory of variables, crossings, and optional filters. ```http https://servapibi.xm.com.co/lists Body: {"MetricId": "ListadoMetricas"} ``` -------------------------------- ### Instalación e Importación de PyDataSimem Source: https://github.com/equipoanaliticaxm/api_xm/blob/master/examples/pydatasimem/extraccion_datos/visualizacion_datos_pydatasimem.ipynb Instala la biblioteca pydataxm y luego importa la clase ReadSIMEM para interactuar con los conjuntos de datos de SiMEM. ```python import os import sys # !{sys.executable} -m pip install pydataxm from pydataxm.pydatasimem import ReadSIMEM ``` -------------------------------- ### Grid Search Básico para SARIMAX Source: https://github.com/equipoanaliticaxm/api_xm/blob/master/examples/casos_uso_analitica/caso_1_prediccion_precio_bolsa.ipynb Este fragmento de código implementa una búsqueda de cuadrícula para encontrar los parámetros óptimos (p, d, q) y (P, D, Q, s) para un modelo SARIMAX, probando diferentes combinaciones y calculando el MAE para cada una. Se seleccionan los parámetros que resultan en el menor MAE. ```python import itertools from statsmodels.tsa.statespace.sarimax import SARIMAX from sklearn.metrics import mean_absolute_error best_mae = float('inf') best_params = None p =[0,1] d =[1] q =[0] P =[0,1] D =[1] Q =[0] s = 24 # estacionalidad diaria para datos horarios for param in itertools.product(p, d, q): for param_seasonal in itertools.product(P, D, Q): try: model = SARIMAX(pb_nal_filtrado['Valor'], order=param, seasonal_order=param_seasonal + (s,)) results = model.fit(disp=False) forecast = results.get_forecast(steps=24) y_true = pb_nal_filtrado['Valor'][-24:] y_pred = forecast.predicted_mean mae = mean_absolute_error(y_true, y_pred) if mae < best_mae: best_mae = mae best_params = (param, param_seasonal) print(f"SARIMAX{param}x{param_seasonal + (s,)} - MAE: {mae:.2f}") except Exception as e: print(f"Error con SARIMAX{param}x{param_seasonal + (s,)}: {e}") print(f"Mejores parámetros: {best_params}, MAE: {best_mae:.2f}") ``` -------------------------------- ### Get available metrics Source: https://github.com/equipoanaliticaxm/api_xm/blob/master/examples/pydataxm/data_extraction_using_pydataxm.ipynb Retrieves all available metrics that can be queried from the API and displays the first 5. ```python df =objetoAPI.get_collections() #El método get_collection sin argumentos retorna todas las variables que se tienen disponible en la API y que se pueden consultar df.head() #Se presentan como ejemplo las 5 primeras varibles disponibles ``` -------------------------------- ### Importar Librerías Necesarias Source: https://github.com/equipoanaliticaxm/api_xm/blob/master/examples/pydatasimem/informes_operativos/informe_diario_de_operacion/visualizacion_datos_aportes_hidricos.ipynb Importa las librerías requeridas para la lectura de datos de SIMEM y la visualización de gráficos. ```python import sys # !{sys.executable} -m pip install pydataxm from pydataxm.pydatasimem import ReadSIMEM import matplotlib.pyplot as plt ``` -------------------------------- ### Expandir Fechas DataFrame Source: https://github.com/equipoanaliticaxm/api_xm/blob/master/examples/pydatasimem/cargo_por_confiabilidad/valores_cargo_por_confiabilidad_resultados_subastas_reconfiguracion.ipynb Function to create an expanded DataFrame with each day in the range between the start and end obligation dates (charge years). ```python def expandir_fechas(df, start_date, end_date, variables): df_validas = df[df[start_date].notnull() & df[end_date].notnull()].copy() # Se filtran las filas con fechas válidas df_validas["Fecha"] = df_validas.apply( lambda row: pd.date_range(start=row[start_date], end=row[end_date], freq='D'), axis=1 ) df_expandido = df_validas.explode("Fecha") # Se expande el DataFrame return df_expandido[["Fecha"]+variables] # Se seleccionan solo las columnas necesarias ``` -------------------------------- ### Importación de librerías necesarias Source: https://github.com/equipoanaliticaxm/api_xm/blob/master/examples/pydatasimem/cargo_por_confiabilidad/analisis_obligaciones_energia_firme_mensual.ipynb Importa las clases y librerías necesarias para la consulta, manipulación y visualización de datos energéticos. ```python from pydataxm.pydatasimem import ReadSIMEM # Importa clases para interactuar con datos del sistema SIMEM, utilizado para acceder a información energética en Colombia import pandas as pd # Librería para manipulación y análisis de datos en estructuras tipo DataFrame, muy útil para limpiar, transformar y explorar datos import matplotlib.pyplot as plt # Para crear gráficos estáticos como barras, líneas, histogramas, etc. from dateutil.relativedelta import relativedelta ``` -------------------------------- ### Get data with the latest version Source: https://github.com/equipoanaliticaxm/api_xm/blob/master/examples/pydatasimem/extraccion_datos/extraccion_datos_version_variable_simem.ipynb This code snippet retrieves the latest version of the data for the 'Precio de bolsa nacional' variable for each month. The output includes the initialization process and the resulting data in a tabular format. ```python data_ultima_version = variable_ultima_version.get_data() # Obtiene los datos de la variable con ilde{A2}ltima versi ilde{A3}n data_ultima_version ``` -------------------------------- ### Importación de librerías Source: https://github.com/equipoanaliticaxm/api_xm/blob/master/examples/pydatasimem/estadisticas_contratos/proyecciones_cantidades_precios_mercado_regulado_top_agentes.ipynb Importación de las librerías necesarias para la consulta, procesamiento y visualización de datos. ```python import sys from pydataxm.pydatasimem import ReadSIMEM, VariableSIMEM import pandas as pd import datetime as dt from datetime import timedelta import matplotlib.pyplot as plt import seaborn as sns ``` -------------------------------- ### Get data with TXR version Source: https://github.com/equipoanaliticaxm/api_xm/blob/master/examples/pydatasimem/extraccion_datos/extraccion_datos_version_variable_simem.ipynb This code snippet retrieves data for the 'Precio de bolsa nacional' variable specifically for entries with the 'TXR' version. The output shows the initialization process and the resulting data in a tabular format. ```python data_version_TXR = variable_version_TXR.get_data() # Obtiene los datos de la variable con versi ilde{A3}n TXR data_version_TXR ``` -------------------------------- ### Análisis y recomendación de mecanismos de contratación de energía Source: https://github.com/equipoanaliticaxm/api_xm/blob/master/examples/casos_uso_analitica/caso_2_segmentacion_contratacion_mercado_regulado.ipynb Este snippet de código realiza el análisis de datos históricos de mecanismos de contratación de energía, simula escenarios de compra y genera recomendaciones de mecanismo y rango de precios para un comercializador. ```python # Parámetros del comercializador cantidad_requerida = 50000 # kWh fecha_objetivo = pd.to_datetime('2025-09-01') # Filtrar histórico de mecanismos y precios para el mes objetivo df_mes = df_trabajo[df_trabajo['FechaProyectada'] == fecha_objetivo.strftime('%Y-%m-%d')] # Agrupar por mecanismo y calcular PPP promedio y cantidad total resumen_mecanismos = df_mes.groupby('Mecanismo').agg({'PPP':'mean', 'Cantidad':'sum'}).reset_index() print('Resumen histórico por mecanismo:') print(resumen_mecanismos) # Simular recomendación usando el modelo entrenado (Random Forest) # Creamos un DataFrame con la necesidad del comercializador nuevos_contratos = pd.DataFrame({ 'PPP': resumen_mecanismos['PPP'], 'Cantidad': cantidad_requerida }) # Usar el modelo entrenado previamente para predecir mecanismo recomendado recomendaciones = clf.predict(nuevos_contratos[['PPP', 'Cantidad']]) nuevos_contratos['Mecanismo recomendado'] = recomendaciones # Agrupar por mecanismo recomendado y mostrar rango de precios sugerido agrupado = nuevos_contratos.groupby('Mecanismo recomendado').agg(precio_min=('PPP','min'), precio_max=('PPP','max'), cantidad_total=('Cantidad','sum')).reset_index() print('Resumen de recomendaciones por mecanismo:') print(agrupado) ``` -------------------------------- ### Procesamiento de Datos Source: https://github.com/equipoanaliticaxm/api_xm/blob/master/examples/pydatasimem/informes_operativos/informe_diario_de_operacion/visualizacion_datos_aportes_hidricos.ipynb Ejecuta el método main para obtener los datos en DataFrames y muestra las primeras filas de cada DataFrame. ```python df_aportes = dataset_aportes.main() df_reservas = dataset_reservas.main() display(df_aportes.head()) display (df_reservas.head()) ``` -------------------------------- ### Visualización de la recomendación de mecanismo y precio Source: https://github.com/equipoanaliticaxm/api_xm/blob/master/examples/casos_uso_analitica/caso_2_segmentacion_contratacion_mercado_regulado.ipynb Este snippet de código genera una visualización gráfica de las recomendaciones de mecanismo y rango de precios para la compra de energía por parte de un comercializador. ```python # Visualización de la recomendación import matplotlib.colors as mcolors palette = list(mcolors.TABLEAU_COLORS.values())[:len(agrupado)] plt.figure(figsize=(7,5)) ax = sns.barplot(x='Mecanismo recomendado', y='cantidad_total', data=agrupado, width=0.25, palette=palette) for i, row in agrupado.iterrows(): ax.text(i, row['cantidad_total']+1000, f"Precio: {row['precio_min']:.0f}-{row['precio_max']:.0f}", ha='center', va='bottom', fontsize=10, color='black') plt.title('Recomendación de mecanismo y rango de precios (Comercializador)') plt.xlabel('Mecanismo recomendado') plt.ylabel('Cantidad contratada [kWh]') plt.tight_layout() plt.show() ``` -------------------------------- ### Carga de datos de Demanda Comercial por Agente Source: https://github.com/equipoanaliticaxm/api_xm/blob/master/examples/pydataxm/PBI_2_pydataxm_Connection_Tutorial.ipynb Script de Python para cargar y procesar la demanda comercial por agente para un mes específico. ```python from pydataxm import * import datetime as dt objetoAPI = pydataxm.ReadDB() df_demanda = objetoAPI.request_data( "DemaCome", # Se indica el nombre de la métrica tal como se llama en el campo metricId "Agente", # Se indica el nombre de la entidad tal como se llama en el campo Entity dt.date(2022,1,1), # Corresponde a la fecha inicial de la consulta dt.date(2022,1,31)) # Corresponde a la fecha final de la consulta values_hours = [hour for hour in df_demanda.columns][2:26] # Aquí se reúne el nombre de las columnas desde la hora 1 hasta la hora 24. df_demanda['Mes_de_Enero'] = df_demanda[values_hours].sum(axis = 1) # Esto se hace para sumar todos los reporte de energía, dado que se encuentra por hora. Así, se obtendrían diario. df_demanda = df_demanda.groupby('Values_code')['Mes_de_Enero'].sum().reset_index() # Aquí se agrupan los agentes por códigos con sus respectivas demandas comerciales [=] kwh ``` -------------------------------- ### Instalación de pydataxm Source: https://github.com/equipoanaliticaxm/api_xm/blob/master/examples/pydataxm/data_example_merge_between_request.ipynb Comando para instalar la librería pydataxm en el entorno de Python. ```python %pip install pydataxm ``` -------------------------------- ### Initialize ReadDB Class Source: https://github.com/equipoanaliticaxm/api_xm/blob/master/examples/pydataxm/data_visualization.ipynb Constructs the class that contains the methods for pydataxm. ```python objetoAPI = pydataxm.ReadDB() # Construir la clase que contiene los métodos de pydataxm ``` -------------------------------- ### Initializing Object and Extracting Data Source: https://github.com/equipoanaliticaxm/api_xm/blob/master/examples/pydatasimem/estadisticas_contratos/proyecciones_estadisticas_precios_contratos_sicep.ipynb This snippet shows the initialization of an object for data extraction and the subsequent process of fetching records. ```python from api_xm.estadisticas_contratos.proyecciones_estadisticas_precios_contratos_sicep import ProyeccionesEstadisticasPreciosContratosSICEP # Initialize object obj = ProyeccionesEstadisticasPreciosContratosSICEP() # Output: The object has been initialized with the dataset: "Precios horarios futuros y estadísticas de los contratos de convocatorias del SICEP para el mercado regulado" # Start synchronous query obj.inicio_consulta_sincronica() # Extraction of records # End of data extracting process # Result: # (DataFrame output follows) ``` -------------------------------- ### Preparación de datos de precio de bolsa Source: https://github.com/equipoanaliticaxm/api_xm/blob/master/examples/pydatasimem/extraccion_datos/visualizacion_datos_pydatasimem.ipynb Convierte la columna 'FechaHora' a formato de fecha, extrae año y mes, renombra la columna 'Valor' y calcula el promedio diario de 'PrecioBolsa'. ```python p_bolsa_df_filtrado['FechaHora'] = pd.to_datetime(p_bolsa_df_filtrado['FechaHora'], format='ISO8601') p_bolsa_df_filtrado['Fecha'] = p_bolsa_df_filtrado['FechaHora'].dt.strftime('%Y-%m-%d') p_bolsa_df_filtrado['Year'] = p_bolsa_df_filtrado['FechaHora'].dt.strftime('%Y') p_bolsa_df_filtrado['Month'] = p_bolsa_df_filtrado['FechaHora'].dt.strftime('%m') p_bolsa_df_filtrado.rename(columns={'Valor' : 'PrecioBolsa'}, inplace=True) p_bolsa_df_filtrado = p_bolsa_df_filtrado[['Fecha', 'Year', 'Month', 'PrecioBolsa']].groupby(['Fecha', 'Year', 'Month']).mean().reset_index() p_bolsa_df_filtrado.head() ``` -------------------------------- ### Consulta de Proyecciones de Cantidades y Precios en Contratos de Energía Source: https://github.com/equipoanaliticaxm/api_xm/blob/master/examples/casos_uso_analitica/caso_2_segmentacion_contratacion_mercado_regulado.ipynb Este fragmento de código demuestra cómo consultar el conjunto de datos 'Proyecciones de las cantidades y precios en contratos de energía del Mercado Mayorista por comercializador'. Se definen el ID del dataset, las fechas de inicio y fin, se instancia la clase ReadSIMEM y se ejecuta el método principal para obtener los datos en un DataFrame. ```python id_dataset = '8d10e6' # ID del conjunto de datos a consultar fecha_inicial = '2025-08-01' # Fecha de inicio del rango de consulta fecha_final = '2030-07-31' # Fecha de fin del rango de consulta simem = ReadSIMEM(dataset_id=id_dataset, start_date=fecha_inicial, end_date=fecha_final) # Instancia de la clase ReadSIMEM con los parámetros definidos df_dataset = simem.main() # Ejecución del método principal para obtener los datos en un DataFrame df_dataset.head(5) # Visualización de las primeras 5 filas del DataFrame ``` -------------------------------- ### Importación de librerías necesarias Source: https://github.com/equipoanaliticaxm/api_xm/blob/master/examples/pydatasimem/cargo_por_confiabilidad/costo_equivalente_real_energia_y_costo_equivalente_energia.ipynb Importación de clases de pydataxm y librerías comunes como pandas y matplotlib para la manipulación y visualización de datos. ```python # Importación de librerías necesarias para la consulta y análisis de datos from pydataxm.pydatasimem import ReadSIMEM,VariableSIMEM # Importa clases para interactuar con datos del sistema SIMEM, utilizado para acceder a información energética en Colombia import pandas as pd # Librería para manipulación y análisis de datos en estructuras tipo DataFrame, muy útil para limpiar, transformar y explorar datos import matplotlib.pyplot as plt # Para crear gráficos estáticos como barras, líneas, histogramas, etc. ``` -------------------------------- ### Importación de librerías Source: https://github.com/equipoanaliticaxm/api_xm/blob/master/examples/pydatasimem/estadisticas_contratos/cantidades_precios_contratos_mercado_regulado.ipynb Importa las clases y librerías necesarias para la consulta, manipulación y visualización de datos. ```python from pydataxm.pydatasimem import ReadSIMEM, VariableSIMEM # Importa clases para interactuar con datos del sistema SIMEM import pandas as pd # Librería para manipulación y análisis de datos en estructuras tipo DataFrame import datetime as dt # Módulo para trabajar con fechas y horas from datetime import timedelta # Importa la clase timedelta para operaciones con diferencias de tiempo import matplotlib.pyplot as plt # Importa la librería matplotlib para graficar pd.options.mode.chained_assignment = None # Desactiva el warning ``` -------------------------------- ### Consulta de Listado de Agentes Registrados Source: https://github.com/equipoanaliticaxm/api_xm/blob/master/examples/casos_uso_analitica/caso_2_segmentacion_contratacion_mercado_regulado.ipynb Este fragmento de código muestra cómo consultar el conjunto de datos 'Listado de agentes registrados'. Se definen el ID del dataset, las fechas de inicio y fin, se instancia la clase ReadSIMEM y se ejecuta el método principal para obtener los datos en un DataFrame. ```python id_dataset = '972263' # ID del conjunto de datos a consultar fecha_inicial = '2025-07-31' # Fecha de inicio del rango de consulta fecha_final = '2025-07-31' # Fecha de fin del rango de consulta simem = ReadSIMEM(dataset_id=id_dataset, start_date=fecha_inicial, end_date=fecha_final) # Instancia de la clase ReadSIMEM con los parámetros definidos df_agentes = simem.main() # Ejecución del método principal para obtener los datos en un DataFrame df_agentes.head(5) # Visualización de las primeras 5 filas del DataFrame ``` -------------------------------- ### Instalación de la librería pydataxm Source: https://github.com/equipoanaliticaxm/api_xm/blob/master/examples/pydatasimem/cargo_por_confiabilidad/analisis_obligaciones_energia_firme_mensual.ipynb Comando para instalar la librería de python pydataxm usando pip. ```python # import sys # !{sys.executable} -m pip install pydataxm ``` -------------------------------- ### Importación de librerías Source: https://github.com/equipoanaliticaxm/api_xm/blob/master/examples/pydatasimem/estadisticas_contratos/proyecciones_cantidades_precios_mercado_regulado_por_mecanismo.ipynb Importación de las librerías necesarias para la consulta y manipulación de datos. ```python import sys from pydataxm.pydatasimem import ReadSIMEM, VariableSIMEM import pandas as pd import datetime as dt from datetime import timedelta ``` -------------------------------- ### Instalación de la librería pydataxm Source: https://github.com/equipoanaliticaxm/api_xm/blob/master/examples/pydatasimem/estadisticas_contratos/proyecciones_cantidades_precios_mercado_regulado_por_mecanismo.ipynb Comando para instalar la librería pydataxm usando pip. ```python # !{sys.executable} -m pip install pydataxm ``` -------------------------------- ### Gráfico de barras apiladas de energía contratada Source: https://github.com/equipoanaliticaxm/api_xm/blob/master/examples/casos_uso_analitica/caso_2_segmentacion_contratacion_mercado_regulado.ipynb Visualiza la energía contratada por mecanismo en el mercado regulado a lo largo del tiempo. ```python ax = df_pivot.plot(kind='bar', stacked=True, figsize=(16, 8)) ax.set_title('Energía contratada por mecanismo en el mercado regulado') ax.set_xlabel('Fecha Proyectada') ax.set_ylabel('Energía contratada [kWh-mes]') plt.legend(title='Mecanismo', bbox_to_anchor=(1.05, 1), loc='upper left') plt.tight_layout() plt.show() ``` -------------------------------- ### Preparación de datos de precio de escasez Source: https://github.com/equipoanaliticaxm/api_xm/blob/master/examples/pydatasimem/extraccion_datos/visualizacion_datos_pydatasimem.ipynb Convierte la columna 'Fecha' a formato de fecha, extrae año y mes, renombra la columna 'Valor' a 'PrecioEscasez'. ```python p_escasez_df_filtrado['Fecha'] = pd.to_datetime(p_escasez_df_filtrado['Fecha'], format='%Y-%m-%d') p_escasez_df_filtrado['Year'] = p_escasez_df_filtrado['Fecha'].dt.strftime('%Y') p_escasez_df_filtrado['Month'] = p_escasez_df_filtrado['Fecha'].dt.strftime('%m') p_escasez_df_filtrado['Fecha'] = p_escasez_df_filtrado['Fecha'].dt.strftime('%Y-%m-%d') p_escasez_df_filtrado.rename(columns={'Valor' : 'PrecioEscasez'}, inplace=True) p_escasez_df_filtrado = p_escasez_df_filtrado[['Fecha', 'Year', 'Month', 'PrecioEscasez']] p_escasez_df_filtrado.head() ``` -------------------------------- ### Querying Dataset Information Source: https://github.com/equipoanaliticaxm/api_xm/blob/master/examples/pydatasimem/cargo_por_confiabilidad/precios_escasez_cargo_por_confiabilidad.ipynb This snippet shows the process of initializing an object with a dataset and then performing a synchronous query to extract records. It includes timing information for URL creation and record extraction. ```python Initializing object The object has been initialized with the dataset: "Versiones de factura para la liquidación mensual" **************************************************************************************************** Inicio consulta sincronica Creacion url: 0.0011534690856933594 Extraccion de registros: 19.18060851097107 End of data extracting process **************************************************************************************************** ``` -------------------------------- ### Configure Chart Layout Source: https://github.com/equipoanaliticaxm/api_xm/blob/master/examples/pydatasimem/cargo_por_confiabilidad/energia_firme_cargo_por_confiabilidad.ipynb Configures the title, labels, grid, and layout for a chart, then displays it. ```python plt.title('Top 5 Plantas con Mayor ENFICC Verificada') # Título del gráfico plt.xlabel('Código Planta') # Título Eje X plt.ylabel('GWh') # Título Eje Y plt.grid(axis='y', linestyle='--', alpha=0.7) # Líneas de guía en el eje Y plt.tight_layout() # Ajuste automático del diseño plt.show() # Se muestra el gráfico ``` -------------------------------- ### Querying Generation Plant Data Source: https://github.com/equipoanaliticaxm/api_xm/blob/master/examples/pydatasimem/cargo_por_confiabilidad/energia_firme_cargo_por_confiabilidad.ipynb This code snippet shows the process of initializing a dataset, performing a synchronous query, constructing a URL, and extracting records. It then displays the resulting DataFrame containing detailed information about power generation plants. ```python **************************************************************************************************** Initializing object The object has been initialized with the dataset: "Parámetros técnicos de las plantas de generación" **************************************************************************************************** Inicio consulta sincronica Creacion url: 0.0008206367492675781 Extraccion de registros: 16.149803638458252 End of data extracting process **************************************************************************************************** Result: Fecha CodigoDuracion FechaPublicacion CodigoPlanta \ 0 2025-01-31 P1D 2025-01-31 2R22 1 2025-01-31 P1D 2025-01-31 SNT1 2 2025-01-31 P1D 2025-01-31 2S8N 3 2025-01-31 P1D 2025-01-31 2UPJ 4 2025-01-31 P1D 2025-01-31 USQ1 ... ... ... ... ... 59593 2025-06-01 P1D 2025-06-01 CIS1 59594 2025-06-01 P1D 2025-06-01 RPL1 59595 2025-06-01 P1D 2025-06-01 PNC1 59596 2025-06-01 P1D 2025-06-01 INC1 59597 2025-06-01 P1D 2025-06-01 4WWY NombrePlanta CodigoSICAgente CapEfectivaNeta FPO \ 0 LAGUNETA ENDG 18000.0 2014-12-17 1 SANTA ANA ENDG 8000.0 2005-06-09 2 GUAVIO MENOR ENDG 9900.0 2016-04-27 3 TEQUENDAMA 1 ENDG 14200.0 2018-04-03 4 USAQUEN ENDG 1800.0 2013-04-15 ... ... ... ... ... 59593 INGENIO SAN CARLOS 1 EPSG 2000.0 2011-07-23 59594 INGENIO RIOPAILA 1 RPEG 16000.0 2018-05-21 59595 COGENERADOR PROENCA PECG 19900.0 2014-04-29 59596 INCAUCA 1 NTCG 60000.0 1998-10-21 59597 GD SAN MARTIN EMSG 990.0 2025-05-11 CodigoSubAreaOperativa CodigoAreaOperativa TipoDespachoRecurso \ 0 Are0017 Are0056 No Despachado Centralmente 1 Are0017 Are0056 No Despachado Centralmente 2 Are0017 Are0056 No Despachado Centralmente 3 Are0017 Are0056 No Despachado Centralmente 4 Are0017 Are0056 No Despachado Centralmente ... ... ... ... 59593 Are0032 Are0128 No Despachado Centralmente 59594 Are0032 Are0128 No Despachado Centralmente 59595 Are0019 Are0128 No Despachado Centralmente 59596 Are0019 Are0128 No Despachado Centralmente 59597 Are0027 Are0056 No Despachado Centralmente TipoClasificacion TipoGeneracion 0 GENERADOR Hidraulica 1 GENERADOR Hidraulica 2 GENERADOR Hidraulica 3 GENERADOR Hidraulica 4 GENERADOR Hidraulica ... ... ... 59593 COGENERADOR Termica 59594 COGENERADOR Termica 59595 COGENERADOR Termica 59596 COGENERADOR Termica 59597 GENERADOR DISTRIBUIDO Solar [59598 rows x 13 columns] ``` -------------------------------- ### Carga de Librerías y Dependencias Source: https://github.com/equipoanaliticaxm/api_xm/blob/master/examples/pydatasimem/extraccion_datos/extraccion_datos_pydatasimem.ipynb Importa las librerías necesarias para interactuar con SiMEM y para manipulación de datos y visualización. ```python import sys import os # !{sys.executable} -m pip install pydataxm from pydataxm.pydatasimem import ReadSIMEM, CatalogSIMEM ``` ```python import pandas as pd import matplotlib.pyplot as plt import matplotlib.dates as mpl_dates ``` -------------------------------- ### Visualización de la Evolución Diaria del PPP Promedio Ponderado Source: https://github.com/equipoanaliticaxm/api_xm/blob/master/examples/pydatasimem/estadisticas_contratos/cantidades_precios_contratos_mercado_regulado.ipynb Este código genera un gráfico de líneas para visualizar la evolución diaria del Precio Promedio Ponderado (PPP) por cada mecanismo de asignación. Se define el tamaño de la figura, se itera sobre cada mecanismo único para filtrar los datos correspondientes y graficarlos contra la fecha. Se añaden título, etiquetas para los ejes X e Y, una leyenda para los mecanismos y una cuadrícula para mejorar la legibilidad. Finalmente, se muestra la gráfica. ```python plt.figure(figsize=(12, 6)) # Define el tamaño de la figura for mecanismo in promedio_ponderado['Mecanismo'].unique(): # Itera sobre cada mecanismo único data = promedio_ponderado[promedio_ponderado['Mecanismo'] == mecanismo] # Filtra los datos por mecanismo plt.plot(data['Fecha'], data['PPP_Promedio_Ponderado'], label=mecanismo) # Grafica los datos plt.title('Evolución diaria del PPP promedio ponderado por Mecanismo y por sistema') # Título de la gráfica plt.xlabel('Fecha') # Etiqueta del eje X plt.ylabel('PPP Promedio Ponderado COP/kWh') # Etiqueta del eje Y plt.legend(title='Mecanismo') # Leyenda de la gráfica plt.grid(True) # Añade una cuadrícula plt.show() # Muestra la gráfica ``` -------------------------------- ### Importación de librerías necesarias Source: https://github.com/equipoanaliticaxm/api_xm/blob/master/examples/pydatasimem/estadisticas_contratos/precios_liquidados_y_futuros_mensuales_contratos_UNR_para_total_SIN.ipynb Importa las librerías de Python requeridas para la manipulación y análisis de datos, incluyendo pydataxm, pandas, datetime y matplotlib. ```python import sys from pydataxm.pydatasimem import ReadSIMEM, VariableSIMEM import pandas as pd import datetime as dt from datetime import timedelta import matplotlib.pyplot as plt ``` -------------------------------- ### Inicialización del Catálogo de SiMEM Source: https://github.com/equipoanaliticaxm/api_xm/blob/master/examples/pydatasimem/extraccion_datos/extraccion_datos_pydatasimem.ipynb Se inicializa el objeto CatalogSIMEM para acceder al catálogo de conjuntos de datos disponibles en SiMEM. ```python catalogo = CatalogSIMEM(catalog_type='Datasets') ``` -------------------------------- ### Importación de Librerías Adicionales Source: https://github.com/equipoanaliticaxm/api_xm/blob/master/examples/pydatasimem/extraccion_datos/visualizacion_datos_pydatasimem.ipynb Importa librerías necesarias para manipulación de datos (pandas) y visualización (matplotlib). ```python import pandas as pd from datetime import datetime as dt import matplotlib.pyplot as plt import matplotlib.dates as mpl_dates ``` -------------------------------- ### Instalación de la librería pydataxm Source: https://github.com/equipoanaliticaxm/api_xm/blob/master/examples/pydatasimem/estadisticas_contratos/cantidades_precios_contratos_sicep.ipynb Comando para instalar la librería pydataxm usando pip. ```python #!{sys.executable} -m pip install pydataxm ``` -------------------------------- ### Pronóstico recursivo de 7 días futuros Source: https://github.com/equipoanaliticaxm/api_xm/blob/master/examples/casos_uso_analitica/caso_1_prediccion_precio_bolsa.ipynb Genera predicciones para las próximas 168 horas utilizando un modelo XGBoost entrenado previamente. Se calculan las características necesarias (hora, día de la semana, mes, lags) para cada paso de tiempo futuro y se actualizan los valores de lag para la siguiente iteración. ```python n_futuro = 24 * 7 last_index = df_xgb_fut.index[-1] future_dates = pd.date_range(start=last_index + pd.Timedelta(hours=1), periods=n_futuro, freq='H') future_preds = [] lag1 = df_xgb_fut['Valor'][-1] lag24 = df_xgb_fut['Valor'][-24] if len(df_xgb_fut) >= 24 else lag1 for i, fecha in enumerate(future_dates): features = { 'hour': fecha.hour, 'dayofweek': fecha.dayofweek, 'month': fecha.month, 'lag1': lag1, 'lag24': lag24 } X_pred = pd.DataFrame([features]) pred = model_xgb_fut.predict(X_pred)[0] future_preds.append(pred) lag24 = lag1 if i < 23 else future_preds[i-23] lag1 = pred # Graficar últimos 14 días observados y los 7 días futuros pronosticados horas_obs = 24 * 14 y_obs = y_fut.iloc[-horas_obs:] fechas_obs = y_obs.index plt.figure(figsize=(14,7)) plt.style.use('seaborn-v0_8-darkgrid') plt.plot(fechas_obs, y_obs, label='Observado (últimos 14 días)', color='#0072B2', linewidth=2) plt.plot(future_dates, future_preds, label='Pronóstico futuro (7 días)', color='#D55E00', linestyle='-', linewidth=2)#, marker='x', markersize=5) plt.title('Pronóstico XGBoost: últimos 14 días observados y 7 días futuros', fontsize=16, fontweight='bold') plt.xlabel('Fecha', fontsize=13) plt.ylabel('Precio de Bolsa [COP/kWh]', fontsize=13) plt.legend(fontsize=12, loc='upper left', frameon=True, shadow=True) plt.grid(True, linestyle='--', alpha=0.5) plt.tight_layout() plt.gcf().set_facecolor('white') plt.show() print('Fechas pronosticadas:', future_dates[0], 'a', future_dates[-1]) ``` -------------------------------- ### Importación de librerías necesarias Source: https://github.com/equipoanaliticaxm/api_xm/blob/master/examples/pydatasimem/cargo_por_confiabilidad/energia_de_referencia_mercado_secundario.ipynb Importación de las clases y librerías necesarias para la consulta y análisis de datos energéticos. ```python # Importación de librerías necesarias para la consulta y análisis de datos from pydataxm.pydatasimem import ReadSIMEM # Importa clases para interactuar con datos del sistema SIMEM, utilizado para acceder a información energética en Colombia import pandas as pd # Librería para manipulación y análisis de datos en estructuras tipo DataFrame, muy útil para limpiar, transformar y explorar datos import matplotlib.pyplot as plt # Para crear gráficos estáticos como barras, líneas, histogramas, etc. ``` -------------------------------- ### Preparación de datos Source: https://github.com/equipoanaliticaxm/api_xm/blob/master/examples/pydatasimem/estadisticas_contratos/proyecciones_estadisticas_precios_contratos_sicep.ipynb Los siguientes pasos corresponden a las actividades de manipulación y preparación de los datos que son relevantes para el análisis. ```python ``` -------------------------------- ### Importación de librerías Source: https://github.com/equipoanaliticaxm/api_xm/blob/master/examples/pydataxm/data_example_merge_between_request.ipynb Importación de las librerías necesarias para la consulta de datos. ```python from pydataxm import * import datetime as dt import pandas as pd ``` -------------------------------- ### Obtener datos del sistema Source: https://github.com/equipoanaliticaxm/api_xm/blob/master/examples/pydataxm/data_example_merge_between_request.ipynb Consulta los datos del sistema para una fecha específica. ```python df_sistema = objetoAPI.request_data( 'ListadoRecursos', 'Sistema', dt.date(2022, 5, 5), dt.date(2022, 5, 6)) df_sistema.head() ``` -------------------------------- ### Inicialización y consulta de datos Source: https://github.com/equipoanaliticaxm/api_xm/blob/master/examples/pydatasimem/extraccion_datos/extraccion_datos_filtrados.ipynb Se inicializa el objeto ReadSIMEM con un ID de dataset y un rango de fechas, y luego se obtienen los datos principales. ```python id_dataset = 'EC6945' fecha_inicio = '2026-01-01' fecha_fin = '2026-02-28' simem = ReadSIMEM(dataset_id=id_dataset, start_date=fecha_inicio, end_date=fecha_fin) ``` ```python data = simem.main() data ``` -------------------------------- ### Consulta de Proyecciones de Contratos Source: https://github.com/equipoanaliticaxm/api_xm/blob/master/examples/pydatasimem/estadisticas_contratos/proyecciones_cantidades_precios_mercado_regulado_por_mecanismo.ipynb Este snippet define los parámetros de entrada, instancia la clase ReadSIMEM y ejecuta el método principal para obtener los datos en un DataFrame. Finalmente, visualiza las primeras 20 filas del DataFrame. ```python id_dataset = '8d10e6' # ID del conjunto de datos a consultar las proyecciones de contratos fecha_inicial = '2025-06-01' # Fecha de inicio del rango de consulta fecha_final = '2030-05-31' # Fecha de fin del rango de consulta simem = ReadSIMEM(id_dataset, fecha_inicial, fecha_final) # Instancia de la clase ReadSIMEM con los parámetros definidos df_dataset = simem.main() # Ejecución del método principal para obtener los datos en un DataFrame display(df_dataset.head(20)) # Visualización de las primeras 20 filas del DataFrame ``` -------------------------------- ### CatalogSIMEM - Datasets Source: https://github.com/equipoanaliticaxm/api_xm/blob/master/README.md Python code to instantiate CatalogSIMEM for datasets, retrieve its name, metadata, columns, and data. ```python # Importación from pydataxm.pydatasimem import CatalogSIMEM # Crear una instancia de catalogo con el tipo catalogo_conjuntos = CatalogSIMEM('Datasets') # Extraer información a utilizar print("Nombre: ", catalogo_conjuntos.get_name()) print("Metadata: ", catalogo_conjuntos.get_metadata()) print("Columnas: ", catalogo_conjuntos.get_columns()) # Dataframe con información de los conjuntos de datos data = catalogo_conjuntos.get_data() print(data) ``` -------------------------------- ### Importación de librerías Source: https://github.com/equipoanaliticaxm/api_xm/blob/master/examples/pydatasimem/estadisticas_contratos/venta_energia_contratos_mercado_bolsa_nacional.ipynb Importa las clases y módulos necesarios para la consulta, manipulación y visualización de datos. ```python from pydataxm.pydatasimem import ReadSIMEM, VariableSIMEM import pandas as pd import datetime as dt from datetime import timedelta import matplotlib.pyplot as plt from pandas import CategoricalDtype pd.options.mode.chained_assignment = None ``` -------------------------------- ### Segmentación de agentes por PPP y cantidad contratada usando K-Means Source: https://github.com/equipoanaliticaxm/api_xm/blob/master/examples/casos_uso_analitica/caso_2_segmentacion_contratacion_mercado_regulado.ipynb Aplica el algoritmo K-Means para segmentar agentes basándose en su Precio Promedio de Participación (PPP) y la cantidad contratada. ```python from sklearn.preprocessing import StandardScaler from sklearn.cluster import KMeans # Selecciona variables relevantes X = df_trabajo.groupby(by=['NombreAgente','Mecanismo']).agg({'PPP':'mean', 'Cantidad':'sum'}).reset_index() X_scaled = StandardScaler().fit_transform(X[['PPP', 'Cantidad']]) # Aplicar K-Means kmeans = KMeans(n_clusters=3, random_state=42) X['Cluster'] = kmeans.fit_predict(X_scaled) # Visualizar los clusters sns.scatterplot(data=X, x='PPP', y='Cantidad', hue='Cluster') plt.title('Segmentación de agentes por PPP y cantidad contratada') plt.show() ``` -------------------------------- ### Check Available Collections for Commercial Demand Source: https://github.com/equipoanaliticaxm/api_xm/blob/master/examples/pydataxm/data_visualization.ipynb Reviews the available cross-references for commercial demand. ```python objetoAPI.get_collections('DemaCome') # Revisar los cruces disponibles para demanda comercial ``` -------------------------------- ### Importación de librerías Source: https://github.com/equipoanaliticaxm/api_xm/blob/master/examples/pydatasimem/estadisticas_contratos/proyecciones_estadisticas_precios_contratos_sicep.ipynb Importación de librerías necesarias para la manipulación, análisis y visualización de datos, incluyendo pandas, matplotlib y la clase ReadSIMEM de pydataxm. ```python import pandas as pd import matplotlib.pyplot as plt from pydataxm.pydatasimem import ReadSIMEM ``` -------------------------------- ### Extracción de Datos a DataFrames Source: https://github.com/equipoanaliticaxm/api_xm/blob/master/examples/pydatasimem/extraccion_datos/visualizacion_datos_pydatasimem.ipynb Utiliza el método main() de los objetos ReadSIMEM para extraer la información de los conjuntos de datos especificados y cargarlos en DataFrames de pandas. ```python p_bolsa_df = dataset_p_bolsa.main() p_escasez_df = dataset_p_escasez.main() ``` -------------------------------- ### Importación de librerías necesarias Source: https://github.com/equipoanaliticaxm/api_xm/blob/master/examples/casos_uso_analitica/caso_1_prediccion_precio_bolsa.ipynb Importa las librerías de Python requeridas para la manipulación de datos, visualización y análisis, incluyendo pydataxm, pandas, matplotlib, seaborn, y scikit-learn. ```python from pydataxm.pydatasimem import ReadSIMEM # Importa clases para interactuar con datos del sistema SIMEM, utilizado para acceder a información energética en Colombia import pandas as pd # Librería para manipulación y análisis de datos en estructuras tipo DataFrame, muy útil para limpiar, transformar y explorar datos import matplotlib.pyplot as plt # Para crear gráficos estáticos como barras, líneas, histogramas, etc. import seaborn as sns # Librería basada en matplotlib para visualización de datos from dateutil.relativedelta import relativedelta # Para trabajar con fechas y realizar operaciones de fecha from datetime import datetime, timedelta import datetime as dt from sklearn.metrics import mean_absolute_error, mean_squared_error from pydataxm.pydataxm import ReadDB from pandas import DataFrame import os import pandas as pd import numpy as np import matplotlib.pyplot as plt import xgboost as xgb import requests import pathlib import time from statsmodels.tsa.stattools import adfuller, kpss import warnings from statsmodels.tools.sm_exceptions import InterpolationWarning warnings.simplefilter('ignore', InterpolationWarning) ``` -------------------------------- ### Monthly Demand Calculation Source: https://github.com/equipoanaliticaxm/api_xm/blob/master/examples/pydataxm/data_visualization.ipynb Calculates daily, monthly, and regional demand percentages. ```python df_demanda['demanda_diaria'] = df_demanda.sum(axis=1, skipna=True, numeric_only=True) #Cálculo diario de la demanda df_demanda = df_demanda.groupby(by=['Values_code']).sum()['demanda_diaria'] #Cálculo mensual de la demanda df_demanda_porcenaje = (df_demanda*100/df_demanda.sum()).round(2).sort_values(ascending=True) #cálculo del porcentaje de la demanda ``` ```python df_demanda_porcenaje.head() ```