Si comparamos España ES
con Italia
IT_SACO_AC
, observamos que el incremento del precio horario
de la electricidad en España tarda más en llegar.
![Análisis horario del precio de la electricidad en Europa, mostrando cómo la posición geográfica y la generación solar afectan los precios energéticos.](https://images.datons.ai/ENTSO-E-API-1/D_prices-styled.png)
Uno de los motivos es que la generación solar abarata el precio de la electricidad.
Aunque ambos países tienen la misma zona horaria, Italia está más al este que España, por lo que el sol se pone antes en Italia que en España.
En este tutorial, te explicaremos cómo descargar datos energéticos europeos a través de la API de ENTSO-E y analizarlos con Python.
Preguntas
- ¿Cómo acceder a la API de ENTSO-E para descargar datos energéticos europeos?
- ¿Qué función se usa para descargar datos de generación?
- ¿Y los precios de la electricidad?
- ¿Cómo usar los códigos de área para descargar datos por país?
- ¿Cómo se agrupan los datos para realizar comparaciones horarias?
- ¿Cómo descagar múltiples áreas de mercado a la vez?
Metodología
Conseguir Token de Acceso
Para descargar los datos de ENTSO-E programáticamente, necesitas un token de acceso.
Siguiendo los pasos de la documentación oficial, te registras en la página de ENTSO-E, y posteriormente tendrás que enviarles un correo electrónico a transparency@entsoe.eu con el asunto “Restful API access”.
API_TOKEN = 'TU_TOKEN'
Para trabajar con la API de ENTSO-E en Python, lo tenemos muy fácil
gracias a la librería
de código abierto entsoe
, que tiene integrada los
endpoints más comunes de la API.
Tenemos dos maneras de trabajar con esta librería:
EntsoePandasClient
descarga y preprocesa los datos en formatoDataFrame
para analizarlos conpandas
más cómodamente.EntsoeRawClient
nos devuelve los datos en bruto, con formato XML.
Para ir directos al grano, vamos a trabajar con
EntsoePandasClient
.
from entsoe import EntsoePandasClient
client = EntsoePandasClient(api_key=API_TOKEN)
Descargar Generación por Tecnología en Italia
Para meternos en faena, vamos a descargar los datos de generación por tecnología en Italia durante el mes de febrero de 2024.
import pandas as pd
start = pd.Timestamp('20240201', tz='Europe/Rome')
end = pd.Timestamp('20240229T2359', tz='Europe/Rome')
df = client.query_generation(
country_code='IT',
start=start, end=end
)
![Datos de generación energética por tecnología en Italia durante febrero de 2024, mostrando la distribución de fuentes como solar, eólica, y convencional.](https://images.datons.ai/ENTSO-E-API-1/D_df_generation.png)
Comparación Horaria de Generación por Tecnología
Como acostumbramos, vamos a crear una matriz de calor para destacar las diferencias en la generación por tecnología en Italia según la hora del día.
df['hour'] = df.index.hour
df.groupby(['hour']).sum()
Dado que en febrero no hay muchas horas de sol, la generación solar solo fue significativa durante pocas horas, desde las 9 hasta las 15.
![Matriz de calor representando la generación por tecnología en Italia a lo largo del día, evidenciando las horas de mayor producción solar.](https://images.datons.ai/ENTSO-E-API-1/D_generation.png)
¿Qué conclusiones adicionales puedes identificar a partir de este análisis? Te leo en los comentarios.
Descargar Precios Electricidad por Área en Europa
Vamos a subir el nivel: descargaremos los precios de la electricidad por área en Europa.
Para ello, necesitamos los códigos de los países que la librería
entsoe
utiliza para identificar las áreas de mercado.
areas = [
'AT', 'BE', 'BG', 'HR', 'CZ', 'DE_LU', 'DK_1',
'EE', 'FI', 'MK', 'FR', 'GR', 'HU', 'IE_SEM',
'IT_SACO_AC', 'LV', 'LT', 'LU_BZN', 'ME', 'NL', 'NO_1',
'PL', 'PT', 'RO', 'SE_1', 'RS', 'SK', 'SI',
'ES', 'CH', 'UA_IPS'
]
Iteramos sobre cada área para descargar los precios de febrero 2024 y acumularlos en una lista.
¿Conoces a alguien que podría interesarle este artículo? Compártelo con ellos.
ls = []
for area in areas:
s = client.query_day_ahead_prices(
country_code=area,
start=start, end=end
)
s.name = area
ls.append(s)
Finalmente, concatenamos la lista en un DataFrame
donde
cada columna representa un área de mercado.
df = pd.concat(ls, axis=1)
![Visualización de los precios de la electricidad por área de mercado en Europa durante febrero de 2024, con datos descargados usando la API de ENTSO-E.](https://images.datons.ai/ENTSO-E-API-1/D_prices-raw.png)
Comparación Horaria de Precios Electricidad
Para el precio, calculamos el promedio por hora, que es más representativo que la suma (la cual habíamos utilizado para la generación).
df['hour'] = df.index.hour
df.groupby(['hour']).mean()
Fijaros cómo el precio de la electricidad mueve su franja más cara conforme el sol se acuesta y la demanda aumenta, dependiendo del país.
![Análisis horario del precio de la electricidad en Europa, mostrando cómo la posición geográfica y la generación solar afectan los precios energéticos.](https://images.datons.ai/ENTSO-E-API-1/D_prices-styled.png)
Si comparamos España ES
con Italia
IT_SACO_AC
, observamos que el incremento del precio en
España tarda más en llegar porque teniendo la misma zona horaria, España
está más al oeste.
¿Qué conclusiones adicionales puedes identificar a partir de este análisis? Te leo en los comentarios.
Conclusiones
- Acceso a la API de ENTSO-E:
EntsoePandasClient
es el cliente que, con el token de acceso, nos permite descargar datos y analizarlos conpandas
cómodamente. - Descarga de datos de generación:
client.query_generation
para descargar los datos de generación de energía por tecnología de un país específico. - Descarga de precios de la electricidad:
client.query_day_ahead_prices
para obtener los precios de la electricidad dada un área de mercado específica. - Uso de códigos de área para datos por país:
country_code
para especificar el área de mercado de la que queremos descargar los datos. - Agrupación de datos para comparaciones horarias:
df.index.hour
para obtener la hora ydf.groupby
para agregar los valores por cada hora aplicando una función matemática. - Descarga de múltiples áreas de mercado:
pd.concat
para concatenar los múltiples indicadores descargados tras iterar sobre una lista de códigos de área.
Si pudieras programar lo que quisieras, ¿qué sería?
Puede que te eche una mano creando tutoriales que te ayuden. Te leo en los comentarios.
Take a step forward and learn to develop algorithms and applications with our digital courses in Udemy.