El sistema eléctrico de España trabaja con más de 10,000 indicadores que se actualizan a cada instante.
Si trabajas con estos indicadores para los procesos de tu negocio, coincidirás conmigo que es un auténtico tostón utilizar el Excel con tanta descarga manual, clica aquí, clica allá (y un espejo de cristal, como la canción de Mecano).
Imagina que tu empresa tiene una central hidráulica y quieres analizar el indicador Generación programada PBF Hidráulica UGH, ¿cómo automatizas el proceso de descarga con Python?
Preguntas
- ¿Cómo obtener un token para la API de ESIOS?
- ¿Qué es un indicador en la API de ESIOS y cómo se accede a él?
- ¿Cómo se descargan los datos de un indicador específico?
- ¿Cómo se construye una tabla de datos a partir de la respuesta de la API?
- ¿Cómo se procesan y visualizan los datos descargados con Python?
- ¿Cómo se ajusta el rango de fechas para la descarga de datos?
Metodología
Token ESIOS API
Para solicitar información a los sistemas de Red Eléctrica (REE), necesitarás un código de autenticación (conocido en la jerga de la informática como token).
Tendrás que enviarle un correo a REE solicitando el token para que lo asocien a tu cuenta de correo (así te tienen vigilado por si te pones pesao haciendo muchas llamadas a la API). Navega a la página oficial y clica en Personal token request para enviar el correo.
API_TOKEN = 'TU_TOKEN'
headers = {
'Host': 'api.esios.ree.es',
'x-api-key': API_TOKEN
}
Lista de indicadores
Para descargar los datos del indicador Generación programada PBF Hidráulica UGH, necesitamos el código asociado. Lo encontraremos en la lista de indicadores que proporciona la API.
Las APIs trabajan con URLs. Por tanto, creamos una url
para localizar todos los indicadores.
URL_BASE = 'https://api.esios.ree.es/'
ENDPOINT = 'indicators/'
url = URL_BASE + ENDPOINT
Usamos la función get
de la librería
requests
para obtener los recursos de la url
validando nuestra llamada con el token almacenado en
headers
.
import requests
res = requests.get(url, headers=headers)
data = res.json()
El id
asociado al indicador deseado es el
1
. Por tanto, añadimos el código a la url
.
INDICATOR = '1'
url = URL_BASE + ENDPOINT + INDICATOR
Volvemos a realizar la llamada y procesamos la información con
funciones de la librería pandas
para representarla en una
tabla.
res = requests.get(url, headers=headers)
data = res.json()
df = pd.DataFrame(data['indicator']['values'])
df = df[['datetime_utc', 'geo_id', 'geo_name', 'value']]
Tan solo obtenemos los datos de un día. ¿Cómo podríamos obtener los de un mes?
Añadiendo parámetros a la llamada.
params = {
'start_date': '2024-01-01T00',
'end_date': '2024-01-31T23'
}
res = requests.get(url, headers=headers, params=params)
Teniendo un mes de información, podríamos visualizar la generación diaria total con una solar línea tras haber aplicado unos pasos extra de preprocesado.
df.resample(rule='D').value.sum().plot(kind='bar');
Conclusiones
Gracias a este tutorial, has aprendido varios aspectos importantes sobre ESIOS, APIs y Python:
- Token: Aprendiste a obtener un token para acceder a la API de ESIOS.
- Indicadores: Identificaste y accediste a indicadores específicos.
- Descarga de Datos: Manejaste la descarga de datos usando Python.
- Construcción de Tabla: Creaste tablas de datos a partir de las respuestas de la API, una habilidad clave para organizar y preparar los datos para análisis.
- Visualización: Procesaste y visualizaste los datos para interpretarlos mejor.
- Rango de Fechas: Ajustaste el rango de fechas para tus necesidades específicas.
¿Crees que este tutorial le podría ser útil a un colega? Ya sabes, compartir es vivir.