# scripts/plot_rain_event_composites.py from __future__ import annotations from pathlib import Path from typing import Sequence import pandas as pd from meteo.dataset import load_raw_csv from meteo.variables import Variable, VARIABLES_BY_KEY from meteo.analysis import detect_threshold_events, build_event_aligned_segments from meteo.plots import plot_event_composite CSV_PATH = Path("data/weather_minutely.csv") OUTPUT_PATH = Path("figures/event_composites/rain_event_composites.png") RAIN_THRESHOLD = 0.2 # mm/h : au-dessous on considère qu'il ne pleut pas vraiment MIN_EVENT_DURATION = 5 # minutes MIN_EVENT_GAP = 20 # minutes nécessaires pour considérer un nouvel événement WINDOW_BEFORE = 120 # minutes affichées avant le début de la pluie WINDOW_AFTER = 240 # minutes après le déclenchement COMPOSITE_VARIABLE_KEYS: Sequence[str] = [ "pressure", "temperature", "humidity", "wind_speed", ] def main() -> None: if not CSV_PATH.exists(): print(f"⚠ Fichier introuvable : {CSV_PATH}") return df = load_raw_csv(CSV_PATH) print(f"Dataset minuté chargé : {CSV_PATH}") print(f" Lignes : {len(df)}") print(f" Colonnes : {list(df.columns)}") print() rain_series = df["rain_rate"] events = detect_threshold_events( rain_series, threshold=RAIN_THRESHOLD, min_duration=pd.Timedelta(minutes=MIN_EVENT_DURATION), min_gap=pd.Timedelta(minutes=MIN_EVENT_GAP), ) if not events: print("⚠ Aucun événement de pluie détecté avec les paramètres actuels.") return print(f"Nombre d'événements détectés : {len(events)}") variables: list[Variable] = [VARIABLES_BY_KEY[key] for key in COMPOSITE_VARIABLE_KEYS] columns = [v.column for v in variables] aligned_segments = build_event_aligned_segments( df=df, events=events, columns=columns, window_before_minutes=WINDOW_BEFORE, window_after_minutes=WINDOW_AFTER, resample_minutes=1, ) if aligned_segments.empty: print("⚠ Les segments alignés sont vides (période manquante ?).") return output_path = plot_event_composite( aligned_segments=aligned_segments, variables=variables, output_path=OUTPUT_PATH, quantiles=(0.2, 0.8), baseline_label="Début de la pluie", ) print(f"✔ Graphique composite pluie sauvegardé : {output_path}") if __name__ == "__main__": main()