tempify realiza densificación temporal sobre stacks ráster geoespaciales: convierte una serie mensual de 12 valores en una serie diaria de 365, preservando la media mensual con tolerancia < 10⁻⁴ °C.
El análogo conceptual es la interpolación de fotogramas en video: igual que un algoritmo genera frames intermedios para un video más fluido, tempify genera valores temporales intermedios para un stack ráster más denso. Lo que ves abajo es una curva PCHIP real sobre la climatología observada de Santiago de Chile: 12 valores mensuales (puntos azules) reconstruyen los 365 días del año (curva).
Una serie ráster mensual (capas frías a la izquierda, ~9 °C de invierno) atraviesa el año hasta el verano (capas cálidas a la derecha, ~21 °C). Entre cada par de observaciones mensuales, tempify sintetiza las capas diarias intermedias (las translúcidas que rodean cada nodo) preservando la media. La línea de fuego conecta los 12 nodos originales.
tempify con media preservada.
Muchos productos climáticos (WorldClim, CHELSA, CRU-TS, TerraClimate) se distribuyen mensuales, pero los modelos hidrológicos, bioclimáticos y agronómicos los necesitan diarios. tempify es la pieza que cierra ese hueco.
Lineal, PCHIP, PCHIP+Rymes-Myers (mean-preserving), Fourier multi-armónico, Akima y Cubic spline. Eliges según el tradeoff suavidad / fidelidad / costo.
El método pchip_mp garantiza que la media mensual del output diario reproduce la del input con error < 10⁻⁴ °C (observado ~10⁻¹⁴).
Reconoce nomenclatura WorldClim, CHELSA, CHIRPS, ERA5. Lee GeoTIFF y NetCDF; escribe NetCDF CF-compliant, GeoTIFF y Zarr.
Mismos inputs + parámetros = mismo output (MD5). Cada ejecución produce un ProcessingReport con procedencia completa.
Cinco subcomandos en español (convert, inspect, validate, profiles, version) y API ergonómica estilo terra (rast, tempify, plot). Estable, basada en xarray + Dask.
CF Conventions §7.4 (midpoint anchor), climatological wraparound para continuidad Dic-Ene, política explícita de precipitación.
Métricas reales sobre el sample sintético WorldClim Chile Central (12 GeoTIFFs mensuales → 365 días). max |diff| es la peor discrepancia píxel-a-píxel entre la media mensual reconstruida desde el output diario y el input original.
| Método | Suavidad | Conservación de media | Costo | max |diff| |
|---|---|---|---|---|
| linear | C⁰ | Aproximada | Bajo | 5.58 × 10⁻¹ °C |
| pchip | C¹ shape-preserving | Aproximada | Medio | 3.23 × 10⁻¹ °C |
| pchip_mp | C¹ + Rymes-Myers | Estricta < 10⁻⁴ °C | Alto | 1.42 × 10⁻¹⁴ °C |
| fourier | C∞ paramétrica | Aproximada | Medio | 8.32 × 10⁻¹ °C |
| akima | C¹ Akima 1970 | Aproximada | Medio | 3.26 × 10⁻¹ °C |
| cubic | C² spline natural | Aproximada | Medio | 2.82 × 10⁻¹ °C |
WorldClim v2.1 (climatología mensual 1970–2000, resolución 30 arc-sec ≈ 1 km) sobre la cuenca alta del río Maipo, Andes centrales de Chile. tempify acepta directamente el GeoTIFF multibanda de 12 capas (sin que haya que splittearlo) y produce 366 rásters diarios. Lo que ves abajo es el output literal del pipeline.
cubic en el día 15 del mismo mes (visualmente indistinguible). Fila 3: residual ancla − predicción con colorbar diverging independiente (escala ±0.11 °C). Aun con un método no mean-preserving, los días-ancla quedan acotados a una décima de grado; el sesgo se concentra en meses de transición estacional (Octubre, primavera austral), cuando la curvatura local del spline es máxima.
pchip_mp — la transición térmica es continua y físicamente coherente.
pchip_mp los preserva exactamente (media mensual conservada con error < 10⁻⁴ °C).Python 3.11+. Mientras subimos a PyPI, se instala desde el repo.
# desde el repositorio $ pip install git+https://github.com/djwillichile/tempify # o en modo editable (tras clonar) $ git clone https://github.com/djwillichile/tempify $ cd tempify && pip install -e .
$ tempify convert ./worldclim_chile/ \ --method pchip_mp \ --year 2023 \ --output ./out/ \ --report ./out/report.md
from tempify import rast, tempify, plot r = rast("worldclim_tmax.tif") # cargar GeoTIFF multibanda print(r) # info compacta tipo terra plot(r) # grilla de bandas r2 = tempify(r, from_freq="monthly", to_freq="daily", method="cubic") plot(r2, sub=range(1, 17)) # primeras 16 bandas diarias
# Genera un sample sintetico (~50 KB) y # corre el pipeline con todos los metodos. $ python examples/generate_worldclim_sample.py $ python examples/run_demo.py
Tres notebooks autocontenidos, ejecutables directo en el navegador. Sin instalación local.
Recorre la API pública end-to-end sobre un sample sintético tipo WorldClim de Chile Central. Quickstart con pchip_mp, comparación numérica de los 6 métodos, línea de tiempo 3D con anclas destacadas y reporte de procedencia.
Aplica tempify a un stack real de WorldClim sobre el Alto Maipo (gradiente altitudinal 800–4000 m, contraste valle/cordillera ~30 °C). Validación visual de la conservación de anclas y reconstrucción del ciclo anual en dos píxeles extremos.
rast() + tempify() + plot() en pocas líneas, inspirado en el paquete terra de R. Notebook autocontenido: genera un GeoTIFF de 12 bandas inline, sin descargas externas. Ideal para exploración rápida.
Estamos trabajando en un instalador para usuarios que no quieran tocar Python. Un solo doble-clic, ventana en español, drag & drop de carpetas.
Selector visual de método, vista previa de detección, progress bar conectado al pipeline, visor del reporte embebido.
PyInstaller --onedir + Inno Setup. Sin requerir Python preinstalado. Asociación opcional de extensiones .nc y .tif.
Integración de ClimaX / Pangu-Weather / FourCastNet bajo patrón híbrido (baseline clásico + refinamiento NN). Ver ADR-0017.