1
donnees_meteo/scripts/plot_rain_event_composites.py

86 lines
2.5 KiB
Python

# 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()