J'ai construit seul un observatoire des ouragans caribéens sur 170 ans, en Python
TL;DR
CaribScope est un observatoire du risque climatique caribéen, en open source : 170 ans de trajectoires d'ouragans atlantiques (NOAA HURDAT2, 1851 à 2022), les séismes USGS en direct, les tendances de température de surface de la mer, et un Random Forest qui prédit la catégorie Saffir-Simpson d'une tempête. Seize pages Streamlit, construites seul, sur un seul VPS. C'est aussi, de mon propre aveu, un produit plus abouti que sa diffusion. Cette partie du billet n'est pas un tour d'honneur.
Le manque
Pendant la saison cyclonique, le National Hurricane Center et la NOAA publient tout ce qu'on peut vouloir : prévisions, trajectoires historiques, bulletins. Le tout en anglais, pensé pour un public américain. Les médias, les créateurs et les habitants de la Caraïbe francophone n'ont rien de tout ça adapté à eux : pas de tableau de bord en français, pas de contexte historique localisé sur la Guadeloupe, la Martinique ou Haïti, rien qui dise « voilà ce qu'une tempête comme celle-ci a fait chez toi par le passé ». CaribScope essaie de combler ce manque.
170 ans, c'est beaucoup de données incohérentes
HURDAT2 est la base officielle des ouragans atlantiques de la NOAA, remontant à 1851. Le format est un fichier texte plat, pas un CSV propre : des lignes d'en-tête mêlées aux relevés de position, de vent et de pression, des valeurs de pression manquantes avant l'ère satellite (avant 1979, on dépend surtout des rapports de navires et de stations terrestres), et des identifiants de tempête dont la convention a changé plus d'une fois en 170 ans. Aucun lecteur pandas ne fait ça tout seul. Le parser demande d'écrire un automate à états qui sait si la ligne courante est un en-tête ou une donnée, et d'être honnête sur les colonnes fiables depuis 1851 et celles qui ne le deviennent qu'à l'arrivée des reconnaissances aériennes et des satellites, au milieu du 20e siècle.
Remonter aussi loin ne sert pas qu'à la performance. Ça sert au contexte : quand une catégorie 3 approche, « la dernière tempête comparable a touché cette île en 1928 » est une phrase plus utile qu'une boucle radar en direct, surtout pour un public qui a déjà accès à la boucle radar.
Ce qu'il y a dedans
- Trajectoires et statistiques : toutes les tempêtes HURDAT2, filtrables par île, catégorie et décennie
- Carte sismique : flux USGS en direct, magnitude supérieure ou égale à 2,5, frontière de la plaque caraïbe
- Tendances climatiques : température et température de surface de la mer dans le temps
- Prédiction ML : un classifieur Random Forest (scikit-learn) entraîné sur l'historique HURDAT2, qui prédit la catégorie Saffir-Simpson à partir des attributs courants d'une tempête
- Ouragan du jour : une page au format quotidien puisant dans l'archive historique, conçue comme l'unité partageable et intégrable pour les médias et les réseaux
Seize pages Streamlit au total, chacune une petite application autonome. Le routage
multi-pages de Streamlit (un dossier pages/, un fichier par page) rend cette structure
presque gratuite. Le coût arrive plus tard, dans la navigation et l'architecture de
l'information, pas dans la construction initiale.
La stack
Python 3.10 ou plus, Streamlit pour l'application, Plotly pour tous les graphiques et
cartes, pandas, numpy et pyarrow pour la couche données, scikit-learn pour le Random
Forest, pytest pour les tests. Livré en image Docker (python:3.12-slim) derrière Coolify
sur un VPS personnel, avec GitHub Actions en intégration continue et Renovate pour tenir
les dépendances à jour. C'est la même infrastructure auto-hébergée que celle qui fait
tourner Listmonk, donc ajouter un conteneur de plus a coûté peu, sans ouvrir une nouvelle
surface d'exploitation.
Le Random Forest, et ses limites réelles
Le modèle prend les attributs courants d'une tempête et sort une catégorie Saffir-Simpson prédite, entraîné sur l'historique HURDAT2. Je veux être précis sur ce que c'est et ce que ce n'est pas : un classifieur entraîné sur quelques milliers d'observations historiques, pas un modèle de prévision physique, et il ne rivalisera jamais avec les prévisions opérationnelles de la NOAA, qui intègrent une modélisation atmosphérique hors de portée de ce projet. Son utilité, c'est la reconnaissance de motifs face à l'histoire : montrer, à partir des données, ce qui arrive d'habitude aux tempêtes qui ressemblaient à celle-ci. C'est une affirmation plus étroite et plus honnête que « prédiction d'ouragans », et c'est celle que je tiens.
Ce qui ne marche pas encore
Le produit est en avance sur sa diffusion, pas l'inverse, et je préfère le dire d'emblée plutôt que quelqu'un d'autre le pointe. Seize pages, une chaîne ML fonctionnelle, des données sismiques et climatiques en direct, et jusqu'à récemment aucun outil de mesure d'audience installé, aucune capture d'email, personne en dehors d'un petit cercle pour savoir que ça existe. Construire la chose était la partie sans difficulté. La suite tient entièrement à la mettre devant les gens à qui elle s'adresse : les médias et créateurs de la Caraïbe francophone, pendant les six mois de l'année où ils en ont besoin.
Essaie-le
- Application en ligne : caribscope.fwicss.fr
- Sources : github.com/dimitriaigle/caribscope
C'est de l'open source. Si tu as un jeu de données qui affinerait l'image du risque pour une île précise, ou si tu t'es déjà frotté aux trous de HURDAT2 avant l'ère satellite et que tu as un avis, je suis preneur.