65 lines
1.9 KiB
Python
65 lines
1.9 KiB
Python
# scripts/plot_illuminance_focus.py
|
|
from __future__ import annotations
|
|
|
|
from pathlib import Path
|
|
|
|
from meteo.dataset import load_raw_csv
|
|
from meteo.analysis import compute_seasonal_hourly_profile, compute_monthly_daylight_hours
|
|
from meteo.plots import plot_seasonal_hourly_profiles, plot_daylight_hours
|
|
|
|
|
|
CSV_PATH = Path("data/weather_minutely.csv")
|
|
OUTPUT_DIR = Path("figures/illuminance")
|
|
DAYLIGHT_THRESHOLD_LUX = 1000.0
|
|
|
|
|
|
def main() -> None:
|
|
if not CSV_PATH.exists():
|
|
print(f"⚠ Fichier introuvable : {CSV_PATH}")
|
|
return
|
|
|
|
df = load_raw_csv(CSV_PATH)
|
|
if "illuminance" not in df.columns:
|
|
print("⚠ La colonne 'illuminance' est absente du dataset.")
|
|
return
|
|
|
|
print(f"Dataset minuté chargé : {CSV_PATH}")
|
|
print(f" Lignes : {len(df)}")
|
|
print(f" Colonnes : {list(df.columns)}")
|
|
print()
|
|
|
|
OUTPUT_DIR.mkdir(parents=True, exist_ok=True)
|
|
|
|
seasonal_profile = compute_seasonal_hourly_profile(
|
|
df=df,
|
|
value_column="illuminance",
|
|
season_column="season",
|
|
)
|
|
seasonal_path = OUTPUT_DIR / "seasonal_diurnal_illuminance.png"
|
|
plot_seasonal_hourly_profiles(
|
|
profile_df=seasonal_profile,
|
|
output_path=seasonal_path,
|
|
title="Illuminance moyenne par heure et par saison",
|
|
ylabel="Illuminance (lux)",
|
|
)
|
|
print(f"✔ Profil saisonnier de l'illuminance : {seasonal_path}")
|
|
|
|
daylight_hours = compute_monthly_daylight_hours(
|
|
df=df,
|
|
illuminance_column="illuminance",
|
|
threshold_lux=DAYLIGHT_THRESHOLD_LUX,
|
|
)
|
|
daylight_path = OUTPUT_DIR / "monthly_daylight_hours.png"
|
|
plot_daylight_hours(
|
|
monthly_series=daylight_hours,
|
|
output_path=daylight_path,
|
|
title=f"Durée moyenne quotidienne > {DAYLIGHT_THRESHOLD_LUX:.0f} lx",
|
|
)
|
|
print(f"✔ Durée de luminosité mensuelle : {daylight_path}")
|
|
|
|
print("✔ Graphiques dédiés à l'illuminance générés.")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|