☞ Données de températures à Paris Montsouris
En ce moment il fait chaud à Paris (et en plus notre clim est en panne), alors je suis allé récupérer des jeux de données météo, dont je m'étais plaint précédemment qu'elles n'était pas librement disponible, et qui le sont maintenant, pour faire joujou avec. En l'espèce, je suis allé récupérer[#] les températures relevées à Paris depuis 1873, spécifiquement celles à la station du parc Montsouris (ici).
[#] La source
est ici
(j'ai utilisé les
fichiers Q_75_1816-1949_RR-T-Vent.csv.gz
, Q_75_previous-1950-2023_RR-T-Vent.csv.gz
et Q_75_latest-2024-2025_RR-T-Vent.csv.gz
) ; je précise
ça parce que c'est un vrai labyrinthe d'aller entre le site
des données
publiques de Météo France et l'endroit où sont vraiment les
fichiers dont je parle, ça continue à ressembler à la blague avec les
chaussures au Goum que j'avais raconté
dans ce billet, sauf que maintenant
il y a vraiment des chaussures au bout, mais elles sont introuvables
depuis l'entrée. (En fait, j'avais bookmarké le lien, et je ne sais
honnêtement pas comment j'ai réussi à naviguer jusque là.)
C'est un jeu de données intéressant, parce que, quand même,
152 ans d'observations continues, ce n'est pas mal du
tout[#2] : il y a bien quelques
jours qui manquent ou sont
incomplets[#3] ou douteux (725
jours au total depuis 1873, le plus récent en 1936), et je suppose
qu'il faut interpréter ces anciennes observations avec une certaine
prudence, mais ça doit néanmoins être une source très précieuse pour
les historiens, et en tout cas c'est très rigolo pour faire joujou
avec.
Faire joujou
est exactement ce que je me propose de
faire dans ce billet.
[#2] Ce n'est pas le plus ancien relevé que Météo France ait dans son jeu : il y a des températures mesurées à l'Observatoire de Paris qui remontent à 1816 (par exemple, on y apprend que les températures relevées pour le étaient de 20.5°C pour la minimale et 31.0°C pour la maximale, et que c'était la journée la plus chaude de ce mois-là). Mais le jeu pour Paris Montsouris a l'air d'être le plus complet qui soit.
[#3] Dans certains raisonnements mathématiques que je vais tenir ci-dessous, je vais faire comme s'il n'y avait pas ces lacunes. Il faut donc les prendre avec des pincettes (enfin, les raisonnements sont corrects, mais leur applicabilité est parfois sujette à caution). J'essaierai quand même de le resignaler de temps en temps.
☞ J'aime faire joujou avec des jeux de données
J'ai déjà dû écrire quelque part (et peut-être qu'un jour je ferai un billet entièrement sur le sujet) que j'aime beaucoup jouer avec des jeux de données : faire des stats dessus, tracer des graphes, chercher des corrélations, regarder les extrêmes, les moyennes, les écarts-types, ce genre de choses. Beaucoup de gens feraient ça avec un tableur, d'autres avec Python, moi personnellement je préfère Perl et Gnuplot[#4], mais peu importe.
[#4] J'aime bien Perl
parce qu'il est vraiment efficace pour écrire du code qui lit des
fichiers textes, et il a l'avantage important à mes yeux sur Python
que je peux écrire directement en ligne de commande
un one-liner comme
sans avoir besoin d'ouvrir un script, de lui trouver un nom,
d'indenter chaque ligne précisément comme Python le veut. Et
l'avantage de mettre ça directement en ligne de commande c'est que
souvent je mélange avec d'autres outils Unix
(perl -F';' -ane 'if ($F[0] eq
"75114001" && $F[8] ne "" && $F[12] ne "" &&
$F[9]==1 && $F[13]==1 && $F[5] ge "18730101") { $med =
($F[16] ne "" && $F[17]==1) ? $F[16] : ($F[8]+$F[12])/2; print
"$F[5]\t$F[8]\t$med\t$F[12]\n"; }' Q_75_1816-1949_RR-T-Vent.csv
Q_75_previous-1950-2023_RR-T-Vent.csv
Q_75_latest-2024-2025_RR-T-Vent.csv > paris-temps.dat
egrep
, sort
, awk
, cut
, tail
,
etc.) en enfilant les pipes. Par rapport à un tableur, l'avantage est
surtout que n'ai pas besoin de refaire plein de manips répétitives à
la souris. Pour ce qui est de Gnuplot, en revanche, je ne le
recommanderais pas du tout, c'est assez merdique (l'édition de ligne
de commande est complètement cassée, donc en fait je me
retrouve à faire des
complètement stupides) et c'est plutôt l'inertie
qui me fait continuer à m'en servir.echo machin |
gnuplot
J'avais fait en 2023 quelque chose d'un peu sérieux pour l'analyse des températures moyennées sur toutes la France depuis 1950 (telles qu'extraites de la réanalyse ERA5). Mais le but de ce billet est moins de parler des températures elles-mêmes (c'est plutôt un prétexte) que de parler de la notion de maximum et de minimum, qui est un des concepts mathématiques les plus simples qui soient, mais qui peuvent déjà servir d'illustration de comment un mathématicien pense le monde (cf. ce que j'écrivais dans ce billet). Et je vais en profiter pour (sans doute mal) vulgariser le théorème du minimax de von Neumann. Mais l'idée est surtout de m'amuser avec tout ça (i.e., comme le titre l'indique, ce billet n'a aucun intérêt si ce n'est de me distraire).
❦
☞ Maximales, minimales et moyennes
Bon, la température maximale ou minimale sur une journée, ou sur une année, ou sur une longue période, je pense que tout le monde comprend ce que ça veut dire.
La température moyenne, c'est déjà un petit peu plus compliqué. Historiquement, la température moyenne sur la journée est estimée comme la moyenne entre le maximum et le minimum (je veux dire, ½·(maximum+minimum)), parce que ce n'est pas évident d'avoir un instrument qui mesure ou calcule la moyenne. Mais plus récemment (depuis 1950, on dirait ?), on s'est mis à enregistrer dans les relevés météos une vraie moyenne calculée, je crois, heure par heure (c'est encore une approximation de ce que serait une moyenne calculée de façon continue, mais c'est déjà beaucoup mieux). Il y a une parfois certaine confusion dans les jeux de données entre les deux ; et c'est déjà un premier signe d'un esprit mathématique que de comprendre la différence entre les deux et d'imaginer immédiatement à quoi ressemble une situation où elles vont différer significativement (par exemple, un pic de chaleur bref mais intense dans la journée va augmenter significativement la maximale mais beaucoup moins la vraie moyenne, donc la demi-somme ½·(maximum+minimum) sera plus élevée que la moyenne). Sur une plus longue période, la différence est moins importante.
Je précise donc que dans ce que j'utilise ci-dessous
comme moyenne
, c'est la moyenne rapportée par Météo France s'il
y en a une, et, sinon, faute de mieux, c'est juste la demi-somme
½·(maximum+minimum) (et donc, en gros, ça semble changer en 1950).
Bref, si je dis quelque chose comme le maximum jamais enregistré
à Paris Montsouris est de 42.6°C le (vers
14h30), le minimum jamais enregistré y est de −23.9°C au matin
du
ou la moyenne sur toute la période
allant du au est de
11.5°C
, je pense que tout le monde comprend bien.
☞ Maxima de minima et minima de maxima
Ça devient déjà plus compliqué si je parle de maximum du minimum ou
de minimum du maximum. Par exemple : la plus haute minimale
quotidienne enregistrée à Paris Montsouris est de 25.5°C
le (vers 5h10), la plus basse maximale est de
−10.5°C le
. Il s'agit là d'un maximum
(sur la période) des minima (sur la journée), et d'un minimum (sur la
période) des maxima (sur la journée). Concrètement, les gens
penseront au maximum des minima comme la nuit la plus chaude
,
mais entendons-nous bien, il ne s'agit pas d'une moyenne sur la nuit,
il s'agit du point le plus froid de la journée (qui se trouve être au
petit matin), et ensuite on cherche dans la période considérée la
journée où ce minimum est le plus élevé.
L'idée est donc de parler ici de ce qui se passe quand on combine des minima, des moyennes et des maxima, de « toutes les manières possibles », et mon jeu de températures est juste un prétexte pour faire ça.
On peut y penser comme un tableau à deux entrées : une entrée (disons, la colonne) est l'heure du jour, et l'autre (disons, la ligne du tableau) est le jour dans la période. On cherche alors le minimum ou le maximum, ou d'ailleurs la moyenne, de chaque ligne et ensuite le maximum, le minimum, ou d'ailleurs la moyenne, de ces nouvelles valeurs. Ça nous fait neuf valeurs différentes.
Mais comme la météo a deux cycles naturels, le jour et l'année, il est en fait plus logique de considérer trois paramètres : l'année, le jour de l'année, et l'heure du jour. Et comme sur chaque paramètre on peut considérer le maximum, le minimum, ou la moyenne, ça fait 3×3×3 = 27 valeurs distinctes. Pour être bien clair, pour l'instant, je parle de prendre le maximum ou minimum ou la moyenne de la température sur la journée (i.e., sur les heures de la journée), puis de prendre le maximum ou minimum ou la moyenne de ces valeurs sur l'année (i.e., sur les jours de l'année), puis de prendre le maximum ou minimum ou la moyenne de ces valeurs-là sur l'ensemble de la période (i.e., sur les années de la période). Je parlerai après de ce qui se passe si on change l'ordre des opérations.
Bon, là il y a un petit point qu'il faut que j'évoque, c'est comment on découpe les jours et les années. Les jours, on les découpe de minuit à minuit, c'est assez naturel. C'est aussi raisonnable pour faire de la météo, parce que ni le minimum ni le maximum ne vont typiquement se produire près de minuit (enfin, c'est rare, même si ça peut arriver quand une nuit fraîche suit une nuit très chaude, si bien que le minimum sur 24h serait au début de la nuit suivante). [Correction () : on me fait remarquer que ce n'est pas vraiment ça : le minimum et le maximum sont calculés sur des intervalles décalés, le minimum entre 18h la veille et 18h le jour nommé, et le maximum entre 6h le jour nommé et 6h le lendemain : cf. ce document.]
Pour l'année, en revanche, commencer au premier janvier est une
mauvaise idée, parce que le minimum sur un hiver peut facilement se
produire soit en décembre soit début janvier, et il sera alors
artificiellement rattaché soit à l'année N−1 soit à
l'année N. (Les saisons météorologiques
commencent
par convention en mars, juin, septembre et décembre.) J'ai choisi de
découper au premier septembre, comme ça ça colle à la fois à des
saisons météorologiques mais aussi plus ou moins au calendrier
universitaire ; le choix du premier décembre se serait sans doute
aussi justifié. Bref, mes années vont du premier septembre au
31 août, et je rattache, par exemple,
le (plus basse
température maximale observée à Paris, cf. ci-dessus) à l'année
1938–1939 (celle qui va du
au inclus). Dans tout ce qui suit, sauf
précision du contraire, quand je parle d'années, ce sont ces années de
septembre à août.
☞ 27 combinaisons
Ceci étant dit, voici les 27 combinaisons possibles de minima, moyennes et maxima (je vais commenter cette table après) :
# | Formule | Valeur | Année | Date |
---|---|---|---|---|
0 | mina(minj(minh)) | −23.9 | 1879–1880 | |
1 | mina(minj(moyh)) | −15.1 | 1879–1880 | |
2 | mina(minj(maxh)) | −10.5 | 1938–1939 | |
3 | mina(moyj(minh)) | 4.5 | 1890–1891 | |
4 | mina(moyj(moyh)) | 8.8 | 1890–1891 | |
5 | mina(moyj(maxh)) | 13.0 | 1890–1891 | |
6 | mina(maxj(minh)) | 15.8 | 1874–1875 | |
7 | mina(maxj(moyh)) | 22.2 | 1909–1910 | |
8 | mina(maxj(maxh)) | 29.0 | 1976–1977 | |
9 | moya(minj(minh)) | −7.5 | ||
10 | moya(minj(moyh)) | −4.6 | ||
11 | moya(minj(maxh)) | −2.6 | ||
12 | moya(moyj(minh)) | 7.7 | ||
13 | moya(moyj(moyh)) | 11.5 | ||
14 | moya(moyj(maxh)) | 15.6 | ||
15 | moya(maxj(minh)) | 20.2 | ||
16 | moya(maxj(moyh)) | 26.4 | ||
17 | moya(maxj(maxh)) | 34.2 | ||
18 | maxa(minj(minh)) | −1.0 | 1974–1975 | |
19 | maxa(minj(moyh)) | 1.1 | 2013–2014 | |
20 | maxa(minj(maxh)) | 4.1 | 2013–2014 | |
21 | maxa(moyj(minh)) | 10.6 | 2023–2024 | |
22 | maxa(moyj(moyh)) | 13.9 | 2023–2024 | |
23 | maxa(moyj(maxh)) | 18.2 | 2021–2022 | |
24 | maxa(maxj(minh)) | 25.5 | 2002–2003 | |
25 | maxa(maxj(moyh)) | 34.0 | 2018–2019 | |
26 | maxa(maxj(maxh)) | 42.6 | 2018–2019 |
(Si vous préférez une version texte brut, elle est ici. Quant aux records individuels par année, ils sont là.)