Skip to content

FasoCoding/PyPlexos

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

106 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

PyPlexos: API en python 🚀

Objetivo

Librería para la lectura de soluciones PLEXOS sin necesidad de la API plexos. El código reimplementa la lectura del archivo ZIP (xml y binario) y crea tablas en memoria en formato Apache Arrow.

La libreria permite:

  1. Lectura de archivos .zip de PLEXOS. (probado con salidas PID / PCP / Mensual)
  2. Escritura de archivos en formato .parquet
  3. Permite queries sobre las tablas Arrow.

Dado que la lectura del .zip quedan en formato Apache Arrow, al igual que las salidas de las queries, estas son de facil traspaso a famosas librerias de dataframe como pandas o polars, o directamente a una BD como duckdb.

Autores ✒️

  • Felipe Batidas - Trabajo Inicial / (not?) Documentación - FasoCoding

También puedes mirar la lista de todos los contribuyentes quíenes han participado en este proyecto.

Construido con 🛠️

  • Python - Lenguaje y version usada
  • Pydantic - Librería de validación de datos
  • xmltodict - Libreria para trabajar con XML
  • PyArrow - Implementación Python del spec Arrow para data

Versionado 📌

Usamos Github para el versionado.


Modo de uso (complemento)

Instalación

pip install .

Instalación editable (modo desarrollo):

pip install -e .

1) Cargar una solución desde ZIP

from pyplexos.solution import PlexosSolution

solution = PlexosSolution.from_zip("/ruta/a/mi_solucion.zip")

2) Exportar todas las tablas a Parquet

solution.to_parquet("/ruta/a/carpeta_salida")

3) Consultar datos con Querier

from pyplexos.compute import Querier

q = Querier(solution)

Obtener objetos por clase:

objects = q.get_objects("Generator")

Obtener membresías entre clases:

memberships = q.get_memberships("System", "Generator")

Query de resultados:

result = q.query_data(
    parent_class_name="System",
    child_class_name="Generator",
    property_name="Generation",
    phase_type="LP",        # LP | PASA | MT | ST
    period_type="intervals" # intervals | days | weeks | months | years | hours | quarters
)

4) Interoperabilidad (Arrow -> pandas/polars)

df_pandas = result.to_pandas()
import polars as pl
df_polars = pl.from_arrow(result)

About

API en python para lectura de salidas plexos.

Topics

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages