87 lines
2.5 KiB
Python
87 lines
2.5 KiB
Python
# scripts/plot_wind_conditionals.py
|
|
from __future__ import annotations
|
|
|
|
from pathlib import Path
|
|
|
|
from meteo.dataset import load_raw_csv
|
|
from meteo.analysis import (
|
|
compute_wind_rose_distribution,
|
|
filter_by_condition,
|
|
compute_mean_wind_components,
|
|
)
|
|
from meteo.plots import plot_wind_rose, plot_wind_vector_series
|
|
|
|
|
|
CSV_PATH = Path("data/weather_minutely.csv")
|
|
OUTPUT_DIR = Path("figures/wind_conditionals")
|
|
RAIN_THRESHOLD = 0.2 # mm/h
|
|
|
|
|
|
def _export_wind_rose(df, label: str, filename: str) -> None:
|
|
if df.empty:
|
|
print(f"⚠ Pas de données pour {label}.")
|
|
return
|
|
|
|
frequencies, speed_labels, sector_size = compute_wind_rose_distribution(
|
|
df=df,
|
|
direction_sector_size=30,
|
|
speed_bins=(0, 5, 15, 30, 50, float("inf")),
|
|
)
|
|
if frequencies.empty:
|
|
print(f"⚠ Impossible de construire la rose pour {label}.")
|
|
return
|
|
|
|
output_path = OUTPUT_DIR / filename
|
|
plot_wind_rose(
|
|
frequencies=frequencies,
|
|
speed_bin_labels=speed_labels,
|
|
output_path=output_path,
|
|
sector_size_deg=sector_size,
|
|
cmap="plasma",
|
|
)
|
|
print(f"✔ Rose des vents ({label}) : {output_path}")
|
|
|
|
|
|
def main() -> None:
|
|
if not CSV_PATH.exists():
|
|
print(f"⚠ Fichier introuvable : {CSV_PATH}")
|
|
return
|
|
|
|
df = load_raw_csv(CSV_PATH)
|
|
if df.empty:
|
|
print("⚠ Dataset vide.")
|
|
return
|
|
|
|
print(f"Dataset minuté chargé : {CSV_PATH}")
|
|
print(f" Lignes : {len(df)}")
|
|
print(f" Colonnes : {list(df.columns)}")
|
|
print()
|
|
|
|
if "rain_rate" not in df.columns:
|
|
print("⚠ Colonne 'rain_rate' absente.")
|
|
return
|
|
|
|
OUTPUT_DIR.mkdir(parents=True, exist_ok=True)
|
|
|
|
rain_condition = df["rain_rate"].fillna(0.0) >= RAIN_THRESHOLD
|
|
dry_condition = df["rain_rate"].fillna(0.0) < RAIN_THRESHOLD
|
|
|
|
_export_wind_rose(df, "toutes conditions", "wind_rose_all.png")
|
|
_export_wind_rose(filter_by_condition(df, condition=rain_condition), "pluie", "wind_rose_rain.png")
|
|
_export_wind_rose(filter_by_condition(df, condition=dry_condition), "temps sec", "wind_rose_dry.png")
|
|
|
|
# Vecteurs moyens par mois
|
|
vector_df = compute_mean_wind_components(df=df, freq="1M")
|
|
vector_path = OUTPUT_DIR / "wind_vectors_monthly.png"
|
|
plot_wind_vector_series(
|
|
vector_df=vector_df,
|
|
output_path=vector_path,
|
|
title="Vecteurs moyens du vent (mensuel)",
|
|
)
|
|
print(f"✔ Vecteurs de vent mensuels : {vector_path}")
|
|
print("✔ Graphiques vent/pluie conditionnels générés.")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|