Tutorial
API ENTSO-E con Python: Análisis de energía en Europa
Automatiza el análisis del mercado energético europeo usando la API ENTSO-E con Python. Accede a flujos transfronterizos, precios de electricidad y datos de generación de todos los países europeos.
Al comparar España ES
con Italia IT_SACO_AC
, observamos que el aumento en el precio horario de la electricidad en España tarda más en llegar.

Una de las razones es que la generación solar reduce el precio de la electricidad.
Aunque ambos países están en la misma zona horaria, Italia está más al este que España, por lo que el sol se pone más temprano en Italia que en España.
En este tutorial, explicaremos cómo descargar datos energéticos europeos a través de la API ENTSO-E y analizarlos con Python.
Preguntas
- ¿Cómo acceder a la API ENTSO-E para descargar datos energéticos europeos?
- ¿Qué función se usa para descargar datos de generación?
- ¿Y los precios de electricidad?
- ¿Cómo usar códigos de área para descargar datos por país?
- ¿Cómo se agrupan los datos para realizar comparaciones horarias?
- ¿Cómo descargar múltiples áreas de mercado a la vez?
Metodología
Obtener token de acceso
Para descargar datos programáticamente desde ENTSO-E, necesitas un token de acceso.
Siguiendo los pasos en la documentación oficial, te registras en la página ENTSO-E, y posteriormente, necesitarás enviarles un correo a transparency@entsoe.eu con el asunto “Restful API access”.
API_TOKEN = 'YOUR_TOKEN'
Para trabajar con la API ENTSO-E en Python, es muy fácil gracias a la librería de código abierto entsoe
, que ha integrado los endpoints más comunes de la API.
Hay dos formas de trabajar con esta librería:
EntsoePandasClient
descarga y preprocesa los datos en formatoDataFrame
para analizarlos conpandas
más cómodamente.EntsoeRawClient
devuelve los datos en formato crudo, en XML.
Para ir al grano, trabajaremos con EntsoePandasClient
.
from entsoe import EntsoePandasClient
client = EntsoePandasClient(api_key=API_TOKEN)
Descargando generación por tecnología en Italia
Para comenzar, vamos a descargar los datos sobre generación por tecnología en Italia durante 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
)

Comparación horaria de generación por tecnología
Como de costumbre, vamos a crear una matriz de calor para resaltar las diferencias en 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 no hay muchas horas de luz solar en febrero, la generación solar solo fue significativa durante unas pocas horas, de 9 a 15.

Descargando precios de electricidad por área en Europa
Vamos a subir de nivel: descargaremos los precios de electricidad por área en Europa.
Para esto, necesitamos los códigos de país que la librería entsoe
usa para identificar á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 los acumulamos en una lista.
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)

Comparación horaria de precios de electricidad
Para el precio, calculamos el promedio por hora, que es más representativo que la suma (que habíamos usado para generación).
df['hour'] = df.index.hour
df.groupby(['hour']).mean()
Nota cómo el precio de la electricidad mueve su rango más caro a medida que el sol se pone y la demanda aumenta, dependiendo del país.

Al comparar España ES
con Italia IT_SACO_AC
, observamos que el aumento de precio en España tarda más en llegar porque, teniendo la misma zona horaria, España está más al oeste.
Conclusiones
- Accediendo a la API ENTSO-E:
EntsoePandasClient
es el cliente que, con el token de acceso, nos permite descargar datos y analizarlos cómodamente conpandas
. - Descargando datos de generación:
client.query_generation
para descargar datos de generación energética por tecnología de un país específico. - Descargando precios de electricidad:
client.query_day_ahead_prices
para obtener precios de electricidad para un área de mercado específica. - Usando códigos de área para datos de país:
country_code
para especificar el área de mercado de la cual queremos descargar los datos. - Agrupando datos para comparaciones horarias:
df.index.hour
para obtener la hora ydf.groupby
para agregar los valores para cada hora aplicando una función matemática. - Descargando múltiples áreas de mercado:
pd.concat
para concatenar múltiples indicadores descargados después de iterar sobre una lista de códigos de área.