Skip to content

rogarui/ESIOS

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

73 Commits
 
 
 
 
 
 

Repository files navigation

ESIOS

Guía para aprender a utilizar la API de ESIOS de Red Eléctrica con Python.
Nos vamos a centrar en cómo conseguir información de los distintos indicadores de la API y graficar los datos de una forma sencilla, así como descargar archivos.

Es cierto que para usar esta guía no se necesita un gran conocimiento de Python pero sí una mínima base para poder tocar y trastear con comodidad.

📔 Documentación oficial

Esta es la documentación oficial proporcionada por REE para el uso de su API.
https://api.esios.ree.es/

🔑 Obtener un token

Para poder utilizar esta API se deberá solicitar un token personal enviando un correo a [email protected].
Suelen ser rápidos en contestar 🤞

🧾 Listado de indicadores y archivos

En el archivo lista_indicadores_archivos.py encontraréis el código para obtener la lista de indicadores y de archivos junto con su id.
Los archivos varían dependiendo del día que busquemos, por eso en el código se ha implementado una búsqueda por fecha.

Este id es muy importante ya que el es que luego usaremos en las llamadas para rescatar la información de la API.

Obtendremos algo así:

nombre id tipo_archivo fecha_publicacion url_descarga
C2_PrecioFinal 187 zip [2023-10-10] /archives/187/download?date=2023-09-16T23%3A59...
REE_BalancingEnerBids 181 csv [2023-09-16, 2023-09-17] /archives/181/download?date=2023-09-16T23%3A59...
... ... ... ... ...
nombre id
Generación programada PBF Hidráulica UGH 1
Generación programada PBF Hidráulica no UGH 2
... ...

Se han añadido unas líneas para poder descargarlos en Excel (este ejemplo era un Excel, tocará poner el formato que corresponda), descomentar para que se ejecuten correctamente.

⬇️ Descarga de un archivo

Para poder descargar un archivo de la API previamente debemos conocer su id.
Como en el paso anterior lo hemos aprendido a obtener, simplemente usaremos este id en el fichero descarga_archivos.py.

También podemos usar la url obtenida de la lista de archivos para ver como hacer la llamada a la API.

Si necesitamos descargar archivos de varios días, podemos usar el código descarga_archivos_extra.py.

🔎 Búsqueda por indicador

Para poder obtener información de un indicador de la API, previamente debemos conocer su id.
La url para llamar a la API siempre tiene la misma estructura inicial, lo único que deberemos variar serán los parámetros con el fin de obtener la información de una forma o de otra.

Lista de posibles parámetros:

Name Description
locale Obtener traducciones para idiomas (es, en). Idioma por defecto: es
datetime Una fecha determinada por la que filtrar los valores (formato iso8601)
start_date Comienzo del intervalo de fechas para filtrar los valores de los indicadores (formato iso8601)
end_date Fin del intervalo de fechas para filtrar los valores de los indicadores (formato iso8601)
time_agg Cómo agregar valores de indicadores al agruparlos por tiempo. Valores aceptados: sum, average. Valor por defecto: sum.
time_trunc Indica a la API cómo truncar las series temporales de datos. Valores aceptados: five_minutes, ten_minutes, fifteen_minutes, hour, day, month, year.
geo_agg Cómo agregar valores de indicadores al agruparlos por geo_id. Valores aceptados: sum, average. Valor por defecto: sum.
geo_ids Indica a la API los geoidentificadores por los que filtrar los datos.
geo_trunc Indica a la API cómo agrupar los datos a nivel de geolocalización cuando se informa al geo_agg. Valores aceptados: country, electric_system, autonomous_community, province, electric_subsystem, town and drainage_basin.

Para los siguientes ejemplos se van a usar el indicador 600 correspondiente al precio Spot y el indicador 602 corespondiente a energía asignada en mercado Spot diario en España.

Búsqueda por rango de fecha

Una vez obtenido el indicador deseado (600), simplemente usaremos el fichero descarga_datos_por_fecha.py para obtener los datos usando el filtro de fechas deseado.

Búsqueda por rango de fecha y agrupación/agregación temporal

Adicionalmente al rango de fechas podemos incorporar un parámetro (time_trunc) para obtener los datos agrupados por días, meses, años...y esta agregación puede ser usando una media o la suma de los datos (time_agg).

En este caso usaremos descarga_datos_agregados.py para obtener la energía negociada en el mercado diario por día, usando la media y la suma.

Usando la suma

Usando la media

Búsqueda por país

También podemos descargar los datos de un país en concreto directamente.
La clave aquí es añadir el parámetro geo_ids[]=X donde X será el id del país en cuestión, dejo una lista:

id País
1 Portugal
2 Francia
3 España
8824 Reino Unido
8825 Italia
8826 Alemania
8827 Bélgica
8828 Países Bajos

En este caso usaremos descarga_datos_por_pais.py

Como habeis podido ver, se trata de construir la url para hacer la llamada que mejor se adapte a lo que necesitamos. Lo podemos complicar todo lo que queramos, añadir varios países, indicadores, rangos temporales, eso dependerá de nuestra habilidad a la hora de saber tratar los datos después.

🖌️ Visualización con Plotly

Con los datos de la API y Plotly podemos hacer gráficos mucho más avanzados como las siguientes:

generacion_PV_provincias.py

Precio spot en España (proximamente)

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published