{ "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": [ "
<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...
<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...
<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...
<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...
<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...
<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
<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
<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
<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
<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
<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