[PYTHON] Lire le fichier GRIB2 de l'Agence météorologique sur pygrib

introduction

Ici, les fichiers suivants dans Liste d'exemples de données de l'Agence météorologique sont ciblés.

--Modèle de prévision numérique global GPV (GSM) --Meso modèle de prévision numérique GPV (MSM) --Modèle de prévision numérique local GPV (LFM)

Les deux adoptent un format binaire appelé GRIB2.

Environnement de vérification

J'ai utilisé l'environnement virtuel d'Anaconda.

Installation de la bibliothèque

Comme le titre de l'article le suggère, utilisez pygrib. Peut être installé à partir de pip ou conda.

conda install -c conda-forge pygrib

Exemple d'implémentation

Obtenir la température [℃] du stade Jingu (35,6745, 139,7169) (point de maille le plus proche) à chaque instant (JST) à partir du fichier échantillon (MSM) de l'Agence météorologique.

from datetime import timedelta
import pygrib
import pandas as pd

time_diff = timedelta(hours=9)

gpv_file = pygrib.open("Z__C_RJTD_20171205000000_MSM_GPV_Rjp_Lsurf_FH00-15_grib2.bin")
t_messages = gpv_file.select(name="Temperature")

df = pd.DataFrame({
    "validDate": [msg.validDate + time_diff for msg in t_messages],
    "temperature": [
        msg.data(
            lat1=35.6745-0.025,
            lat2=35.6745+0.025,
            lon1=139.7169-0.03125,
            lon2=139.7169+0.03125,
        )[0][0][0] - 273.15 for msg in t_messages
    ]
})

print(df)

↓ Résultat de sortie

             validDate  temperature
0  2017-12-05 09:00:00     9.810709
1  2017-12-05 10:00:00    11.409219
2  2017-12-05 11:00:00    12.358789
3  2017-12-05 12:00:00    13.116861
4  2017-12-05 13:00:00    13.770517
5  2017-12-05 14:00:00    14.698541
6  2017-12-05 15:00:00    14.488687
7  2017-12-05 16:00:00    13.063196
8  2017-12-05 17:00:00    11.467722
9  2017-12-05 18:00:00    10.320886
10 2017-12-05 19:00:00     9.592111
11 2017-12-05 20:00:00     8.797952
12 2017-12-05 21:00:00     8.171686
13 2017-12-05 22:00:00     7.832407
14 2017-12-05 23:00:00     7.461450
15 2017-12-06 00:00:00     6.884409

Explication de la mise en œuvre

Connexion de fichier

pygrib.open Créez une interface avec le fichier en utilisant la classe.

import pygrib

gpv_file = pygrib.open("Z__C_RJTD_20171205000000_MSM_GPV_Rjp_Lsurf_FH00-15_grib2.bin")

--L'instance pygrib.open elle-même est l'itérateur de l'instance pygrib.gribmessage --Peut être utilisé comme interface pour extraire des informations spécifiques contenues dans un fichier en tant qu'instance pygrib.gribmessage ou sa liste (réutilisable)

méthode de message

Prend l'argument N (int) et renvoie la Nième (1 origine) instance pygrib.gribmessage sur l'itérateur.

In[]


gpv_file.message(2)

Out[]


2:Surface pressure:Pa (instant):regular_ll:surface:level 0:fcst time 0 hrs:from 201712050000

sélectionner la méthode

Prend un argument sous la forme «** kwargs» et renvoie une liste de «pygrib.gribmessage» qui correspond à cette condition.

Si plusieurs conditions de recherche sont spécifiées, elles sont évaluées en tant que conditions AND.

--1 condition

In[]


gpv_file.select(name="Temperature")

Out[]


[5:Temperature:K (instant):regular_ll:heightAboveGround:level 1.5 m:fcst time 0 hrs:from 201712050000,
 15:Temperature:K (instant):regular_ll:heightAboveGround:level 1.5 m:fcst time 1 hrs:from 201712050000,
 27:Temperature:K (instant):regular_ll:heightAboveGround:level 1.5 m:fcst time 2 hrs:from 201712050000,
 39:Temperature:K (instant):regular_ll:heightAboveGround:level 1.5 m:fcst time 3 hrs:from 201712050000,
 51:Temperature:K (instant):regular_ll:heightAboveGround:level 1.5 m:fcst time 4 hrs:from 201712050000,
 63:Temperature:K (instant):regular_ll:heightAboveGround:level 1.5 m:fcst time 5 hrs:from 201712050000,
 75:Temperature:K (instant):regular_ll:heightAboveGround:level 1.5 m:fcst time 6 hrs:from 201712050000,
 87:Temperature:K (instant):regular_ll:heightAboveGround:level 1.5 m:fcst time 7 hrs:from 201712050000,
 99:Temperature:K (instant):regular_ll:heightAboveGround:level 1.5 m:fcst time 8 hrs:from 201712050000,
 111:Temperature:K (instant):regular_ll:heightAboveGround:level 1.5 m:fcst time 9 hrs:from 201712050000,
 123:Temperature:K (instant):regular_ll:heightAboveGround:level 1.5 m:fcst time 10 hrs:from 201712050000,
 135:Temperature:K (instant):regular_ll:heightAboveGround:level 1.5 m:fcst time 11 hrs:from 201712050000,
 147:Temperature:K (instant):regular_ll:heightAboveGround:level 1.5 m:fcst time 12 hrs:from 201712050000,
 159:Temperature:K (instant):regular_ll:heightAboveGround:level 1.5 m:fcst time 13 hrs:from 201712050000,
 171:Temperature:K (instant):regular_ll:heightAboveGround:level 1.5 m:fcst time 14 hrs:from 201712050000,
 183:Temperature:K (instant):regular_ll:heightAboveGround:level 1.5 m:fcst time 15 hrs:from 201712050000]

--2 conditions

In[]


gpv_file.select(shortName="r", forecastTime=3)

Out[]


[40:Relative humidity:% (instant):regular_ll:heightAboveGround:level 1.5 m:fcst time 3 hrs:from 201712050000]

Les éléments qui peuvent être utilisés dans la pratique pour les conditions de recherche sont les suivants.

nom de l'article Type d'entrée
name str
shortName str
forecastTime(※) int
validDate datetime.datetime
parameterCategory int
parameterNumber(※※) int

Acquisition de valeur de données

Le pygrib.gribmessage extrait ci-dessus contient ** des données pour tous les maillages d'un certain temps et élément de données ** C'est inclus.

Variables principales

Nom de variable Moule Contenu
validDate datetime.datetime Date et heure de prévision(UTC)
analDate datetime.datetime Date et heure de référence de l'analyse des prévisions(UTC)
forecastTime int analDateDevalidDateDécalage horaire à
distinctLatitudes numpy.ndarray Liste des latitudes maillées(1 dimension)
distinctLongitudes numpy.ndarray Liste des longitudes de maillage(1 dimension)
values numpy.ndarray Liste des valeurs de données pour tous les maillages(2D)

méthode des latlons

Renvoie une liste des latitudes et longitudes de maillage pour chaque maillage. Les deux types de retour sont «numpy.ndarray».

In[]


message = gpv_file.message(2)
lats, lons = message.latlons()

Out[]


# lats
array([[47.6 , 47.6 , 47.6 , ..., 47.6 , 47.6 , 47.6 ],
       [47.55, 47.55, 47.55, ..., 47.55, 47.55, 47.55],
       [47.5 , 47.5 , 47.5 , ..., 47.5 , 47.5 , 47.5 ],
       ...,
       [22.5 , 22.5 , 22.5 , ..., 22.5 , 22.5 , 22.5 ],
       [22.45, 22.45, 22.45, ..., 22.45, 22.45, 22.45],
       [22.4 , 22.4 , 22.4 , ..., 22.4 , 22.4 , 22.4 ]])

# lons
array([[120.    , 120.0625, 120.125 , ..., 149.875 , 149.9375, 150.    ],
       [120.    , 120.0625, 120.125 , ..., 149.875 , 149.9375, 150.    ],
       [120.    , 120.0625, 120.125 , ..., 149.875 , 149.9375, 150.    ],
       ...,
       [120.    , 120.0625, 120.125 , ..., 149.875 , 149.9375, 150.    ],
       [120.    , 120.0625, 120.125 , ..., 149.875 , 149.9375, 150.    ],
       [120.    , 120.0625, 120.125 , ..., 149.875 , 149.9375, 150.    ]])

Il semble que l'ordre soit tel que le cas où il est écrit sous forme de matrice et le cas où il est affiché sur une carte correspondent visuellement.

méthode de données

Obtenez la valeur des données du maillage dans la plage des arguments «lat1» (latitude minimale), «lat2» (latitude maximale), «lon1» (longitude minimale) et «lon2» (longitude maximale) et la latitude / longitude de ce maillage. Faire. En ce qui concerne la valeur de retour, le "numpy.ndarray" bidimensionnel en forme de maillage de chaque valeur de données, latitude et longitude est un taple.

In[]


message.data(lat1=22.45, lat2=22.55, lon1=120.0625, lon2=120.1875)

Out[]


(array([[101985.52856445, 101985.52856445, 101985.52856445],
        [101985.52856445, 101985.52856445, 101985.52856445]]),
 array([[22.5 , 22.5 , 22.5 ],
        [22.45, 22.45, 22.45]]),
 array([[120.0625, 120.125 , 120.1875],
        [120.0625, 120.125 , 120.1875]]))

référence

Recommended Posts

Lire le fichier GRIB2 de l'Agence météorologique sur pygrib
Téléchargez les données éoliennes de l'Agence météorologique
Convertir le GRIB des coordonnées per-polaires du radar de l'Agence météorologique GPV en netCDF (norme CF / Radial)
Téléchargez les données éoliennes de l'Agence météorologique
Lire le fichier GRIB2 de l'Agence météorologique sur pygrib
Vérifier l'existence du fichier avec python
Lisons le fichier RINEX avec Python ①
Convertir le code de caractère du fichier avec Python3
Gratter les données pluviométriques de l'Agence météorologique et les afficher sur M5Stack
Modèle de script python pour lire le contenu du fichier
Lisez la puissance du compteur intelligent avec M5StickC (édition BP35C0-J11-T01)
Lisez le fichier csv avec le notebook jupyter et écrivez le graphique l'un sur l'autre
Une histoire sur l'obtention du champ Atom (télégramme XML) de l'Agence météorologique avec une tarte à la râpe et de le tweeter
[Python] Lisez le fichier csv et affichez la figure avec matplotlib
Lisez le fichier VTK et affichez la carte des couleurs avec jupyter.
Convertir le GRIB des coordonnées per-polaires du radar de l'Agence météorologique GPV en netCDF (norme CF / Radial)
Obtenez des informations de l'Agence météorologique et informez Slack des avertissements météorologiques dans les 23 quartiers de Tokyo
Traitez le contenu du fichier dans l'ordre avec un script shell
Comment faire une commande pour lire le fichier de paramètres avec pyramide
Mettre en forme le fichier CSV de "Fête nationale" du Cabinet Office avec des pandas
Lisez le fichier en Python avec un chemin relatif depuis le programme
L'idée d'alimenter le fichier de configuration avec un fichier python au lieu de yaml
Extraire le fichier xz avec python
Suivez la hiérarchie des fichiers avec fts
Téléchargez le fichier déployé avec appcfg.py
L'histoire du "trou" dans le fichier
Ouvrir le fichier avec l'application par défaut
[Reconnaissance d'image] Comment lire le résultat de l'annotation automatique avec VoTT
Modifiez le fichier du serveur de destination de la connexion SSH sur le serveur avec VS Code
Lisez l'image du graphique avec OpenCV et obtenez les coordonnées du point final du graphique
Ouvrez un fichier Excel en Python et coloriez la carte du Japon
Afficher le statut de l'infection COVID 19 au Japon avec Splunk (version GitHub)
Lisez le fichier avec python et supprimez les sauts de ligne [Notes sur la lecture du fichier]
Python / numpy> Lire le fichier de données avec la ligne de nom d'élément> Utiliser genfromtxt ()
Alignez la taille de la barre de couleurs avec matplotlib
Lisez le fichier ligne par ligne avec Python
Lisez le fichier ligne par ligne avec Python
Lisez le fichier en spécifiant le code de caractère.
La troisième nuit de la boucle avec pour
Lire tout le contenu de proc / [pid]
La deuxième nuit de la boucle avec pour
Essayez de réécrire le fichier avec la commande less
[Python] Récupère le code de caractère du fichier
Vérifiez la taille du fichier avec du -sh *
Lire l'implémentation de la minuterie globale ARM
Lire le fichier de données de caractères avec numpy
Téléchargez le fichier avec PHP [En construction]
[Python] Lire la ligne spécifiée dans le fichier
Compter le nombre de caractères avec écho
[Automation] Lire le courrier (fichier msg) avec Python
[Python3] Comprendre les bases des opérations sur les fichiers
Différentes façons de lire la dernière ligne d'un fichier csv en Python
[Bash] Passez le contenu du fichier aux variables pour chaque colonne avec while read
Remplacez la représentation unique du fichier texte lu par une étiquette (en utilisant GiNZA)