Données climatiques et hydrologiques - IRM

Les données journalières historiques proviennent de l’Institut Royal Météorologique de Belgique (IRM) et sont disponibles en open data pour le milieu académique. Si vous êtes dans ces conditions, vous pouvez les consulter et les télécharger à partir du site officiel de l’IRM : https://opendata.meteo.be/

Les licences d’utilisation sont disponibles sur le site de l’IRM.

D’autres données sont disponibles en accès libre, que ce soit sur le site https://opendata.meteo.be/ ou via leur serveur FTP : ftp://opendata.meteo.be/.

Il s’agit notamment des fichiers Excel (ou PDF) des données de précipitations extrêmes (QDF, coeffciients de Montana…) ou de statistiques climatiques établies pour chaque commune.

[1]:
import _add_path # for debugging purposes only - must be removed in production

from pathlib import Path
from IPython.display import HTML
from datetime import datetime as dt
from datetime import timezone as tz

from wolfhece.hydrology.hyetograms import ClimateData_IRM # Class to handle climate data from IRM

Instanciation de la classe

Sur base du répertoiree de stockage des données climatiques.

En l’absence de répertoire, on pointe sur les serveurs internes du HECE-ULiège. Il est donc impossible d’y avoir accès de cette manière en dehors de l’Institution.

[2]:
cd = ClimateData_IRM()

Dessin des points de données

et des surfaces associées

[3]:
%matplotlib inline
fig, ax = cd.plot()

../_images/tutorials_climatedata_irm_5_0.png

Lecture des données climatiques

  • soit sur base d’une année et d’un mois de départ et d’une année et d’un mois de fin.

  • soit ‘all’ pour toutes les données disponibles –> le chargement peut être long

[4]:
cd.read_data(start_yearmonth=(2025,5), end_yearmonth=(2025,6), all = False)

Manipulation des données

Les données sont dans un Pandas DataFrame, ce qui permet de les manipuler facilement.

Le DataFrame est accessible via l’attribut data de l’instance de la classe ClimateData_IRM.

[5]:
cd._data.day.min(), cd._data.day.max()
[5]:
(Timestamp('2025-05-01 00:00:00+0000', tz='UTC'),
 Timestamp('2025-06-30 00:00:00+0000', tz='UTC'))

Variables disponibles

[6]:
cd.variables
[6]:
['day',
 'temp_max',
 'temp_min',
 'temp_avg',
 'precip_quantity',
 'humidity_relative',
 'pressure',
 'sun_duration',
 'short_wave_from_sky',
 'evapotrans_ref']

Trouver le pixelID sur base d’un coordonnée en Lambert 72

[8]:
cd.find_pixelid_from_X_Y(X = 226000, Y = 22500)
[8]:
np.int64(1)

Tracer un hyétogramme pour une coordonnée en Lambert 72

[8]:
fig, ax =cd.plot_hyetogram(position = (169930, 123560))
fig.set_size_inches(15, 7)
../_images/tutorials_climatedata_irm_15_0.png

Tracer une carte 2D des données pour une date spécifique

La date doit être fournie au format datetime.datetime en timezone UTC.

[7]:
cd.plot_spatial_attribute(date = dt(2025, 5, 12, tzinfo=tz.utc), variable = 'precip_quantity')
[7]:
(<Figure size 640x480 with 1 Axes>,
 <Axes: title={'center': 'Spatial distribution of precip_quantity at 2025-05-12'}>)
../_images/tutorials_climatedata_irm_17_1.png

Créer une animation d’une variable

La routine retourne un objet FuncAnimation de Matplotlib qui peut être utilisé pour afficher l’animation dans un notebook Jupyter ou sauvegardé en tant que fichier vidéo.

[8]:
ani = cd.animation_spatial_attribute('precip_quantity')
../_images/tutorials_climatedata_irm_19_0.png

Visualisation de l’animation

On peut exploiter la fonction HTML de IPython pour afficher l’animation dans un notebook Jupyter après l’avoir convertie en HTML5.

ATTENTION : Cette étape peut prendre du temps en fonction de la taille de l’animation et de la puissance de votre machine. Il peut être préférable de sauvegarder l’animation dans un fichier vidéo et de l’afficher avec un lecteur vidéo externe.

[9]:
HTML(ani.to_html5_video())
[9]: