89 lines
2.0 KiB
Python
89 lines
2.0 KiB
Python
# meteo/variables.py
|
|
from __future__ import annotations
|
|
|
|
from dataclasses import dataclass
|
|
from typing import Dict, List
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
class Variable:
|
|
"""
|
|
Décrit une variable météorologique exploitable dans les analyses.
|
|
|
|
- key : identifiant interne (stable, sans espace)
|
|
- column : nom de la colonne dans le DataFrame
|
|
- label : libellé humain pour les graphiques
|
|
- unit : unité d'affichage (texte libre)
|
|
"""
|
|
|
|
key: str
|
|
column: str
|
|
label: str
|
|
unit: str
|
|
|
|
|
|
VARIABLES: List[Variable] = [
|
|
Variable(
|
|
key="temperature",
|
|
column="temperature",
|
|
label="Température",
|
|
unit="°C",
|
|
),
|
|
Variable(
|
|
key="humidity",
|
|
column="humidity",
|
|
label="Humidité relative",
|
|
unit="%",
|
|
),
|
|
Variable(
|
|
key="pressure",
|
|
column="pressure",
|
|
label="Pression atmosphérique",
|
|
unit="hPa",
|
|
),
|
|
Variable(
|
|
key="rain_rate",
|
|
column="rain_rate",
|
|
label="Précipitations",
|
|
unit="mm/h",
|
|
),
|
|
Variable(
|
|
key="illuminance",
|
|
column="illuminance",
|
|
label="Luminance",
|
|
unit="lx",
|
|
),
|
|
Variable(
|
|
key="wind_speed",
|
|
column="wind_speed",
|
|
label="Vitesse du vent",
|
|
unit="km/h",
|
|
),
|
|
Variable(
|
|
key="wind_direction",
|
|
column="wind_direction",
|
|
label="Direction du vent",
|
|
unit="°",
|
|
),
|
|
Variable(
|
|
key="sun_elevation",
|
|
column="sun_elevation",
|
|
label="Élévation solaire",
|
|
unit="°",
|
|
),
|
|
]
|
|
|
|
VARIABLES_BY_KEY: Dict[str, Variable] = {v.key: v for v in VARIABLES}
|
|
|
|
|
|
def iter_variable_pairs() -> list[tuple[Variable, Variable]]:
|
|
"""
|
|
Retourne la liste de toutes les paires (i, j) avec i < j, pour
|
|
éviter les doublons et les diagonales.
|
|
"""
|
|
pairs: list[tuple[Variable, Variable]] = []
|
|
for i, vi in enumerate(VARIABLES):
|
|
for vj in VARIABLES[i + 1 :]:
|
|
pairs.append((vi, vj))
|
|
return pairs
|