{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Manipuler les prévision météorologiques avec Python" ] }, { "cell_type": "raw", "metadata": { "raw_mimetype": "text/restructuredtext", "vscode": { "languageId": "raw" } }, "source": [ ".. post:: May 21, 2024\n", " :tags: how-to\n", " :author: Antoine Tavant\n", " :language: fr" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Debut 2024, Météo France à ouvert toutes ses données météorologiques au public, incluant les observations et les prévisions.\n", "\n", "Ces données sont disponibles via [une API REST](https://portail-api.meteofrance.fr) ainsi que sous forme de fichier sur le site [meteo.data.gouv.fr](https://meteo.data.gouv.fr).\n", "\n", "Dans ce tutoriel, nous allons voir comment manipuler les fichiers de prévision météo." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Le format des fichiers\n", "\n", "Les données météo sont généralement diffusées dans le format [GRIB](https://en.wikipedia.org/wiki/GRIB). C'est un format Binaire qui permet de stocker plusieurs champs de valeurs sur une même grille latitude/longitude/altitude/temps.\n", "\n", "Chaque model météo (ARPEGE, AROME, ICON, etc.) ont plusieurs résolutions de grilles, de 0.1° à 0.025°.\n", "Pour chaque résolution, les informations diffusées sont différentes.\n", "\n", "Nous utiliserons ici les données de AROME à la résolution de 0.025°.\n", "\n", "Meteo France diffuse les prévisions avec plusieurs fichiers afin de réduire la taille de chacun d'entre eux. La documentation exhaustive est [disponnible ici](https://www.data.gouv.fr/fr/datasets/r/3aa3ce62-1f69-4ea1-8157-a53eac61c6bb) mais en voici les principaux : \n", "\n", "- Champs de surfaces\n", " - **SP1** : inclue le vent a 10m d'haltitude (direction, vitesse, composantes $U$ et $V$), le flux solaire vertical, la précipitation, etc.\n", " - **SP2** : inclue la temperature au sol, la nebulositée, les valeurs min et max de la temperature à 2m\n", " - **SP3** : inclue le flux thermique vertical, le flux solair total\n", "- champs isobares \n", " - **IP1** à **IP5** avec les champs de temperature, humiditée, etc. sur les surfaces isobares de 100 à 1000hPa\n", "- Champs de hauteurs\n", " - **HP1** a **HP3** avec la temperature, humiditée, vent, etc. sur 24 niveaux, de 20m à 3000m\n", "\n", "Il faut donc, pour chaque champs désirer, choisir le bon fichier à récupérer et ouvire.\n", "\n", "Dans se tutoriel, nous nous intéresserons à la vitesse du vent et au flux solaire vertical, donc nous utiliserons le fichier **SP1**." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Récupérer le fichier\n", "\n", "Les fichiers sont téléchargeables sur le site [meteo.data.gouv.fr](https://meteo.data.gouv.fr/datasets/65bd12d7bfd26e26804204cb). \n", "Il y a un fichier par horizon de prévision (de 1h à 42h) et par date à laquel la prévision a été faite.\n", "Les fichiers sont donc nommés de la manière suivante :\n", "```\n", "arome__0025__HP1__00H06H__2024-05-21T03:00:00Z.grib2\n", "~~~~~ ~~~~ ~~~ ~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~\n", " | | | | |\n", " | | | | +-- Date à laquel la prévision a été calculée\n", " | | | +-- Horizon de la prévision\n", " | | +-- Type de champs\n", " | +-- Résolution de la grille\n", " +-- Model\n", "```\n", " \n", "A la date de rédaction de ce tutoriel, le 21 mai 2024, le fichier pour l'horizon 0h et la date 2024-05-21 03:00 est [disponible ici](https://object.data.gouv.fr/meteofrance-pnt/pnt/2024-05-21T03:00:00Z/arome/0025/SP1/arome__0025__SP1__00H06H__2024-05-21T03:00:00Z.grib2)." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import requests\n", "url = \"https://object.data.gouv.fr/meteofrance-pnt/pnt/2024-05-21T03:00:00Z/arome/0025/SP1/arome__0025__SP1__00H06H__2024-05-21T03:00:00Z.grib2\"\n", "filename = \"arome_sp1_oh.grib2\"" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "r = requests.get(url, stream=True)\n", "with open(filename, \"wb\") as f:\n", " for chunk in r.iter_content(chunk_size=1024):\n", " if chunk:\n", " f.write(chunk)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Lire le fichier\n", "\n", "Pour lire le fichier GRIB, nous utiliserons la librairie `cfgrib`.\n", "Celle-ci est intégrée à `xarray` et permet de lire les fichiers GRIB directement.\n", "\n", "Il vous faudra installer les modules\n", "```\n", "conda install -c conda-forge xarray cfgrib\n", "```\n" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/home/ubuntu/.local/share/hatch/env/virtual/antoinetavant-github-io/vsXjhu16/antoinetavant-github-io/lib/python3.10/site-packages/gribapi/__init__.py:23: UserWarning: ecCodes 2.31.0 or higher is recommended. You are running version 2.24.2\n", " warnings.warn(\n", "skipping variable: paramId==260065 shortName='gust'\n", "Traceback (most recent call last):\n", " File \"/home/ubuntu/.local/share/hatch/env/virtual/antoinetavant-github-io/vsXjhu16/antoinetavant-github-io/lib/python3.10/site-packages/cfgrib/dataset.py\", line 701, in build_dataset_components\n", " dict_merge(variables, coord_vars)\n", " File \"/home/ubuntu/.local/share/hatch/env/virtual/antoinetavant-github-io/vsXjhu16/antoinetavant-github-io/lib/python3.10/site-packages/cfgrib/dataset.py\", line 629, in dict_merge\n", " raise DatasetBuildError(\n", "cfgrib.dataset.DatasetBuildError: key present and new value is different: key='step' value=Variable(dimensions=('step',), data=array([0., 1., 2., 3., 4., 5., 6.])) new_value=Variable(dimensions=('step',), data=array([1., 2., 3., 4., 5., 6.]))\n", "skipping variable: paramId==228228 shortName='tp'\n", "Traceback (most recent call last):\n", " File \"/home/ubuntu/.local/share/hatch/env/virtual/antoinetavant-github-io/vsXjhu16/antoinetavant-github-io/lib/python3.10/site-packages/cfgrib/dataset.py\", line 701, in build_dataset_components\n", " dict_merge(variables, coord_vars)\n", " File \"/home/ubuntu/.local/share/hatch/env/virtual/antoinetavant-github-io/vsXjhu16/antoinetavant-github-io/lib/python3.10/site-packages/cfgrib/dataset.py\", line 629, in dict_merge\n", " raise DatasetBuildError(\n", "cfgrib.dataset.DatasetBuildError: key present and new value is different: key='step' value=Variable(dimensions=('step',), data=array([0., 1., 2., 3., 4., 5., 6.])) new_value=Variable(dimensions=('step',), data=array([1., 2., 3., 4., 5., 6.]))\n", "skipping variable: paramId==260646 shortName='efg10'\n", "Traceback (most recent call last):\n", " File \"/home/ubuntu/.local/share/hatch/env/virtual/antoinetavant-github-io/vsXjhu16/antoinetavant-github-io/lib/python3.10/site-packages/cfgrib/dataset.py\", line 701, in build_dataset_components\n", " dict_merge(variables, coord_vars)\n", " File \"/home/ubuntu/.local/share/hatch/env/virtual/antoinetavant-github-io/vsXjhu16/antoinetavant-github-io/lib/python3.10/site-packages/cfgrib/dataset.py\", line 629, in dict_merge\n", " raise DatasetBuildError(\n", "cfgrib.dataset.DatasetBuildError: key present and new value is different: key='step' value=Variable(dimensions=('step',), data=array([0., 1., 2., 3., 4., 5., 6.])) new_value=Variable(dimensions=('step',), data=array([1., 2., 3., 4., 5., 6.]))\n", "skipping variable: paramId==260647 shortName='nfg10'\n", "Traceback (most recent call last):\n", " File \"/home/ubuntu/.local/share/hatch/env/virtual/antoinetavant-github-io/vsXjhu16/antoinetavant-github-io/lib/python3.10/site-packages/cfgrib/dataset.py\", line 701, in build_dataset_components\n", " dict_merge(variables, coord_vars)\n", " File \"/home/ubuntu/.local/share/hatch/env/virtual/antoinetavant-github-io/vsXjhu16/antoinetavant-github-io/lib/python3.10/site-packages/cfgrib/dataset.py\", line 629, in dict_merge\n", " raise DatasetBuildError(\n", "cfgrib.dataset.DatasetBuildError: key present and new value is different: key='step' value=Variable(dimensions=('step',), data=array([0., 1., 2., 3., 4., 5., 6.])) new_value=Variable(dimensions=('step',), data=array([1., 2., 3., 4., 5., 6.]))\n" ] }, { "ename": "DatasetBuildError", "evalue": "multiple values for unique key, try re-open the file with one of:\n filter_by_keys={'stepType': 'instant'}\n filter_by_keys={'stepType': 'max'}\n filter_by_keys={'stepType': 'accum'}", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mDatasetBuildError\u001b[0m Traceback (most recent call last)", "File \u001b[0;32m~/.local/share/hatch/env/virtual/antoinetavant-github-io/vsXjhu16/antoinetavant-github-io/lib/python3.10/site-packages/cfgrib/dataset.py:673\u001b[0m, in \u001b[0;36mbuild_dataset_components\u001b[0;34m(index, errors, encode_cf, squeeze, log, read_keys, time_dims, extra_coords, cache_geo_coords)\u001b[0m\n\u001b[1;32m 672\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 673\u001b[0m dims, data_var, coord_vars \u001b[38;5;241m=\u001b[39m \u001b[43mbuild_variable_components\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 674\u001b[0m \u001b[43m \u001b[49m\u001b[43mvar_index\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 675\u001b[0m \u001b[43m \u001b[49m\u001b[43mencode_cf\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 676\u001b[0m \u001b[43m \u001b[49m\u001b[43mfilter_by_keys\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 677\u001b[0m \u001b[43m \u001b[49m\u001b[43merrors\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43merrors\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 678\u001b[0m \u001b[43m \u001b[49m\u001b[43msqueeze\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43msqueeze\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 679\u001b[0m \u001b[43m \u001b[49m\u001b[43mread_keys\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mread_keys\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 680\u001b[0m \u001b[43m \u001b[49m\u001b[43mtime_dims\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mtime_dims\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 681\u001b[0m \u001b[43m \u001b[49m\u001b[43mextra_coords\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mextra_coords\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 682\u001b[0m \u001b[43m \u001b[49m\u001b[43mcache_geo_coords\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mcache_geo_coords\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 683\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 684\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m DatasetBuildError \u001b[38;5;28;01mas\u001b[39;00m ex:\n\u001b[1;32m 685\u001b[0m \u001b[38;5;66;03m# NOTE: When a variable has more than one value for an attribute we need to raise all\u001b[39;00m\n\u001b[1;32m 686\u001b[0m \u001b[38;5;66;03m# the values in the file, not just the ones associated with that variable. See #54.\u001b[39;00m\n", "File \u001b[0;32m~/.local/share/hatch/env/virtual/antoinetavant-github-io/vsXjhu16/antoinetavant-github-io/lib/python3.10/site-packages/cfgrib/dataset.py:495\u001b[0m, in \u001b[0;36mbuild_variable_components\u001b[0;34m(index, encode_cf, filter_by_keys, log, errors, squeeze, read_keys, time_dims, extra_coords, cache_geo_coords)\u001b[0m\n\u001b[1;32m 483\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mbuild_variable_components\u001b[39m(\n\u001b[1;32m 484\u001b[0m index: abc\u001b[38;5;241m.\u001b[39mIndex[T\u001b[38;5;241m.\u001b[39mAny, abc\u001b[38;5;241m.\u001b[39mField],\n\u001b[1;32m 485\u001b[0m encode_cf: T\u001b[38;5;241m.\u001b[39mSequence[\u001b[38;5;28mstr\u001b[39m] \u001b[38;5;241m=\u001b[39m (),\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 493\u001b[0m cache_geo_coords: \u001b[38;5;28mbool\u001b[39m \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mTrue\u001b[39;00m,\n\u001b[1;32m 494\u001b[0m ) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m T\u001b[38;5;241m.\u001b[39mTuple[T\u001b[38;5;241m.\u001b[39mDict[\u001b[38;5;28mstr\u001b[39m, \u001b[38;5;28mint\u001b[39m], Variable, T\u001b[38;5;241m.\u001b[39mDict[\u001b[38;5;28mstr\u001b[39m, Variable]]:\n\u001b[0;32m--> 495\u001b[0m data_var_attrs \u001b[38;5;241m=\u001b[39m \u001b[43menforce_unique_attributes\u001b[49m\u001b[43m(\u001b[49m\u001b[43mindex\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mDATA_ATTRIBUTES_KEYS\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mfilter_by_keys\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 496\u001b[0m grid_type_keys \u001b[38;5;241m=\u001b[39m GRID_TYPE_MAP\u001b[38;5;241m.\u001b[39mget(index\u001b[38;5;241m.\u001b[39mgetone(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mgridType\u001b[39m\u001b[38;5;124m\"\u001b[39m), [])\n", "File \u001b[0;32m~/.local/share/hatch/env/virtual/antoinetavant-github-io/vsXjhu16/antoinetavant-github-io/lib/python3.10/site-packages/cfgrib/dataset.py:283\u001b[0m, in \u001b[0;36menforce_unique_attributes\u001b[0;34m(index, attributes_keys, filter_by_keys)\u001b[0m\n\u001b[1;32m 282\u001b[0m fbks\u001b[38;5;241m.\u001b[39mappend(fbk)\n\u001b[0;32m--> 283\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m DatasetBuildError(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mmultiple values for key \u001b[39m\u001b[38;5;132;01m%r\u001b[39;00m\u001b[38;5;124m\"\u001b[39m \u001b[38;5;241m%\u001b[39m key, key, fbks)\n\u001b[1;32m 284\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m values \u001b[38;5;129;01mand\u001b[39;00m values[\u001b[38;5;241m0\u001b[39m] \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;129;01min\u001b[39;00m (\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mundef\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124munknown\u001b[39m\u001b[38;5;124m\"\u001b[39m):\n", "\u001b[0;31mDatasetBuildError\u001b[0m: multiple values for key 'stepType'", "\nDuring handling of the above exception, another exception occurred:\n", "\u001b[0;31mDatasetBuildError\u001b[0m Traceback (most recent call last)", "Cell \u001b[0;32mIn[2], line 3\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mxarray\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m \u001b[38;5;21;01mxr\u001b[39;00m\n\u001b[0;32m----> 3\u001b[0m ds \u001b[38;5;241m=\u001b[39m \u001b[43mxr\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mopen_dataset\u001b[49m\u001b[43m(\u001b[49m\u001b[43mfilename\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mengine\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mcfgrib\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m)\u001b[49m\n", "File \u001b[0;32m~/.local/share/hatch/env/virtual/antoinetavant-github-io/vsXjhu16/antoinetavant-github-io/lib/python3.10/site-packages/xarray/backends/api.py:571\u001b[0m, in \u001b[0;36mopen_dataset\u001b[0;34m(filename_or_obj, engine, chunks, cache, decode_cf, mask_and_scale, decode_times, decode_timedelta, use_cftime, concat_characters, decode_coords, drop_variables, inline_array, chunked_array_type, from_array_kwargs, backend_kwargs, **kwargs)\u001b[0m\n\u001b[1;32m 559\u001b[0m decoders \u001b[38;5;241m=\u001b[39m _resolve_decoders_kwargs(\n\u001b[1;32m 560\u001b[0m decode_cf,\n\u001b[1;32m 561\u001b[0m open_backend_dataset_parameters\u001b[38;5;241m=\u001b[39mbackend\u001b[38;5;241m.\u001b[39mopen_dataset_parameters,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 567\u001b[0m decode_coords\u001b[38;5;241m=\u001b[39mdecode_coords,\n\u001b[1;32m 568\u001b[0m )\n\u001b[1;32m 570\u001b[0m overwrite_encoded_chunks \u001b[38;5;241m=\u001b[39m kwargs\u001b[38;5;241m.\u001b[39mpop(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124moverwrite_encoded_chunks\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;28;01mNone\u001b[39;00m)\n\u001b[0;32m--> 571\u001b[0m backend_ds \u001b[38;5;241m=\u001b[39m \u001b[43mbackend\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mopen_dataset\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 572\u001b[0m \u001b[43m \u001b[49m\u001b[43mfilename_or_obj\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 573\u001b[0m \u001b[43m \u001b[49m\u001b[43mdrop_variables\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mdrop_variables\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 574\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mdecoders\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 575\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 576\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 577\u001b[0m ds \u001b[38;5;241m=\u001b[39m _dataset_from_backend_dataset(\n\u001b[1;32m 578\u001b[0m backend_ds,\n\u001b[1;32m 579\u001b[0m filename_or_obj,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 589\u001b[0m \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs,\n\u001b[1;32m 590\u001b[0m )\n\u001b[1;32m 591\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m ds\n", "File \u001b[0;32m~/.local/share/hatch/env/virtual/antoinetavant-github-io/vsXjhu16/antoinetavant-github-io/lib/python3.10/site-packages/cfgrib/xarray_plugin.py:109\u001b[0m, in \u001b[0;36mCfGribBackend.open_dataset\u001b[0;34m(self, filename_or_obj, mask_and_scale, decode_times, concat_characters, decode_coords, drop_variables, use_cftime, decode_timedelta, lock, indexpath, filter_by_keys, read_keys, encode_cf, squeeze, time_dims, errors, extra_coords, cache_geo_coords)\u001b[0m\n\u001b[1;32m 87\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mopen_dataset\u001b[39m(\n\u001b[1;32m 88\u001b[0m \u001b[38;5;28mself\u001b[39m,\n\u001b[1;32m 89\u001b[0m filename_or_obj: T\u001b[38;5;241m.\u001b[39mUnion[\u001b[38;5;28mstr\u001b[39m, abc\u001b[38;5;241m.\u001b[39mMappingFieldset[T\u001b[38;5;241m.\u001b[39mAny, abc\u001b[38;5;241m.\u001b[39mField]],\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 107\u001b[0m cache_geo_coords: \u001b[38;5;28mbool\u001b[39m \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mTrue\u001b[39;00m,\n\u001b[1;32m 108\u001b[0m ) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m xr\u001b[38;5;241m.\u001b[39mDataset:\n\u001b[0;32m--> 109\u001b[0m store \u001b[38;5;241m=\u001b[39m \u001b[43mCfGribDataStore\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 110\u001b[0m \u001b[43m \u001b[49m\u001b[43mfilename_or_obj\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 111\u001b[0m \u001b[43m \u001b[49m\u001b[43mindexpath\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mindexpath\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 112\u001b[0m \u001b[43m \u001b[49m\u001b[43mfilter_by_keys\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mfilter_by_keys\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 113\u001b[0m \u001b[43m \u001b[49m\u001b[43mread_keys\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mread_keys\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 114\u001b[0m \u001b[43m \u001b[49m\u001b[43mencode_cf\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mencode_cf\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 115\u001b[0m \u001b[43m \u001b[49m\u001b[43msqueeze\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43msqueeze\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 116\u001b[0m \u001b[43m \u001b[49m\u001b[43mtime_dims\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mtime_dims\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 117\u001b[0m \u001b[43m \u001b[49m\u001b[43mlock\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mlock\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 118\u001b[0m \u001b[43m \u001b[49m\u001b[43merrors\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43merrors\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 119\u001b[0m \u001b[43m \u001b[49m\u001b[43mextra_coords\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mextra_coords\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 120\u001b[0m \u001b[43m \u001b[49m\u001b[43mcache_geo_coords\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mcache_geo_coords\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 121\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 122\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m xr\u001b[38;5;241m.\u001b[39mcore\u001b[38;5;241m.\u001b[39mutils\u001b[38;5;241m.\u001b[39mclose_on_error(store):\n\u001b[1;32m 123\u001b[0m \u001b[38;5;28mvars\u001b[39m, attrs \u001b[38;5;241m=\u001b[39m store\u001b[38;5;241m.\u001b[39mload() \u001b[38;5;66;03m# type: ignore\u001b[39;00m\n", "File \u001b[0;32m~/.local/share/hatch/env/virtual/antoinetavant-github-io/vsXjhu16/antoinetavant-github-io/lib/python3.10/site-packages/cfgrib/xarray_plugin.py:40\u001b[0m, in \u001b[0;36mCfGribDataStore.__init__\u001b[0;34m(self, filename, lock, **backend_kwargs)\u001b[0m\n\u001b[1;32m 38\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 39\u001b[0m opener \u001b[38;5;241m=\u001b[39m dataset\u001b[38;5;241m.\u001b[39mopen_fieldset\n\u001b[0;32m---> 40\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mds \u001b[38;5;241m=\u001b[39m \u001b[43mopener\u001b[49m\u001b[43m(\u001b[49m\u001b[43mfilename\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mbackend_kwargs\u001b[49m\u001b[43m)\u001b[49m\n", "File \u001b[0;32m~/.local/share/hatch/env/virtual/antoinetavant-github-io/vsXjhu16/antoinetavant-github-io/lib/python3.10/site-packages/cfgrib/dataset.py:800\u001b[0m, in \u001b[0;36mopen_file\u001b[0;34m(path, errors, indexpath, filter_by_keys, read_keys, time_dims, extra_coords, **kwargs)\u001b[0m\n\u001b[1;32m 797\u001b[0m index_keys \u001b[38;5;241m=\u001b[39m compute_index_keys(time_dims, extra_coords)\n\u001b[1;32m 798\u001b[0m index \u001b[38;5;241m=\u001b[39m open_fileindex(stream, indexpath, index_keys, filter_by_keys\u001b[38;5;241m=\u001b[39mfilter_by_keys)\n\u001b[0;32m--> 800\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mopen_from_index\u001b[49m\u001b[43m(\u001b[49m\u001b[43mindex\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mread_keys\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mtime_dims\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mextra_coords\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43merrors\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43merrors\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n", "File \u001b[0;32m~/.local/share/hatch/env/virtual/antoinetavant-github-io/vsXjhu16/antoinetavant-github-io/lib/python3.10/site-packages/cfgrib/dataset.py:743\u001b[0m, in \u001b[0;36mopen_from_index\u001b[0;34m(index, read_keys, time_dims, extra_coords, **kwargs)\u001b[0m\n\u001b[1;32m 736\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mopen_from_index\u001b[39m(\n\u001b[1;32m 737\u001b[0m index: abc\u001b[38;5;241m.\u001b[39mIndex[T\u001b[38;5;241m.\u001b[39mAny, abc\u001b[38;5;241m.\u001b[39mField],\n\u001b[1;32m 738\u001b[0m read_keys: T\u001b[38;5;241m.\u001b[39mSequence[\u001b[38;5;28mstr\u001b[39m] \u001b[38;5;241m=\u001b[39m (),\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 741\u001b[0m \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs: T\u001b[38;5;241m.\u001b[39mAny,\n\u001b[1;32m 742\u001b[0m ) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m Dataset:\n\u001b[0;32m--> 743\u001b[0m dimensions, variables, attributes, encoding \u001b[38;5;241m=\u001b[39m \u001b[43mbuild_dataset_components\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 744\u001b[0m \u001b[43m \u001b[49m\u001b[43mindex\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mread_keys\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mread_keys\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mtime_dims\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mtime_dims\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mextra_coords\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mextra_coords\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\n\u001b[1;32m 745\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 746\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m Dataset(dimensions, variables, attributes, encoding)\n", "File \u001b[0;32m~/.local/share/hatch/env/virtual/antoinetavant-github-io/vsXjhu16/antoinetavant-github-io/lib/python3.10/site-packages/cfgrib/dataset.py:695\u001b[0m, in \u001b[0;36mbuild_dataset_components\u001b[0;34m(index, errors, encode_cf, squeeze, log, read_keys, time_dims, extra_coords, cache_geo_coords)\u001b[0m\n\u001b[1;32m 693\u001b[0m fbks\u001b[38;5;241m.\u001b[39mappend(fbk)\n\u001b[1;32m 694\u001b[0m error_message \u001b[38;5;241m+\u001b[39m\u001b[38;5;241m=\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;124m filter_by_keys=\u001b[39m\u001b[38;5;132;01m%r\u001b[39;00m\u001b[38;5;124m\"\u001b[39m \u001b[38;5;241m%\u001b[39m fbk\n\u001b[0;32m--> 695\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m DatasetBuildError(error_message, key, fbks)\n\u001b[1;32m 696\u001b[0m short_name \u001b[38;5;241m=\u001b[39m data_var\u001b[38;5;241m.\u001b[39mattributes\u001b[38;5;241m.\u001b[39mget(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mGRIB_shortName\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mparamId_\u001b[39m\u001b[38;5;132;01m%d\u001b[39;00m\u001b[38;5;124m\"\u001b[39m \u001b[38;5;241m%\u001b[39m param_id)\n\u001b[1;32m 697\u001b[0m var_name \u001b[38;5;241m=\u001b[39m data_var\u001b[38;5;241m.\u001b[39mattributes\u001b[38;5;241m.\u001b[39mget(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mGRIB_cfVarName\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124munknown\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n", "\u001b[0;31mDatasetBuildError\u001b[0m: multiple values for unique key, try re-open the file with one of:\n filter_by_keys={'stepType': 'instant'}\n filter_by_keys={'stepType': 'max'}\n filter_by_keys={'stepType': 'accum'}" ] } ], "source": [ "import xarray as xr\n", "\n", "ds = xr.open_dataset(filename, engine=\"cfgrib\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "La fonction échoue. Comme l'indique le message d'erreur, c'est dû au fait que plusieurs variables sont fournit avec plusieurs type de valeure :\n", "\n", "- la valeur instantané\n", "- la valeur maximum\n", "- la valeur accumulée" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "skipping variable: paramId==0 shortName='unknown'\n", "Traceback (most recent call last):\n", " File \"/home/ubuntu/.local/share/hatch/env/virtual/antoinetavant-github-io/vsXjhu16/antoinetavant-github-io/lib/python3.10/site-packages/cfgrib/dataset.py\", line 701, in build_dataset_components\n", " dict_merge(variables, coord_vars)\n", " File \"/home/ubuntu/.local/share/hatch/env/virtual/antoinetavant-github-io/vsXjhu16/antoinetavant-github-io/lib/python3.10/site-packages/cfgrib/dataset.py\", line 629, in dict_merge\n", " raise DatasetBuildError(\n", "cfgrib.dataset.DatasetBuildError: key present and new value is different: key='step' value=Variable(dimensions=('step',), data=array([0., 1., 2., 3., 4., 5., 6.])) new_value=Variable(dimensions=('step',), data=array([1., 2., 3., 4., 5., 6.]))\n", "skipping variable: paramId==167 shortName='t2m'\n", "Traceback (most recent call last):\n", " File \"/home/ubuntu/.local/share/hatch/env/virtual/antoinetavant-github-io/vsXjhu16/antoinetavant-github-io/lib/python3.10/site-packages/cfgrib/dataset.py\", line 701, in build_dataset_components\n", " dict_merge(variables, coord_vars)\n", " File \"/home/ubuntu/.local/share/hatch/env/virtual/antoinetavant-github-io/vsXjhu16/antoinetavant-github-io/lib/python3.10/site-packages/cfgrib/dataset.py\", line 629, in dict_merge\n", " raise DatasetBuildError(\n", "cfgrib.dataset.DatasetBuildError: key present and new value is different: key='heightAboveGround' value=Variable(dimensions=(), data=10.0) new_value=Variable(dimensions=(), data=2.0)\n", "skipping variable: paramId==260242 shortName='r2'\n", "Traceback (most recent call last):\n", " File \"/home/ubuntu/.local/share/hatch/env/virtual/antoinetavant-github-io/vsXjhu16/antoinetavant-github-io/lib/python3.10/site-packages/cfgrib/dataset.py\", line 701, in build_dataset_components\n", " dict_merge(variables, coord_vars)\n", " File \"/home/ubuntu/.local/share/hatch/env/virtual/antoinetavant-github-io/vsXjhu16/antoinetavant-github-io/lib/python3.10/site-packages/cfgrib/dataset.py\", line 629, in dict_merge\n", " raise DatasetBuildError(\n", "cfgrib.dataset.DatasetBuildError: key present and new value is different: key='heightAboveGround' value=Variable(dimensions=(), data=10.0) new_value=Variable(dimensions=(), data=2.0)\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
<xarray.Dataset> Size: 113MB\n",
       "Dimensions:            (step: 7, latitude: 717, longitude: 1121)\n",
       "Coordinates:\n",
       "    time               datetime64[ns] 8B ...\n",
       "  * step               (step) timedelta64[ns] 56B 00:00:00 01:00:00 ... 06:00:00\n",
       "    heightAboveGround  float64 8B ...\n",
       "  * latitude           (latitude) float64 6kB 55.4 55.38 55.35 ... 37.53 37.5\n",
       "  * longitude          (longitude) float64 9kB -12.0 -11.97 ... 15.98 16.0\n",
       "    valid_time         (step) datetime64[ns] 56B ...\n",
       "    meanSea            float64 8B ...\n",
       "Data variables:\n",
       "    wdir10             (step, latitude, longitude) float32 23MB ...\n",
       "    si10               (step, latitude, longitude) float32 23MB ...\n",
       "    u10                (step, latitude, longitude) float32 23MB ...\n",
       "    v10                (step, latitude, longitude) float32 23MB ...\n",
       "    prmsl              (step, latitude, longitude) float32 23MB ...\n",
       "Attributes:\n",
       "    GRIB_edition:            2\n",
       "    GRIB_centre:             lfpw\n",
       "    GRIB_centreDescription:  French Weather Service - Toulouse\n",
       "    GRIB_subCentre:          0\n",
       "    Conventions:             CF-1.7\n",
       "    institution:             French Weather Service - Toulouse\n",
       "    history:                 2024-05-21T12:01 GRIB to CDM+CF via cfgrib-0.9.1...
" ], "text/plain": [ " Size: 113MB\n", "Dimensions: (step: 7, latitude: 717, longitude: 1121)\n", "Coordinates:\n", " time datetime64[ns] 8B ...\n", " * step (step) timedelta64[ns] 56B 00:00:00 01:00:00 ... 06:00:00\n", " heightAboveGround float64 8B ...\n", " * latitude (latitude) float64 6kB 55.4 55.38 55.35 ... 37.53 37.5\n", " * longitude (longitude) float64 9kB -12.0 -11.97 ... 15.98 16.0\n", " valid_time (step) datetime64[ns] 56B ...\n", " meanSea float64 8B ...\n", "Data variables:\n", " wdir10 (step, latitude, longitude) float32 23MB ...\n", " si10 (step, latitude, longitude) float32 23MB ...\n", " u10 (step, latitude, longitude) float32 23MB ...\n", " v10 (step, latitude, longitude) float32 23MB ...\n", " prmsl (step, latitude, longitude) float32 23MB ...\n", "Attributes:\n", " GRIB_edition: 2\n", " GRIB_centre: lfpw\n", " GRIB_centreDescription: French Weather Service - Toulouse\n", " GRIB_subCentre: 0\n", " Conventions: CF-1.7\n", " institution: French Weather Service - Toulouse\n", " history: 2024-05-21T12:01 GRIB to CDM+CF via cfgrib-0.9.1..." ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ds = xr.open_dataset(filename, engine=\"cfgrib\", backend_kwargs={\"filter_by_keys\": {'stepType': 'instant'}})\n", "ds" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Premières difficultées\n", "\n", "Comme vous pouvez le voir lors de l'étapes précédente :\n", "\n", "- un DataSet Xarray a bien été retournée\n", "- ce DataSet ne présente que 5 variables concernant principalement les parameters du vent à 10m. Vous pouvez utiliser la sortie de la cellule précédentes pour inspecter les attributes et les méta-données des coordinée et des variables.\n", "- plusieurs messages d'erreurs indiquent des incompatibilitées entre la valeure de l'altitude ainsi que pour les valeures.\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Solution \n", "\n", "La solution pour corriger ce problème est de filter les variables concaténé en DataSet. On pourra\n", "\n", "1. Selectionner une variable directement\n", "2. Filtrer sur le champ de l'altitude" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 1. Selection de la variable\n", "\n", "Cette methode est la plus simple, mais necessite de connaitre le nom de la variable." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
<xarray.Dataset> Size: 23MB\n",
       "Dimensions:            (step: 7, latitude: 717, longitude: 1121)\n",
       "Coordinates:\n",
       "    time               datetime64[ns] 8B ...\n",
       "  * step               (step) timedelta64[ns] 56B 00:00:00 01:00:00 ... 06:00:00\n",
       "    heightAboveGround  float64 8B ...\n",
       "  * latitude           (latitude) float64 6kB 55.4 55.38 55.35 ... 37.53 37.5\n",
       "  * longitude          (longitude) float64 9kB -12.0 -11.97 ... 15.98 16.0\n",
       "    valid_time         (step) datetime64[ns] 56B ...\n",
       "Data variables:\n",
       "    u10                (step, latitude, longitude) float32 23MB ...\n",
       "Attributes:\n",
       "    GRIB_edition:            2\n",
       "    GRIB_centre:             lfpw\n",
       "    GRIB_centreDescription:  French Weather Service - Toulouse\n",
       "    GRIB_subCentre:          0\n",
       "    Conventions:             CF-1.7\n",
       "    institution:             French Weather Service - Toulouse\n",
       "    history:                 2024-05-21T12:01 GRIB to CDM+CF via cfgrib-0.9.1...
" ], "text/plain": [ " Size: 23MB\n", "Dimensions: (step: 7, latitude: 717, longitude: 1121)\n", "Coordinates:\n", " time datetime64[ns] 8B ...\n", " * step (step) timedelta64[ns] 56B 00:00:00 01:00:00 ... 06:00:00\n", " heightAboveGround float64 8B ...\n", " * latitude (latitude) float64 6kB 55.4 55.38 55.35 ... 37.53 37.5\n", " * longitude (longitude) float64 9kB -12.0 -11.97 ... 15.98 16.0\n", " valid_time (step) datetime64[ns] 56B ...\n", "Data variables:\n", " u10 (step, latitude, longitude) float32 23MB ...\n", "Attributes:\n", " GRIB_edition: 2\n", " GRIB_centre: lfpw\n", " GRIB_centreDescription: French Weather Service - Toulouse\n", " GRIB_subCentre: 0\n", " Conventions: CF-1.7\n", " institution: French Weather Service - Toulouse\n", " history: 2024-05-21T12:01 GRIB to CDM+CF via cfgrib-0.9.1..." ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ds_u10 = xr.open_dataset(filename, engine=\"cfgrib\", backend_kwargs={\"filter_by_keys\": {\"shortName\": \"10u\"}})\n", "ds_u10" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 2. Filtrer par altitude\n", "\n", "Cette methode permet de selectionner les variables qui sont a la même altitude." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
<xarray.Dataset> Size: 77MB\n",
       "Dimensions:     (step: 6, latitude: 717, longitude: 1121)\n",
       "Coordinates:\n",
       "    time        datetime64[ns] 8B ...\n",
       "  * step        (step) timedelta64[ns] 48B 01:00:00 02:00:00 ... 06:00:00\n",
       "    surface     float64 8B ...\n",
       "  * latitude    (latitude) float64 6kB 55.4 55.38 55.35 ... 37.55 37.53 37.5\n",
       "  * longitude   (longitude) float64 9kB -12.0 -11.97 -11.95 ... 15.95 15.98 16.0\n",
       "    valid_time  (step) datetime64[ns] 48B ...\n",
       "Data variables:\n",
       "    tp          (step, latitude, longitude) float32 19MB ...\n",
       "    sprate      (step, latitude, longitude) float32 19MB ...\n",
       "    ssrd        (step, latitude, longitude) float32 19MB ...\n",
       "    unknown     (step, latitude, longitude) float32 19MB ...\n",
       "Attributes:\n",
       "    GRIB_edition:            2\n",
       "    GRIB_centre:             lfpw\n",
       "    GRIB_centreDescription:  French Weather Service - Toulouse\n",
       "    GRIB_subCentre:          0\n",
       "    Conventions:             CF-1.7\n",
       "    institution:             French Weather Service - Toulouse\n",
       "    history:                 2024-05-21T12:01 GRIB to CDM+CF via cfgrib-0.9.1...
" ], "text/plain": [ " Size: 77MB\n", "Dimensions: (step: 6, latitude: 717, longitude: 1121)\n", "Coordinates:\n", " time datetime64[ns] 8B ...\n", " * step (step) timedelta64[ns] 48B 01:00:00 02:00:00 ... 06:00:00\n", " surface float64 8B ...\n", " * latitude (latitude) float64 6kB 55.4 55.38 55.35 ... 37.55 37.53 37.5\n", " * longitude (longitude) float64 9kB -12.0 -11.97 -11.95 ... 15.95 15.98 16.0\n", " valid_time (step) datetime64[ns] 48B ...\n", "Data variables:\n", " tp (step, latitude, longitude) float32 19MB ...\n", " sprate (step, latitude, longitude) float32 19MB ...\n", " ssrd (step, latitude, longitude) float32 19MB ...\n", " unknown (step, latitude, longitude) float32 19MB ...\n", "Attributes:\n", " GRIB_edition: 2\n", " GRIB_centre: lfpw\n", " GRIB_centreDescription: French Weather Service - Toulouse\n", " GRIB_subCentre: 0\n", " Conventions: CF-1.7\n", " institution: French Weather Service - Toulouse\n", " history: 2024-05-21T12:01 GRIB to CDM+CF via cfgrib-0.9.1..." ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ds_surface = xr.open_dataset(filename, engine=\"cfgrib\", backend_kwargs={\"filter_by_keys\": {'stepType': 'accum', \"typeOfLevel\": \"surface\"}})\n", "ds_surface" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
<xarray.Dataset> Size: 45MB\n",
       "Dimensions:            (step: 7, latitude: 717, longitude: 1121)\n",
       "Coordinates:\n",
       "    time               datetime64[ns] 8B ...\n",
       "  * step               (step) timedelta64[ns] 56B 00:00:00 01:00:00 ... 06:00:00\n",
       "    heightAboveGround  float64 8B ...\n",
       "  * latitude           (latitude) float64 6kB 55.4 55.38 55.35 ... 37.53 37.5\n",
       "  * longitude          (longitude) float64 9kB -12.0 -11.97 ... 15.98 16.0\n",
       "    valid_time         (step) datetime64[ns] 56B ...\n",
       "Data variables:\n",
       "    t2m                (step, latitude, longitude) float32 23MB ...\n",
       "    r2                 (step, latitude, longitude) float32 23MB ...\n",
       "Attributes:\n",
       "    GRIB_edition:            2\n",
       "    GRIB_centre:             lfpw\n",
       "    GRIB_centreDescription:  French Weather Service - Toulouse\n",
       "    GRIB_subCentre:          0\n",
       "    Conventions:             CF-1.7\n",
       "    institution:             French Weather Service - Toulouse\n",
       "    history:                 2024-05-21T12:01 GRIB to CDM+CF via cfgrib-0.9.1...
" ], "text/plain": [ " Size: 45MB\n", "Dimensions: (step: 7, latitude: 717, longitude: 1121)\n", "Coordinates:\n", " time datetime64[ns] 8B ...\n", " * step (step) timedelta64[ns] 56B 00:00:00 01:00:00 ... 06:00:00\n", " heightAboveGround float64 8B ...\n", " * latitude (latitude) float64 6kB 55.4 55.38 55.35 ... 37.53 37.5\n", " * longitude (longitude) float64 9kB -12.0 -11.97 ... 15.98 16.0\n", " valid_time (step) datetime64[ns] 56B ...\n", "Data variables:\n", " t2m (step, latitude, longitude) float32 23MB ...\n", " r2 (step, latitude, longitude) float32 23MB ...\n", "Attributes:\n", " GRIB_edition: 2\n", " GRIB_centre: lfpw\n", " GRIB_centreDescription: French Weather Service - Toulouse\n", " GRIB_subCentre: 0\n", " Conventions: CF-1.7\n", " institution: French Weather Service - Toulouse\n", " history: 2024-05-21T12:01 GRIB to CDM+CF via cfgrib-0.9.1..." ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ds_2m = xr.open_dataset(filename, engine=\"cfgrib\", backend_kwargs={\"filter_by_keys\": {\"typeOfLevel\": \"heightAboveGround\", \"level\": 2}})\n", "ds_2m\n" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "skipping variable: paramId==260065 shortName='gust'\n", "Traceback (most recent call last):\n", " File \"/home/ubuntu/.local/share/hatch/env/virtual/antoinetavant-github-io/vsXjhu16/antoinetavant-github-io/lib/python3.10/site-packages/cfgrib/dataset.py\", line 701, in build_dataset_components\n", " dict_merge(variables, coord_vars)\n", " File \"/home/ubuntu/.local/share/hatch/env/virtual/antoinetavant-github-io/vsXjhu16/antoinetavant-github-io/lib/python3.10/site-packages/cfgrib/dataset.py\", line 629, in dict_merge\n", " raise DatasetBuildError(\n", "cfgrib.dataset.DatasetBuildError: key present and new value is different: key='step' value=Variable(dimensions=('step',), data=array([0., 1., 2., 3., 4., 5., 6.])) new_value=Variable(dimensions=('step',), data=array([1., 2., 3., 4., 5., 6.]))\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "skipping variable: paramId==260646 shortName='efg10'\n", "Traceback (most recent call last):\n", " File \"/home/ubuntu/.local/share/hatch/env/virtual/antoinetavant-github-io/vsXjhu16/antoinetavant-github-io/lib/python3.10/site-packages/cfgrib/dataset.py\", line 701, in build_dataset_components\n", " dict_merge(variables, coord_vars)\n", " File \"/home/ubuntu/.local/share/hatch/env/virtual/antoinetavant-github-io/vsXjhu16/antoinetavant-github-io/lib/python3.10/site-packages/cfgrib/dataset.py\", line 629, in dict_merge\n", " raise DatasetBuildError(\n", "cfgrib.dataset.DatasetBuildError: key present and new value is different: key='step' value=Variable(dimensions=('step',), data=array([0., 1., 2., 3., 4., 5., 6.])) new_value=Variable(dimensions=('step',), data=array([1., 2., 3., 4., 5., 6.]))\n", "skipping variable: paramId==260647 shortName='nfg10'\n", "Traceback (most recent call last):\n", " File \"/home/ubuntu/.local/share/hatch/env/virtual/antoinetavant-github-io/vsXjhu16/antoinetavant-github-io/lib/python3.10/site-packages/cfgrib/dataset.py\", line 701, in build_dataset_components\n", " dict_merge(variables, coord_vars)\n", " File \"/home/ubuntu/.local/share/hatch/env/virtual/antoinetavant-github-io/vsXjhu16/antoinetavant-github-io/lib/python3.10/site-packages/cfgrib/dataset.py\", line 629, in dict_merge\n", " raise DatasetBuildError(\n", "cfgrib.dataset.DatasetBuildError: key present and new value is different: key='step' value=Variable(dimensions=('step',), data=array([0., 1., 2., 3., 4., 5., 6.])) new_value=Variable(dimensions=('step',), data=array([1., 2., 3., 4., 5., 6.]))\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
<xarray.Dataset> Size: 90MB\n",
       "Dimensions:            (step: 7, latitude: 717, longitude: 1121)\n",
       "Coordinates:\n",
       "    time               datetime64[ns] 8B ...\n",
       "  * step               (step) timedelta64[ns] 56B 00:00:00 01:00:00 ... 06:00:00\n",
       "    heightAboveGround  float64 8B ...\n",
       "  * latitude           (latitude) float64 6kB 55.4 55.38 55.35 ... 37.53 37.5\n",
       "  * longitude          (longitude) float64 9kB -12.0 -11.97 ... 15.98 16.0\n",
       "    valid_time         (step) datetime64[ns] 56B ...\n",
       "Data variables:\n",
       "    wdir10             (step, latitude, longitude) float32 23MB ...\n",
       "    si10               (step, latitude, longitude) float32 23MB ...\n",
       "    u10                (step, latitude, longitude) float32 23MB ...\n",
       "    v10                (step, latitude, longitude) float32 23MB ...\n",
       "Attributes:\n",
       "    GRIB_edition:            2\n",
       "    GRIB_centre:             lfpw\n",
       "    GRIB_centreDescription:  French Weather Service - Toulouse\n",
       "    GRIB_subCentre:          0\n",
       "    Conventions:             CF-1.7\n",
       "    institution:             French Weather Service - Toulouse\n",
       "    history:                 2024-05-21T12:01 GRIB to CDM+CF via cfgrib-0.9.1...
" ], "text/plain": [ " Size: 90MB\n", "Dimensions: (step: 7, latitude: 717, longitude: 1121)\n", "Coordinates:\n", " time datetime64[ns] 8B ...\n", " * step (step) timedelta64[ns] 56B 00:00:00 01:00:00 ... 06:00:00\n", " heightAboveGround float64 8B ...\n", " * latitude (latitude) float64 6kB 55.4 55.38 55.35 ... 37.53 37.5\n", " * longitude (longitude) float64 9kB -12.0 -11.97 ... 15.98 16.0\n", " valid_time (step) datetime64[ns] 56B ...\n", "Data variables:\n", " wdir10 (step, latitude, longitude) float32 23MB ...\n", " si10 (step, latitude, longitude) float32 23MB ...\n", " u10 (step, latitude, longitude) float32 23MB ...\n", " v10 (step, latitude, longitude) float32 23MB ...\n", "Attributes:\n", " GRIB_edition: 2\n", " GRIB_centre: lfpw\n", " GRIB_centreDescription: French Weather Service - Toulouse\n", " GRIB_subCentre: 0\n", " Conventions: CF-1.7\n", " institution: French Weather Service - Toulouse\n", " history: 2024-05-21T12:01 GRIB to CDM+CF via cfgrib-0.9.1..." ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ds_10m = xr.open_dataset(filename, engine=\"cfgrib\", backend_kwargs={\"read_keys\": [\"stepRange\"],\n", " \"filter_by_keys\": {\n", " \"typeOfLevel\": \"heightAboveGround\",\n", " \"level\": 10,\n", " }\n", " })\n", "ds_10m" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Pour les variables à 10 m d'altitude, nous avons un nouvel message d'erreur.\n", "C'est du au fait que certaines variables sont fournies avec un horizon de 0h (ce qui correspond a la valeur initiale donc) et d'autres uniquement à partir de 1h d'horizon.\n", "\n", "Actuellement, je n'ai pas réussi à filtrer sur ce parametre. \n", "Une solution est de laisser `cfgrib` determiner lui-même les differents groupes" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "number of datasets: 6\n" ] } ], "source": [ "import cfgrib\n", "list_dataset = cfgrib.open_datasets(filename)\n", "print(f\"number of datasets: {len(list_dataset)}\")" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
<xarray.Dataset> Size: 90MB\n",
       "Dimensions:            (step: 7, latitude: 717, longitude: 1121)\n",
       "Coordinates:\n",
       "    time               datetime64[ns] 8B 2024-05-21T03:00:00\n",
       "  * step               (step) timedelta64[ns] 56B 00:00:00 01:00:00 ... 06:00:00\n",
       "    heightAboveGround  float64 8B 10.0\n",
       "  * latitude           (latitude) float64 6kB 55.4 55.38 55.35 ... 37.53 37.5\n",
       "  * longitude          (longitude) float64 9kB -12.0 -11.97 ... 15.98 16.0\n",
       "    valid_time         (step) datetime64[ns] 56B 2024-05-21T03:00:00 ... 2024...\n",
       "Data variables:\n",
       "    u10                (step, latitude, longitude) float32 23MB ...\n",
       "    v10                (step, latitude, longitude) float32 23MB ...\n",
       "    si10               (step, latitude, longitude) float32 23MB ...\n",
       "    wdir10             (step, latitude, longitude) float32 23MB ...\n",
       "Attributes:\n",
       "    GRIB_edition:            2\n",
       "    GRIB_centre:             lfpw\n",
       "    GRIB_centreDescription:  French Weather Service - Toulouse\n",
       "    GRIB_subCentre:          0\n",
       "    Conventions:             CF-1.7\n",
       "    institution:             French Weather Service - Toulouse
" ], "text/plain": [ " Size: 90MB\n", "Dimensions: (step: 7, latitude: 717, longitude: 1121)\n", "Coordinates:\n", " time datetime64[ns] 8B 2024-05-21T03:00:00\n", " * step (step) timedelta64[ns] 56B 00:00:00 01:00:00 ... 06:00:00\n", " heightAboveGround float64 8B 10.0\n", " * latitude (latitude) float64 6kB 55.4 55.38 55.35 ... 37.53 37.5\n", " * longitude (longitude) float64 9kB -12.0 -11.97 ... 15.98 16.0\n", " valid_time (step) datetime64[ns] 56B 2024-05-21T03:00:00 ... 2024...\n", "Data variables:\n", " u10 (step, latitude, longitude) float32 23MB ...\n", " v10 (step, latitude, longitude) float32 23MB ...\n", " si10 (step, latitude, longitude) float32 23MB ...\n", " wdir10 (step, latitude, longitude) float32 23MB ...\n", "Attributes:\n", " GRIB_edition: 2\n", " GRIB_centre: lfpw\n", " GRIB_centreDescription: French Weather Service - Toulouse\n", " GRIB_subCentre: 0\n", " Conventions: CF-1.7\n", " institution: French Weather Service - Toulouse" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
<xarray.Dataset> Size: 45MB\n",
       "Dimensions:            (step: 7, latitude: 717, longitude: 1121)\n",
       "Coordinates:\n",
       "    time               datetime64[ns] 8B 2024-05-21T03:00:00\n",
       "  * step               (step) timedelta64[ns] 56B 00:00:00 01:00:00 ... 06:00:00\n",
       "    heightAboveGround  float64 8B 2.0\n",
       "  * latitude           (latitude) float64 6kB 55.4 55.38 55.35 ... 37.53 37.5\n",
       "  * longitude          (longitude) float64 9kB -12.0 -11.97 ... 15.98 16.0\n",
       "    valid_time         (step) datetime64[ns] 56B 2024-05-21T03:00:00 ... 2024...\n",
       "Data variables:\n",
       "    t2m                (step, latitude, longitude) float32 23MB ...\n",
       "    r2                 (step, latitude, longitude) float32 23MB ...\n",
       "Attributes:\n",
       "    GRIB_edition:            2\n",
       "    GRIB_centre:             lfpw\n",
       "    GRIB_centreDescription:  French Weather Service - Toulouse\n",
       "    GRIB_subCentre:          0\n",
       "    Conventions:             CF-1.7\n",
       "    institution:             French Weather Service - Toulouse
" ], "text/plain": [ " Size: 45MB\n", "Dimensions: (step: 7, latitude: 717, longitude: 1121)\n", "Coordinates:\n", " time datetime64[ns] 8B 2024-05-21T03:00:00\n", " * step (step) timedelta64[ns] 56B 00:00:00 01:00:00 ... 06:00:00\n", " heightAboveGround float64 8B 2.0\n", " * latitude (latitude) float64 6kB 55.4 55.38 55.35 ... 37.53 37.5\n", " * longitude (longitude) float64 9kB -12.0 -11.97 ... 15.98 16.0\n", " valid_time (step) datetime64[ns] 56B 2024-05-21T03:00:00 ... 2024...\n", "Data variables:\n", " t2m (step, latitude, longitude) float32 23MB ...\n", " r2 (step, latitude, longitude) float32 23MB ...\n", "Attributes:\n", " GRIB_edition: 2\n", " GRIB_centre: lfpw\n", " GRIB_centreDescription: French Weather Service - Toulouse\n", " GRIB_subCentre: 0\n", " Conventions: CF-1.7\n", " institution: French Weather Service - Toulouse" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
<xarray.Dataset> Size: 58MB\n",
       "Dimensions:            (step: 6, latitude: 717, longitude: 1121)\n",
       "Coordinates:\n",
       "    time               datetime64[ns] 8B 2024-05-21T03:00:00\n",
       "  * step               (step) timedelta64[ns] 48B 01:00:00 02:00:00 ... 06:00:00\n",
       "    heightAboveGround  float64 8B 10.0\n",
       "  * latitude           (latitude) float64 6kB 55.4 55.38 55.35 ... 37.53 37.5\n",
       "  * longitude          (longitude) float64 9kB -12.0 -11.97 ... 15.98 16.0\n",
       "    valid_time         (step) datetime64[ns] 48B 2024-05-21T04:00:00 ... 2024...\n",
       "Data variables:\n",
       "    gust               (step, latitude, longitude) float32 19MB ...\n",
       "    efg10              (step, latitude, longitude) float32 19MB ...\n",
       "    nfg10              (step, latitude, longitude) float32 19MB ...\n",
       "Attributes:\n",
       "    GRIB_edition:            2\n",
       "    GRIB_centre:             lfpw\n",
       "    GRIB_centreDescription:  French Weather Service - Toulouse\n",
       "    GRIB_subCentre:          0\n",
       "    Conventions:             CF-1.7\n",
       "    institution:             French Weather Service - Toulouse
" ], "text/plain": [ " Size: 58MB\n", "Dimensions: (step: 6, latitude: 717, longitude: 1121)\n", "Coordinates:\n", " time datetime64[ns] 8B 2024-05-21T03:00:00\n", " * step (step) timedelta64[ns] 48B 01:00:00 02:00:00 ... 06:00:00\n", " heightAboveGround float64 8B 10.0\n", " * latitude (latitude) float64 6kB 55.4 55.38 55.35 ... 37.53 37.5\n", " * longitude (longitude) float64 9kB -12.0 -11.97 ... 15.98 16.0\n", " valid_time (step) datetime64[ns] 48B 2024-05-21T04:00:00 ... 2024...\n", "Data variables:\n", " gust (step, latitude, longitude) float32 19MB ...\n", " efg10 (step, latitude, longitude) float32 19MB ...\n", " nfg10 (step, latitude, longitude) float32 19MB ...\n", "Attributes:\n", " GRIB_edition: 2\n", " GRIB_centre: lfpw\n", " GRIB_centreDescription: French Weather Service - Toulouse\n", " GRIB_subCentre: 0\n", " Conventions: CF-1.7\n", " institution: French Weather Service - Toulouse" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
<xarray.Dataset> Size: 23MB\n",
       "Dimensions:     (step: 7, latitude: 717, longitude: 1121)\n",
       "Coordinates:\n",
       "    time        datetime64[ns] 8B 2024-05-21T03:00:00\n",
       "  * step        (step) timedelta64[ns] 56B 00:00:00 01:00:00 ... 06:00:00\n",
       "    meanSea     float64 8B 0.0\n",
       "  * latitude    (latitude) float64 6kB 55.4 55.38 55.35 ... 37.55 37.53 37.5\n",
       "  * longitude   (longitude) float64 9kB -12.0 -11.97 -11.95 ... 15.95 15.98 16.0\n",
       "    valid_time  (step) datetime64[ns] 56B ...\n",
       "Data variables:\n",
       "    prmsl       (step, latitude, longitude) float32 23MB ...\n",
       "Attributes:\n",
       "    GRIB_edition:            2\n",
       "    GRIB_centre:             lfpw\n",
       "    GRIB_centreDescription:  French Weather Service - Toulouse\n",
       "    GRIB_subCentre:          0\n",
       "    Conventions:             CF-1.7\n",
       "    institution:             French Weather Service - Toulouse
" ], "text/plain": [ " Size: 23MB\n", "Dimensions: (step: 7, latitude: 717, longitude: 1121)\n", "Coordinates:\n", " time datetime64[ns] 8B 2024-05-21T03:00:00\n", " * step (step) timedelta64[ns] 56B 00:00:00 01:00:00 ... 06:00:00\n", " meanSea float64 8B 0.0\n", " * latitude (latitude) float64 6kB 55.4 55.38 55.35 ... 37.55 37.53 37.5\n", " * longitude (longitude) float64 9kB -12.0 -11.97 -11.95 ... 15.95 15.98 16.0\n", " valid_time (step) datetime64[ns] 56B ...\n", "Data variables:\n", " prmsl (step, latitude, longitude) float32 23MB ...\n", "Attributes:\n", " GRIB_edition: 2\n", " GRIB_centre: lfpw\n", " GRIB_centreDescription: French Weather Service - Toulouse\n", " GRIB_subCentre: 0\n", " Conventions: CF-1.7\n", " institution: French Weather Service - Toulouse" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
<xarray.Dataset> Size: 77MB\n",
       "Dimensions:     (step: 6, latitude: 717, longitude: 1121)\n",
       "Coordinates:\n",
       "    time        datetime64[ns] 8B 2024-05-21T03:00:00\n",
       "  * step        (step) timedelta64[ns] 48B 01:00:00 02:00:00 ... 06:00:00\n",
       "    surface     float64 8B 0.0\n",
       "  * latitude    (latitude) float64 6kB 55.4 55.38 55.35 ... 37.55 37.53 37.5\n",
       "  * longitude   (longitude) float64 9kB -12.0 -11.97 -11.95 ... 15.95 15.98 16.0\n",
       "    valid_time  (step) datetime64[ns] 48B 2024-05-21T04:00:00 ... 2024-05-21T...\n",
       "Data variables:\n",
       "    unknown     (step, latitude, longitude) float32 19MB nan nan nan ... nan nan\n",
       "    ssrd        (step, latitude, longitude) float32 19MB ...\n",
       "    tp          (step, latitude, longitude) float32 19MB ...\n",
       "    sprate      (step, latitude, longitude) float32 19MB ...\n",
       "Attributes:\n",
       "    GRIB_edition:            2\n",
       "    GRIB_centre:             lfpw\n",
       "    GRIB_centreDescription:  French Weather Service - Toulouse\n",
       "    GRIB_subCentre:          0\n",
       "    Conventions:             CF-1.7\n",
       "    institution:             French Weather Service - Toulouse
" ], "text/plain": [ " Size: 77MB\n", "Dimensions: (step: 6, latitude: 717, longitude: 1121)\n", "Coordinates:\n", " time datetime64[ns] 8B 2024-05-21T03:00:00\n", " * step (step) timedelta64[ns] 48B 01:00:00 02:00:00 ... 06:00:00\n", " surface float64 8B 0.0\n", " * latitude (latitude) float64 6kB 55.4 55.38 55.35 ... 37.55 37.53 37.5\n", " * longitude (longitude) float64 9kB -12.0 -11.97 -11.95 ... 15.95 15.98 16.0\n", " valid_time (step) datetime64[ns] 48B 2024-05-21T04:00:00 ... 2024-05-21T...\n", "Data variables:\n", " unknown (step, latitude, longitude) float32 19MB nan nan nan ... nan nan\n", " ssrd (step, latitude, longitude) float32 19MB ...\n", " tp (step, latitude, longitude) float32 19MB ...\n", " sprate (step, latitude, longitude) float32 19MB ...\n", "Attributes:\n", " GRIB_edition: 2\n", " GRIB_centre: lfpw\n", " GRIB_centreDescription: French Weather Service - Toulouse\n", " GRIB_subCentre: 0\n", " Conventions: CF-1.7\n", " institution: French Weather Service - Toulouse" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
<xarray.Dataset> Size: 19MB\n",
       "Dimensions:     (step: 6, latitude: 717, longitude: 1121)\n",
       "Coordinates:\n",
       "    time        datetime64[ns] 8B 2024-05-21T03:00:00\n",
       "  * step        (step) timedelta64[ns] 48B 01:00:00 02:00:00 ... 06:00:00\n",
       "    surface     float64 8B 0.0\n",
       "  * latitude    (latitude) float64 6kB 55.4 55.38 55.35 ... 37.55 37.53 37.5\n",
       "  * longitude   (longitude) float64 9kB -12.0 -11.97 -11.95 ... 15.95 15.98 16.0\n",
       "    valid_time  (step) datetime64[ns] 48B 2024-05-21T04:00:00 ... 2024-05-21T...\n",
       "Data variables:\n",
       "    unknown     (step, latitude, longitude) float32 19MB nan nan nan ... nan nan\n",
       "Attributes:\n",
       "    GRIB_edition:            2\n",
       "    GRIB_centre:             lfpw\n",
       "    GRIB_centreDescription:  French Weather Service - Toulouse\n",
       "    GRIB_subCentre:          0\n",
       "    Conventions:             CF-1.7\n",
       "    institution:             French Weather Service - Toulouse
" ], "text/plain": [ " Size: 19MB\n", "Dimensions: (step: 6, latitude: 717, longitude: 1121)\n", "Coordinates:\n", " time datetime64[ns] 8B 2024-05-21T03:00:00\n", " * step (step) timedelta64[ns] 48B 01:00:00 02:00:00 ... 06:00:00\n", " surface float64 8B 0.0\n", " * latitude (latitude) float64 6kB 55.4 55.38 55.35 ... 37.55 37.53 37.5\n", " * longitude (longitude) float64 9kB -12.0 -11.97 -11.95 ... 15.95 15.98 16.0\n", " valid_time (step) datetime64[ns] 48B 2024-05-21T04:00:00 ... 2024-05-21T...\n", "Data variables:\n", " unknown (step, latitude, longitude) float32 19MB nan nan nan ... nan nan\n", "Attributes:\n", " GRIB_edition: 2\n", " GRIB_centre: lfpw\n", " GRIB_centreDescription: French Weather Service - Toulouse\n", " GRIB_subCentre: 0\n", " Conventions: CF-1.7\n", " institution: French Weather Service - Toulouse" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "for ds in list_dataset:\n", " display(ds)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "On retrouve alors les differents champs indiquées dans la documentations :\n", "\n", "1. Le premier dataset correspond aux variables à 10 m d'altitude avec 7 pas de temps, donc les parametres de vent : `u10`, `v10`, `wdir10` et `si10`\n", "2. le deuxième dataset correspond aux variables à 2 m d'altitude avec 7 pas de temps, donc les parametres de temperature et humidité: `t2m`, `r2m`\n", "3. le troisième dataset correspond aux variables à 10 m d'altitude avec 6 pas de temps, donc les parametres de rafales de vent: `gust`, `efg10`, `nfg10`\n", "4. le quatrième dataset correspond aux variables à la surface de la mer avec 7 pas de temps, donc les parametres de pression au niveau de la mer: `prmsl`\n", "5. le cinquième dataset correspond aux variables à la surface du sol avec 7 pas de temps, donc les parametres de radiation solaire et de précipitation: `ssrd`, `sprate`, `tp`, et un `Unknown` qui n'est pas documenté\n", "6. le sixième dataset correspond aux variables à la surface du sol avec 6 pas de temps, mais il n'est pas documenté\n", "\n", "A partir de la documentation, on peut en deduire que les 2 variables non documentées sont:\n", "\n", "- Graupel (précipitation dite de neige roulée)\n", "- Nebulosity (nuage)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Conclusion\n", "\n", "Nous avons vu comment lire un fichier de prévision météo fournies par Météo France.\n", "\n", "Nous avons vu comment filtrer les variables pour ne garder que celles qui nous intéressent, en utilisant les paramètres de l'altitude.\n", "\n", "Nous avons finalement vu comment laisser `cfgrib` déterminer lui-même les groupes de variables.\n", "\n", "Les fichiers GRIB fournis par Météo France ne sont pas faciles à manipuler, en particulier à cause de la variété des indexes et des horizons de prévision toutes incluses dans un seul fichier.\n", "Nous verrons dans un prochain tutoriel comment utiliser l'API REST pour récupérer directement les variables qui nous intéressent." ] } ], "metadata": { "kernelspec": { "display_name": "dev", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.10.12" } }, "nbformat": 4, "nbformat_minor": 2 }