
Proyecto Peridotita 3: ¿Acelera la lluvia la recuperación del bosque? Cruzando el NBR con datos de AEMET
Introducción
El programa Climate Detectives de la Agencia Espacial Europea (ESA) no se conforma con observar el bosque desde el espacio: exige conectar lo que ve el satélite con las variables climáticas que explican lo que está pasando en el terreno. En las dos entradas anteriores del Proyecto Peridotita construimos la serie temporal del Índice de Quemado Normalizado (NBR) de Sierra Bermeja entre 2021 y 2026 usando Google Earth Engine. Ahora toca dar el siguiente paso: averiguar si la cantidad de lluvia de cada primavera influye en la velocidad de recuperación del bosque, o si el terreno rocoso de peridotita —con su suelo expuesto y erosionado tras el incendio— limita esa recuperación por mucha agua que caiga.
🔬 Pregunta de investigación
¿Las primaveras más lluviosas (por ejemplo, 2024 o 2026) aceleraron significativamente la tasa de recuperación del bosque (%R), o el suelo erosionado limitó la capacidad de absorción del agua?
Requisitos previos
- El CSV de valores medios de NBR de mayo de cada año, generado en el Proyecto Peridotita 2.
- Una cuenta gratuita en AEMET OpenData para obtener una clave de API (
api_key). - Una hoja de cálculo (Excel o Google Sheets) o, si el grupo tiene ya soltura, un script de Python con
pandasymatplotlib.
💻 Cómo ejecutar el código de Python (para quien no lo haya hecho nunca)
Todos los bloques de código de este tutorial son de Python, y se ejecutan en Google Colab — un cuaderno de código gratuito que funciona en el navegador, igual que Earth Engine, sin instalar nada en el ordenador.
- Entra en colab.research.google.com con tu cuenta de Google (la misma que usáis para Earth Engine sirve).
- Haz clic en Archivo → Cuaderno nuevo. Se abre una página en blanco con una casilla gris: eso es una “celda” de código.
- Copia y pega uno de los bloques de código de este tutorial dentro de una celda, y pulsa el botón de flecha ▶️ a la izquierda de la celda (o
Shift + Enter) para ejecutarlo. - Los tres bloques de código de este tutorial (Paso 3, Paso 4 y Paso 5) van en celdas separadas, dentro del mismo cuaderno, en ese orden. Cada celda “recuerda” lo que hicieron las anteriores (por ejemplo, la variable
dfcon los datos descargados en el Paso 3 la sigue usando el Paso 4), así que hay que ejecutarlas de arriba a abajo sin saltarse ninguna. - Antes de ejecutar el Paso 3, sustituye
PEGA_AQUI_TU_API_KEYpor la clave que os llegó por email de AEMET (entre las comillas, tal cual). - Si una celda da un error en rojo, no pasa nada: suele significar que falta ejecutar una celda anterior, o que hay un espacio de más al copiar la
api_key. Vuelve a leer el mensaje de error, casi siempre dice justo qué línea falla.
Para descargar los archivos que genera el código (el CSV de datos y la imagen de la gráfica): en el panel izquierdo de Colab, haz clic en el icono de la carpeta 📁, ahí aparecerán aemet_estepona_2021_2026.csv y nbr-vs-lluvia.png una vez se hayan generado — clic derecho sobre cada uno → Descargar.
Si el grupo prefiere no tocar código en absoluto, en el Paso 3 se indica también cómo bajar los mismos datos a mano desde la web de AEMET, y los pasos 4 y 5 se pueden hacer igualmente en Excel o Google Sheets con fórmulas de suma y un gráfico combinado de barras + línea.
Paso 1: Identificar la estación meteorológica de referencia
La estación de AEMET más cercana a Sierra Bermeja con serie histórica completa es:
| Estación | Indicativo | Municipio | Altitud | Coordenadas |
|---|---|---|---|---|
| Estepona | 6058I | Estepona (Málaga) | 19 m | 36° 25′ 1″ N, 5° 9′ 18″ O |
Para verificar este paso: comprueba que al buscar “Estepona” en el visor de AEMET aparece este mismo indicativo climatológico (6058I).
Nota: Estepona está a nivel del mar y Sierra Bermeja alcanza más de 1.400 m, así que la lluvia real en la sierra puede ser algo mayor que la registrada en la estación. Si el instituto tiene acceso a una estación más cercana a la sierra (por ejemplo, una estación de Genalguacil o Casares si existiera con serie histórica), sustituye el indicativo por el suyo.
Paso 2: Solicitar la clave gratuita de AEMET OpenData
- Entra en https://opendata.aemet.es/centrodedescargas/altaUsuario.
- Introduce tu correo electrónico; AEMET te enviará la
api_keypor email de forma gratuita e inmediata. - Guarda esa clave — la necesitarás en cada petición a la API.
Para verificar este paso: el correo de AEMET debe contener un token largo tipo JWT (empieza por eyJhbGciOiJIUzI1NiJ9...).
Paso 3: Descargar los datos climatológicos diarios (2021-2026)
El endpoint de climatología diaria de AEMET OpenData tiene un límite de 6 meses por petición, así que para cubrir 5 años hace falta encadenar varias llamadas. Aquí tienes un script en Python que lo automatiza.
(Pega esto en la primera celda de tu cuaderno de Colab, cambia PEGA_AQUI_TU_API_KEY por tu clave real, y ejecuta con ▶️. Tardará uno o dos minutos porque respeta el límite de peticiones de AEMET.)
python
import requests
import pandas as pd
import time
API_KEY = "PEGA_AQUI_TU_API_KEY"
ESTACION = "6058I" # Estepona
BASE_URL = "https://opendata.aemet.es/opendata/api/valores/climatologicos/diarios/datos"
# Generamos tramos de 6 meses entre 2021-08-01 y 2026-09-01
def generar_tramos(inicio, fin, meses=6):
tramos = []
actual = inicio
while actual < fin:
siguiente = min(actual + pd.DateOffset(months=meses), fin)
tramos.append((actual, siguiente))
actual = siguiente
return tramos
tramos = generar_tramos(pd.Timestamp("2021-08-01"), pd.Timestamp("2026-09-01"))
todos_los_datos = []
for ini, fin in tramos:
fecha_ini = ini.strftime("%Y-%m-%dT00:00:00UTC")
fecha_fin = fin.strftime("%Y-%m-%dT23:59:59UTC")
url = f"{BASE_URL}/fechaini/{fecha_ini}/fechafin/{fecha_fin}/estacion/{ESTACION}"
respuesta = requests.get(url, params={"api_key": API_KEY})
datos_url = respuesta.json().get("datos")
if datos_url:
datos = requests.get(datos_url).json()
todos_los_datos.extend(datos)
time.sleep(2) # respeta el límite de 50 peticiones/minuto de AEMET
df = pd.DataFrame(todos_los_datos)
df.to_csv("aemet_estepona_2021_2026.csv", index=False)
print(f"Descargados {len(df)} días de datos.")
Para verificar este paso: abre el CSV generado y confirma que tiene una fila por día, con columnas fecha, prec (precipitación) y tmed (temperatura media), cubriendo desde agosto de 2021 hasta septiembre de 2026.
Si preferís no programar, AEMET también permite descargar los mismos datos manualmente desde el Portal de Datos Climatológicos, seleccionando la estación y el rango de fechas a mano — más lento, pero sin necesidad de API key.
Paso 4: Extraer la lluvia acumulada de cada primavera
Con el CSV descargado, sumamos la precipitación (prec) de marzo a mayo de cada año, que es el periodo que antecede a la fecha de mayo de cada fase del proyecto.
(Pega esto en una segunda celda nueva, debajo de la anterior, y ejecútala también con ▶️. Usa el df que ya se generó en la celda del Paso 3, así que no funcionará si no has ejecutado esa primero.)
python
df["fecha"] = pd.to_datetime(df["fecha"])
df["prec"] = pd.to_numeric(df["prec"].str.replace(",", "."), errors="coerce")
df["año"] = df["fecha"].dt.year
df["mes"] = df["fecha"].dt.month
primavera = df[df["mes"].isin([3, 4, 5])]
lluvia_primavera = primavera.groupby("año")["prec"].sum().round(1)
print(lluvia_primavera)
Rellena la columna de lluvia con el resultado del código (la columna de NBR ya está completa, calculada a partir de vuestro CSV del Proyecto Peridotita 2):
| Año | Lluvia acumulada marzo-mayo (mm) | NBR medio de mayo | Nº imágenes |
|---|---|---|---|
| 2022 | [completar] | 0.192 | 16 |
| 2023 | [completar] | 0.171 ⚠️ | 5 |
| 2024 | [completar] | 0.266 | 13 |
| 2025 | [completar] | 0.296 | 14 |
| 2026 | [completar] | 0.294 | 9 |
Para verificar este paso: los años más lluviosos del sur de la Península en este periodo suelen mostrarse claramente por encima de la media — si un año aparece con 0 mm o un valor sospechosamente bajo, revisa si faltan días en el CSV de esa estación.
⚠️ Nota sobre 2023: ese mes de mayo solo tiene 5 imágenes limpias frente a las 9-16 de los demás años (probablemente hubo más nubosidad esa primavera y el filtro de nubes descartó más pasadas del satélite). Su NBR medio es algo menos fiable — si en la gráfica final aparece como un valor “raro” que rompe la tendencia, esta es la explicación más probable, no necesariamente un efecto real del clima.
Paso 5: Superponer la lluvia de primavera sobre la curva de NBR
(Pega esto en una tercera celda, después de las dos anteriores. La lista nbr_mayo ya tiene los valores reales calculados a partir de vuestro CSV del Proyecto Peridotita 2.)
python
import matplotlib.pyplot as plt
fig, ax1 = plt.subplots(figsize=(9, 5))
años = lluvia_primavera.index
ax1.bar(años, lluvia_primavera.values, color="#4a90d9", alpha=0.6, label="Lluvia primavera (mm)")
ax1.set_ylabel("Precipitación acumulada (mm)")
ax1.set_xlabel("Año")
ax2 = ax1.twinx()
# NBR medio de mayo, calculado a partir del CSV del Proyecto Peridotita 2
# (años 2022, 2023, 2024, 2025, 2026, en este orden)
nbr_mayo = [0.192, 0.171, 0.266, 0.296, 0.294]
ax2.plot(años, nbr_mayo, color="#2e7d32", marker="o", linewidth=2, label="NBR medio de mayo")
ax2.set_ylabel("Índice NBR")
fig.suptitle("Lluvia de primavera vs. recuperación del NBR — Sierra Bermeja")
fig.legend(loc="upper left", bbox_to_anchor=(0.12, 0.88))
plt.savefig("nbr-vs-lluvia.png", dpi=150, bbox_inches="tight")
plt.show()
Para verificar este paso: la gráfica debe mostrar barras de lluvia y una línea de NBR sobre los mismos años en el eje X, con dos escalas verticales independientes (una para mm, otra para el índice NBR).

Mostrar imagen
Paso 6: Responder a la pregunta de investigación
Con la gráfica delante, el grupo debe discutir dos hipótesis contrapuestas y decidir cuál encaja mejor con los datos:
- Hipótesis A — La lluvia manda: si los años con más lluvia en primavera muestran también un salto más pronunciado en el NBR respecto al año anterior, la disponibilidad de agua sería el factor limitante de la regeneración.
- Hipótesis B — El suelo manda: si años lluviosos no se traducen en mejoras claras del NBR (o incluso coinciden con años de recuperación lenta), es señal de que el suelo expuesto y erosionado de la peridotita —pobre en materia orgánica y con poca capacidad de retención— está limitando la absorción del agua, independientemente de cuánto llueva.
[Completar tras analizar la gráfica: indicar qué hipótesis respaldan los datos de Sierra Bermeja, con el razonamiento del grupo.]
Conclusión
[Completar con la conclusión final una vez analizados los datos reales — por ejemplo: si la correlación es fuerte, moderada o inexistente, y qué implica eso para la gestión futura del terreno tras incendios en suelos de peridotita.]
Este cruce de datos de teledetección con variables climáticas abiertas es exactamente el tipo de análisis que persigue Climate Detectives: no basta con observar el cambio desde el espacio, hay que explicar por qué ocurre. Con esta entrada, el alumnado del IES Monterroso da un paso más allá de la imagen satelital y entra en terreno de correlación estadística real.
Etiquetas: AIDARAC, Climate Detectives, AEMET, Ciencia de Datos, ESA, ies monterroso, Málaga, montesteam, nbr, Proyecto Peridotita, Regeneración Forestal, sierra bermeja, Teledetección


