You've already forked donnees_meteo
Reformulations
This commit is contained in:
BIN
docs/12 - Conclusion/figures/weekday_profiles.png
Normal file
BIN
docs/12 - Conclusion/figures/weekday_profiles.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 142 KiB |
@@ -48,3 +48,14 @@ Une simple série locale, aussi bien nettoyée soit‑elle, ne suffit pas à dé
|
||||
Ce projet n’aboutit pas à un modèle de prévision local prêt à l’emploi, mais il remplit une autre fonction : celle d’un carnet d’exploration.
|
||||
On y voit comment des données réelles, avec leurs trous et leurs biais, peuvent être préparées, visualisées, confrontées à la physique, puis poussées jusqu’à leurs limites prédictives.
|
||||
Si un lecteur a envie de reprendre ce travail, d’ajouter des sources externes, de tester d’autres modèles ou simplement de tracer de nouveaux graphiques, tant mieux : la station continue d’enregistrer, et l’histoire ne s’arrête pas ici.
|
||||
|
||||
Pour finir sur une note plus légère, un petit script de curiosité :
|
||||
|
||||
```shell
|
||||
python "docs/12 - Conclusion/scripts/plot_weekday_profiles.py"
|
||||
```
|
||||
|
||||
calcule les moyennes de température, d’humidité et de luminance pour chaque jour de la semaine et produit le graphique ci‑dessous.
|
||||
Dans mon jeu de données, c’est le samedi qui ressort comme le jour « le plus agréable » : en moyenne un peu plus chaud, un peu plus lumineux, et moins humide que ses voisins… ce qui tombe plutôt bien pour organiser les activités du week‑end.
|
||||
|
||||

|
||||
|
||||
79
docs/12 - Conclusion/scripts/plot_weekday_profiles.py
Normal file
79
docs/12 - Conclusion/scripts/plot_weekday_profiles.py
Normal file
@@ -0,0 +1,79 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from pathlib import Path
|
||||
import sys
|
||||
|
||||
import pandas as pd
|
||||
|
||||
PROJECT_ROOT = Path(__file__).resolve().parents[3]
|
||||
if str(PROJECT_ROOT) not in sys.path:
|
||||
sys.path.insert(0, str(PROJECT_ROOT))
|
||||
|
||||
from meteo.dataset import load_raw_csv
|
||||
from meteo.variables import VARIABLES_BY_KEY, Variable
|
||||
from meteo.plots import plot_weekday_profiles
|
||||
|
||||
|
||||
CSV_PATH = PROJECT_ROOT / "data" / "weather_minutely.csv"
|
||||
DOC_DIR = Path(__file__).resolve().parent.parent
|
||||
OUTPUT_PATH = DOC_DIR / "figures" / "weekday_profiles.png"
|
||||
|
||||
# On se concentre sur le ressenti "agréable" : température, humidité, lumière.
|
||||
VARIABLE_KEYS = ["temperature", "humidity", "illuminance"]
|
||||
|
||||
|
||||
def compute_weekday_means(df: pd.DataFrame, variables: list[Variable]) -> pd.DataFrame:
|
||||
"""
|
||||
Calcule, pour chaque jour de semaine (0=lundi,…,6=dimanche),
|
||||
la moyenne des variables fournies.
|
||||
"""
|
||||
if df.empty:
|
||||
return pd.DataFrame(index=range(7))
|
||||
|
||||
weekday_index = df.index.dayofweek
|
||||
columns = [var.column for var in variables]
|
||||
weekday_means = df.groupby(weekday_index)[columns].mean()
|
||||
# S'assure que toutes les valeurs 0–6 sont présentes, même si certaines manquent.
|
||||
weekday_means = weekday_means.reindex(range(7))
|
||||
weekday_means.index.name = "weekday"
|
||||
return weekday_means
|
||||
|
||||
|
||||
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()
|
||||
|
||||
variables = [VARIABLES_BY_KEY[key] for key in VARIABLE_KEYS]
|
||||
weekday_means = compute_weekday_means(df, variables)
|
||||
|
||||
output_path = plot_weekday_profiles(
|
||||
weekday_df=weekday_means,
|
||||
variables=variables,
|
||||
output_path=OUTPUT_PATH,
|
||||
title="Moyennes par jour de semaine",
|
||||
)
|
||||
|
||||
print(f"✔ Profils hebdomadaires exportés : {output_path}")
|
||||
|
||||
weekday_labels_long = ["lundi", "mardi", "mercredi", "jeudi", "vendredi", "samedi", "dimanche"]
|
||||
for var in variables:
|
||||
series = weekday_means[var.column]
|
||||
if series.isna().all():
|
||||
continue
|
||||
best_idx = int(series.idxmax())
|
||||
best_label = weekday_labels_long[best_idx]
|
||||
best_value = series.max()
|
||||
unit = f" {var.unit}" if var.unit else ""
|
||||
print(f" → {var.label} maximale en moyenne le {best_label} (≈{best_value:.2f}{unit})")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
|
||||
Reference in New Issue
Block a user