1

Reformulations

This commit is contained in:
2025-11-26 17:22:57 +01:00
parent 8b26c0bf17
commit f4bdbe2c7f
13 changed files with 460 additions and 171 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 142 KiB

View File

@@ -48,3 +48,14 @@ Une simple série locale, aussi bien nettoyée soitelle, ne suffit pas à dé
Ce projet naboutit pas à un modèle de prévision local prêt à lemploi, mais il remplit une autre fonction : celle dun carnet dexploration.
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, dajouter des sources externes, de tester dautres modèles ou simplement de tracer de nouveaux graphiques, tant mieux : la station continue denregistrer, et lhistoire ne sarrê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, dhumidité et de luminance pour chaque jour de la semaine et produit le graphique cidessous.
Dans mon jeu de données, cest 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 weekend.
![Profils moyens par jour de semaine](./figures/weekday_profiles.png)

View 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 06 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()