kadi.weather — Météorologie agronomique¶
Le module kadi.weather fournit une interface unifiée pour accéder aux données
météo historiques et prévisionnelles, et les transformer en indicateurs
directement utiles pour l'agriculture béninoise : saisons, sécheresses, bilans
hydriques.
Architecture¶
Le module est organisé autour d'une façade WeatherSession qui initialise
chaque composant uniquement quand il est nécessaire (chargement paresseux).
WeatherSession
├── Location — Coordonnées GPS et zone agro-écologique
├── WeatherData — Récupération et cache des données brutes
├── Phenology — Saisons, GDD, onset/cessation
├── Hydrology — Bilan hydrique, ET0 (FAO-56)
└── RiskIndicators — SPI, Markov, probabilité de pluie
Les sources de données utilisées :
| Source | Usage | Accès |
|---|---|---|
| Open-Meteo | Prévisions jusqu'à 16 jours | API gratuite |
| CHIRPS | Précipitations historiques (1981+) | API gratuite |
| Cache SQLite | Réutilisation hors-ligne | ~/.kadi/ |
Zones agro-écologiques du Bénin¶
Le module détecte automatiquement la zone en fonction de la latitude :
| Zone | Latitude | Caractéristiques |
|---|---|---|
| Nord | > 9.5° N | Régime unimodal — algorithme Sivakumar |
| Centre | 7.5° – 9.5° N | Transition — algorithme adaptatif |
| Sud | < 7.5° N | Régime bimodal — algorithme Walter-Anyadike |
Initialisation¶
from kadi.weather import WeatherSession
# Parakou (Nord Bénin, régime unimodal)
session = WeatherSession(
latitude=9.3333,
longitude=2.6333,
name="Parakou",
)
# Cotonou (Sud Bénin, régime bimodal)
session_sud = WeatherSession(
latitude=6.3654,
longitude=2.4183,
name="Cotonou",
)
| Paramètre | Type | Obligatoire | Description |
|---|---|---|---|
latitude |
float |
Oui | Latitude en degrés décimaux |
longitude |
float |
Oui | Longitude en degrés décimaux |
name |
str |
Non | Nom de la localité (pour les messages) |
cache_dir |
str |
Non | Dossier du cache. Défaut : ~/.kadi/ |
Exemples complets¶
1. Prévisions météo¶
# Prévision sur 7 jours
prevision = session.forecast(days=7)
print(f"Lieu : {prevision['location']['name']}")
for jour in prevision['data']:
print(
f" {jour['date']} — Pluie : {jour['precipitation']:.1f} mm, "
f"T min : {jour['temperature_min']:.1f}°C"
)
2. Données historiques¶
# 24 mois d'historique des précipitations
df_hist = session.historical(metric="precipitation", months_back=24)
print(df_hist.tail(10))
# Toutes les variables
df_complet = session.historical(months_back=12)
print(df_complet.columns.tolist())
# ['temperature_min', 'temperature_max', 'precipitation', 'humidity']
3. Phénologie¶
# Démarrage de la saison des pluies
onset = session.onset()
print(f"Début estimé : {onset['onset_date']}")
print(f"Méthode : {onset['method']}")
# Fin de la saison des pluies
cessation = session.cessation()
print(f"Fin estimée : {cessation['cessation_date']}")
# Degrés-jours de croissance pour le maïs (semé le 15 mai)
gdd = session.growing_degree_days(
crop="maize",
start_date="2026-05-15",
)
print(f"GDD accumulés : {gdd['gdd_accumulated']:.1f}")
print(f"Stade phéno : {gdd['phenology_stage']}")
4. Bilan hydrique¶
# Bilan hydrique FAO-56 pour le maïs sur sol ferrugineux
bilan = session.water_balance(crop="maize", soil_type="ferrugineux")
# Le résultat est un DataFrame avec les colonnes clés
print(bilan[["precipitation", "ET0", "deficit_eau", "reserve_utile"]].tail(14))
5. Risques climatiques¶
# Probabilité de pluie sur les 3 prochains jours
risque_pluie = session.rain_probability(days_ahead=3, min_rainfall_mm=1.0)
print(f"Pluie demain : {risque_pluie['tomorrow'] * 100:.0f}%")
print(f"Recommandation : {risque_pluie['recommendation']}")
# Indice de sécheresse SPI (3 mois glissants)
secheresse = session.drought_index(method="spi", window_months=3)
print(f"SPI 3 mois : {secheresse['spi_3month']:.2f}")
print(f"Sévérité : {secheresse['drought_severity']}")
Cache hors-ligne¶
Toutes les données téléchargées sont stockées dans une base SQLite locale :
~/.kadi/
├── weather_data.db ← Données historiques (CHIRPS + Open-Meteo)
└── weather_forecast.db ← Prévisions court-terme
Si le réseau est indisponible, le module utilise automatiquement les données en cache sans lever d'erreur.
Cultures supportées pour la phénologie et le bilan hydrique¶
| Code | Culture | Kc (moyen) |
|---|---|---|
maize |
Maïs | 1.15 |
rice |
Riz | 1.20 |
sorghum |
Sorgho | 1.05 |
millet |
Mil | 0.95 |
cowpea |
Niébé | 0.95 |
soybean |
Soja | 1.10 |
yam |
Igname | 0.90 |
cassava |
Manioc | 0.85 |