Construí yo solo un observatorio de los huracanes caribeños de 170 años, en Python
TL;DR
CaribScope es un observatorio del riesgo climático caribeño, en open source: 170 años de trayectorias de huracanes atlánticos (NOAA HURDAT2, de 1851 a 2022), los sismos del USGS en directo, las tendencias de temperatura de la superficie del mar y un Random Forest que predice la categoría Saffir-Simpson de una tormenta. Dieciséis páginas de Streamlit, construidas en solitario, en un solo VPS. También es, lo reconozco, un producto más logrado que su difusión. Esta parte del artículo no es una vuelta de honor.
La carencia
Durante la temporada ciclónica, el National Hurricane Center y la NOAA publican todo lo que uno pueda querer: pronósticos, trayectorias históricas, boletines. Todo en inglés, pensado para un público estadounidense. Los medios, los creadores y los habitantes del Caribe francófono no tienen nada de eso adaptado a ellos: ningún panel de control en francés, ningún contexto histórico localizado sobre Guadalupe, Martinica o Haití, nada que diga "esto es lo que una tormenta como esta hizo en tu isla en el pasado". CaribScope intenta llenar ese vacío.
170 años son muchos datos incoherentes
HURDAT2 es la base oficial de huracanes atlánticos de la NOAA y se remonta a 1851. El formato es un archivo de texto plano, no un CSV limpio: líneas de cabecera mezcladas con los registros de posición, viento y presión, valores de presión ausentes antes de la era satelital (antes de 1979, se depende sobre todo de informes de barcos y de estaciones terrestres) e identificadores de tormenta cuya convención ha cambiado más de una vez en 170 años. Ningún lector de pandas hace esto solo. El parser exige escribir un autómata de estados que sepa si la línea actual es una cabecera o un dato, y ser honesto sobre qué columnas son fiables desde 1851 y cuáles solo lo son desde la llegada de los vuelos de reconocimiento y los satélites, a mediados del siglo XX.
Remontarse tan atrás no sirve solo para el rendimiento. Sirve para el contexto: cuando se acerca una categoría 3, "la última tormenta comparable tocó esta isla en 1928" es una frase más útil que un bucle de radar en directo, sobre todo para un público que ya tiene acceso al bucle de radar.
Qué hay dentro
- Trayectorias y estadísticas: todas las tormentas de HURDAT2, filtrables por isla, categoría y década
- Mapa sísmico: flujo del USGS en directo, magnitud mayor o igual a 2,5, frontera de la placa del Caribe
- Tendencias climáticas: temperatura y temperatura de la superficie del mar a lo largo del tiempo
- Predicción ML: un clasificador Random Forest (scikit-learn) entrenado con el histórico de HURDAT2, que predice la categoría Saffir-Simpson a partir de los atributos actuales de una tormenta
- Huracán del día: una página en formato diario que bebe del archivo histórico, concebida como la unidad compartible e integrable para medios y redes sociales
Dieciséis páginas de Streamlit en total, cada una una pequeña aplicación autónoma. El
enrutamiento multipágina de Streamlit (una carpeta pages/, un archivo por página) hace
que esta estructura sea casi gratuita. El coste llega más tarde, en la navegación y la
arquitectura de la información, no en la construcción inicial.
El stack
Python 3.10 o superior, Streamlit para la aplicación, Plotly para todos los gráficos y
mapas, pandas, numpy y pyarrow para la capa de datos, scikit-learn para el Random
Forest, pytest para las pruebas. Entregado como imagen Docker (python:3.12-slim) detrás de
Coolify en un VPS personal, con GitHub Actions para la integración continua y Renovate para
mantener las dependencias al día. Es la misma infraestructura autoalojada que hace funcionar
Listmonk, así que añadir un contenedor más costó poco y no abrió una nueva superficie de
explotación.
El Random Forest y sus límites reales
El modelo toma los atributos actuales de una tormenta y devuelve una categoría Saffir-Simpson predicha, entrenado con el histórico de HURDAT2. Quiero ser preciso sobre lo que es y lo que no es: un clasificador entrenado con unos pocos miles de observaciones históricas, no un modelo de pronóstico físico, y nunca rivalizará con los pronósticos operativos de la NOAA, que integran una modelización atmosférica fuera del alcance de este proyecto. Su utilidad es el reconocimiento de patrones frente a la historia: mostrar, a partir de los datos, qué suele ocurrirles a las tormentas que se parecían a esta. Es una afirmación más estrecha y más honesta que "predicción de huracanes", y es la que mantengo.
Lo que todavía no funciona
El producto va por delante de su difusión, no al revés, y prefiero decirlo desde el principio antes que esperar a que otro lo señale. Dieciséis páginas, una cadena de ML funcional, datos sísmicos y climáticos en directo y, hasta hace poco, ninguna herramienta de medición de audiencia instalada, ninguna captura de email, nadie fuera de un círculo pequeño que supiera que esto existe. Construir la cosa fue la parte sin dificultad. Lo que viene depende por completo de ponerla delante de la gente a la que va dirigida: los medios y creadores del Caribe francófono, durante los seis meses del año en que la necesitan.
Pruébalo
- Aplicación en línea: caribscope.fwicss.fr
- Código fuente: github.com/dimitriaigle/caribscope
Es open source. Si tienes un conjunto de datos que afinaría la imagen del riesgo para una isla concreta, o si ya te has topado con los huecos de HURDAT2 antes de la era satelital y tienes una opinión, me interesa mucho.