Tarea 3 - Floración y Producción Agrícola
Predicción de ENT — Floración, vegetación y exposición a pólenes
Propósito
Esta tarea conecta agricultura y fenología de la vegetación con la exposición potencial a pólenes. Construirán series espacio-temporales de índices de vegetación, identificarán períodos de floración por comuna y los compararán con clima y contaminación de la Tarea 2. El resultado será un set de features listo para modelos de la Tarea 4 y jerárquicos de la Tarea 5.
Objetivos de aprendizaje
- Integrar datos de producción/cosechas agrícolas (INE) a nivel comunal.
- Calcular y resumir NDVI, SAVI y NDWI desde imágenes satelitales con enmascaramiento de nubes.
- Detectar ventanas de máxima actividad fenológica por comuna y estación.
- Comparar patrones agrícolas/vegetacionales con clima y contaminantes (salidas de Tarea 2).
- Entregar un pipeline reproducible en Python.
Nota
Un pipeline (de procesamiento) en este proyecto es una secuencia automatizada de etapas que transforman datos brutos (agrícolas, satelitales y climáticos) en un conjunto coherente y reproducible de indicadores por comuna. Cada etapa toma los resultados de la anterior, los transforma, los valida y los guarda en formatos standard. Un pipeline se ve así:
Figura 1: Un posible pipeline de procesamiento para la tarea 3
Insumos (mínimos)
- Shapefile/GeoJSON de comunas y tabla de población de la Tarea 1.
- Clima y contaminación armonizados por comuna-fecha de la Tarea 2.
- Agricultura (INE): superficie/producción por cultivo y comuna 2024 si disponible.
- Imágenes satelitales: Sentinel-2 L2A o Landsat-8/9 (según disponibilidad y cobertura de nubes). Bandas rojo, NIR, green y SCL/QA.
Estructura sugerida de proyecto
data/ ine_agricola.csv s2/ l8/ clima_contam_t2.parquet geo/ comunas.gpkg out/ indices_vegetación.parquet fenología_resumen.parquet figs/ notebooks/
Tareas y entregables intermedios
1) Integración agrícola INE → comunas
- Normalicen nombres/códigos de comuna y cultivo.
- Construyan métricas por comuna-año: superficie_ha, producción_ton, diversidad_cultivos (p.ej., índice de Shannon), principales cultivos.
import pandas as pd
ine=pd.read_csv("data/ine_agricola.csv")
mapa=pd.read_parquet("data/comunas_codigos.parquet")
ine=ine.merge(mapa,how="left",on=["region","provincia","comuna"])
agg=(ine.groupby(["comuna_id","anio"])
.agg(superficie_ha=("superficie_ha","sum"),
produccion_ton=("produccion_ton","sum"),
cultivos=("cultivo","nunique"))
.reset_index())
agg.to_parquet("out/agricola_comuna_anio.parquet")
print(agg.head(3))
2) Preprocesamiento de imágenes y cálculo de índices
- Seleccionen meses relevantes para floración por macro-estación (p.ej., SON y DJF).
- Enmascaren nubes y sombras con la banda SCL/QA.
- Generen composites mensuales por comuna utilizando zonal statistics.
- Calculen NDVI, SAVI y NDWI; documenten fórmulas y bandas usadas.
import rasterio, geopandas as gpd, numpy as np
from rasterstats import zonal_stats
g=gpd.read_file("geo/comunas.gpkg").to_crs(32719)
def comp_zonal(path_red,path_nir,path_green,geom):
with rasterio.open(path_red) as r, rasterio.open(path_nir) as n, rasterio.open(path_green) as gch:
red, nir, gr=r.read(1).astype("float32"), n.read(1).astype("float32"), gch.read(1).astype("float32")
ndvi=(nir-red)/((nir+red)+1e-6)
savi=((1.5*(nir-red))/((nir+red+0.5)+1e-6))
ndwi=(gr-nir)/((gr+nir)+1e-6)
arr={"ndvi":ndvi,"savi":savi,"ndwi":ndwi}
out={}
for k,a in arr.items():
zs=zonal_stats(geom,a,stats=["mean","median","std"],affine=r.transform,nodata=np.nan)
out|={f"{k}_{s}":[zs[i][s] for i in range(len(zs))] for s in ["mean","median","std"]}
return out
3) Serie temporal comuna-mes y detección de floración
- Unifiquen índices por comuna-mes.
- Detecten ventanas de floración con una o más reglas:
- umbral relativo: NDVI/SAVI por encima del percentil 75 de la comuna y pendiente positiva;
- picos mediante peak finding tras suavizado (p.ej., media móvil 3).
- Reporten por comuna: inicio, fin, duración y magnitud del pico principal por año.
idx=pd.read_parquet("out/índices_vegetación.parquet")
idx=idx.sort_values(["comuna_id","fecha"])
idx["ndvi_smooth"]=idx.groupby("comuna_id").ndvi_mean.transform(lambda s: s.rolling(3,1).mean())
thr=idx.groupby("comuna_id").ndvi_smooth.transform(lambda s: s.quantile(0.75))
idx["flag_flor"]= (idx.ndvi_smooth>=thr) & (idx.ndvi_smooth.diff().gt(0))
win=(idx[idx.flag_flor].groupby(["comuna_id","anio"])
.agg(inicio=("fecha","min"), fin=("fecha","max"),
ndvi_max=("ndvi_smooth","max"), dur_dias=("fecha","nunique"))
.reset_index())
win.to_parquet("out/fenología_resumen.parquet")
print(win.head(3))
4) Comparación con clima y contaminación de Tarea 2
- Integren
clima_contam_t2.parquetpor comuna-mes. - Analicen asociaciones exploratorias:
- correlaciones entre magnitud/duración de floración y temperatura, humedad, precipitación;
- cruces con NO2, O3, SO2.
- Entreguen 3–5 figuras estándar: mapas de pico de floración, calendarios de calor por comuna, y scatter con bandas de confianza.
fen=pd.read_parquet("out/fenología_resumen.parquet")
cc=pd.read_parquet("data/clima_contam_t2.parquet")
df=fen.merge(cc,on=["comuna_id","anio","mes"],how="left")
corr=(df[["ndvi_max","dur_dias","t2m_mean","rh_mean","pr_sum","no2_mean","o3_mean","so2_mean"]]
.corr().round(2))
print(corr)
5) Producto final para T4–T5
- Generen features por comuna-mes:
ndvi_mean,savi_mean,ndwi_mean,ndvi_max,dur_flor, indicadores de estación y de cultivos dominantes. - Guarden un único
features_vegetacion.parquetdocumentado y listo para su unión con epidemiología y socioeconómicos.
Requisitos de visualización mínima
- Mapa coroplético de pico de floración por comuna y año reciente.
- Calendario de calor comuna vs. mes para
ndvi_mean. - Figura comparativa:
ndvi_meanvs.t2m_meanyno2_meanen la región asignada.
import matplotlib.pyplot as plt, geopandas as gpd, pandas as pd
g=gpd.read_file("geo/comunas.gpkg")
fv=pd.read_parquet("out/fenología_resumen.parquet")
m=g.merge(fv[fv.anio==2024],on="comuna_id",how="left")
ax=g.plot(edgecolor="black",linewidth=0.2); m.plot(column="ndvi_max",legend=True,ax=ax)
plt.title("Pico de floración (NDVI máx) — 2024 — REGION_ASIGNADA"); plt.tight_layout()
plt.savefig("figs/mapa_pico_floracion_2024.png",dpi=300)
Entrega
- Un notebook limpio y ejecutable con el pipeline completo.
features_vegetacion.parquet,fenología_resumen.parqueteíndices_vegetación.parquet.- 3–5 figuras en
figs/con títulos y ejes legibles. - Un
README.orgbreve con dependencias, estructura de carpetas y tiempos de ejecución aproximados.
Evaluación (9 puntos)
| Criterio | Puntos |
|---|---|
| Integración agrícola INE a nivel comunal (calidad y documentación) | 2.0 |
| Cálculo de NDVI/SAVI/NDWI con enmascaramiento y zonal stats | 2.0 |
| Detección y resumen de ventanas de floración por comuna-año | 2.0 |
| Análisis comparativo con clima y contaminantes (figuras y texto) | 2.0 |
| Reproducibilidad y organización (estructura, naming, README) | 1.0 |
| Total | 9.0 |
—
Go to the course's home or to my website.