120 lines
3.1 KiB
Python
120 lines
3.1 KiB
Python
"""Jeux de paires et scénarios standardisés pour explorer les corrélations."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from dataclasses import dataclass
|
|
from typing import Callable, Sequence
|
|
|
|
import numpy as np
|
|
|
|
|
|
HexbinReducer = Callable[[np.ndarray], float]
|
|
|
|
|
|
HEXBIN_REDUCE_FUNCTIONS: dict[str, HexbinReducer] = {
|
|
"mean": np.mean,
|
|
"median": np.median,
|
|
"max": np.max,
|
|
}
|
|
|
|
HEXBIN_REDUCE_LABELS: dict[str, str] = {
|
|
"mean": "moyenne",
|
|
"median": "médiane",
|
|
"max": "maximum",
|
|
}
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
class HexbinScenario:
|
|
"""Décrit un cas d'usage pour un nuage hexbin coloré par une 3ᵉ variable."""
|
|
|
|
key_x: str
|
|
key_y: str
|
|
key_color: str
|
|
filename: str
|
|
description: str
|
|
reduce: str = "mean"
|
|
gridsize: int = 60
|
|
mincnt: int = 5
|
|
|
|
def get_reduce_func(self) -> HexbinReducer:
|
|
"""Retourne la fonction de réduction associée (moyenne, médiane, ...)."""
|
|
|
|
return HEXBIN_REDUCE_FUNCTIONS.get(self.reduce, np.mean)
|
|
|
|
def get_reduce_label(self) -> str:
|
|
"""Libellé français de la fonction de réduction utilisée."""
|
|
|
|
return HEXBIN_REDUCE_LABELS.get(self.reduce, self.reduce)
|
|
|
|
|
|
DEFAULT_LAGGED_PAIRS: Sequence[tuple[str, str]] = (
|
|
("temperature", "humidity"),
|
|
("temperature", "rain_rate"),
|
|
("pressure", "rain_rate"),
|
|
("pressure", "wind_speed"),
|
|
("pressure", "illuminance"),
|
|
("illuminance", "temperature"),
|
|
("humidity", "rain_rate"),
|
|
)
|
|
|
|
|
|
DEFAULT_ROLLING_PAIRS: Sequence[tuple[str, str]] = (
|
|
("temperature", "humidity"),
|
|
("pressure", "rain_rate"),
|
|
("pressure", "wind_speed"),
|
|
("illuminance", "temperature"),
|
|
("humidity", "rain_rate"),
|
|
)
|
|
|
|
|
|
DEFAULT_HEXBIN_SCENARIOS: Sequence[HexbinScenario] = (
|
|
HexbinScenario(
|
|
key_x="temperature",
|
|
key_y="humidity",
|
|
key_color="rain_rate",
|
|
filename="hexbin_temp_humidity_color_rain.png",
|
|
description=(
|
|
"Mettre en évidence comment l'humidité relative plafonne lorsque la température chute "
|
|
"et comment les épisodes de pluie se situent dans une bande restreinte."
|
|
),
|
|
reduce="max",
|
|
gridsize=50,
|
|
mincnt=8,
|
|
),
|
|
HexbinScenario(
|
|
key_x="pressure",
|
|
key_y="rain_rate",
|
|
key_color="wind_speed",
|
|
filename="hexbin_pressure_rain_color_wind.png",
|
|
description=(
|
|
"Vérifier si des rafales accompagnent vraiment les chutes de pression. "
|
|
"On s'attend à voir beaucoup de cases vides : la corrélation est loin d'être systématique."
|
|
),
|
|
reduce="median",
|
|
gridsize=45,
|
|
mincnt=5,
|
|
),
|
|
HexbinScenario(
|
|
key_x="illuminance",
|
|
key_y="humidity",
|
|
key_color="temperature",
|
|
filename="hexbin_lux_humidity_color_temp.png",
|
|
description=(
|
|
"Explorer le cycle jour/nuit : l'humidité monte quand l'illuminance chute, "
|
|
"mais cela n'implique pas toujours une baisse rapide de température."
|
|
),
|
|
reduce="mean",
|
|
gridsize=55,
|
|
mincnt=6,
|
|
),
|
|
)
|
|
|
|
|
|
__all__ = [
|
|
"HexbinScenario",
|
|
"DEFAULT_LAGGED_PAIRS",
|
|
"DEFAULT_ROLLING_PAIRS",
|
|
"DEFAULT_HEXBIN_SCENARIOS",
|
|
]
|