La dernière fois, [dessinons un "front de type carte météorologique" par apprentissage automatique basé sur les données météorologiques (1)](https://qiita.com/m-taque/items/80a87052fde00fb96fab "Basé sur les données météorologiques," J'ai posté l'ensemble du flux en essayant de dessiner un "front de type carte météo" par apprentissage automatique (1) "). La partie 2 résume l'histoire jusqu'à la visualisation des données numériques au format GPV.
J'utilise un environnement Mac OS. J'avais l'habitude d'étudier avec Mac book pro et iPhone (Pythonista), mais je l'ai acheté lors du renouvellement du Mac mini. En conséquence, il était bon d'augmenter la mémoire.
Mac mini(2018) Processeur Intel Core i7 6 cœurs à 3,2 GHz Mémoire DDR4 de 32 Go à 2667 MHz
OS macOS Catalina Quand il a été introduit pour la première fois, c'était un mojave d'une génération.
Bien qu'atom soit inclus dans l'environnement de développement intégré, je ne l'utilise pas beaucoup. Parce que c'est la génération qui est arrivée à tout avec vi ...
** Les fronts ** sont analysés par l'Agence météorologique et sont représentés dans ** Asian Ground Analysis Map (ASAS) ** et ** Breaking Weather Map (SPAS) **.
À propos de la carte météo de la page d'accueil de l'Agence météorologique
À titre d'exemple, celui de 21h00 UTC le 2 décembre 2019 est affiché.
C'est la ** carte météo ** que nous visons.
D'autre part, les données météorologiques obtenues cette fois de l'Université de Kyoto sont le ** Global Forecast Model (GSM) **, qui est l'un des modèles de prévision numérique de l'Agence météorologique.
Veuillez voir ci-dessous pour des explications telles que les prévisions numériques. Quelle est la prévision numérique sur le site Web de l'Agence météorologique
Les données GSM comprennent des données sur des facteurs météorologiques tels que ** température ** et ** pression **, mais je ne sais pas où ** est la ligne de front **. On peut dire que cet apprentissage automatique consiste à apprendre de ces données GSM qu '«il reconnaît où la ligne de front doit être tracée et trace la ligne de front» comme ** carte météo **.
Ensuite, ciblons les données de l'heure initiale du GSM. En effet, c'est le même que l'heure cible lorsque l'Agence météorologique analyse et crée la carte météorologique, et on pense que presque les mêmes conditions météorologiques sont exprimées.
La ligne de front est la frontière entre des groupes aériens aux propriétés différentes, et généralement c'est la limite entre ** air chaud ** et ** air froid **, mais lorsque vous visualisez les données météorologiques, il semble qu'une telle frontière existe partout. Je vais.
Tout d'abord, comment décidez-vous où tracer la ligne de front? Il n'y a pas beaucoup d'histoire spécifique dans les livres spécialisés sur la météorologie, mais j'ai trouvé que le livre de référence pour l'examen de prévisionniste météorologique a une telle description (dans l'examen de prévisionniste météorologique, regardez la carte météo). L'analyse de première ligne est un grand genre en raison du problème de dessin des fronts météorologiques).
[Texte Easy Pass de Meteorological Forecaster](https://www.amazon.co.jp/ Texte Easy Pass de Meteorological Forecaster-% E3% 80% 88 Compétences pratiques> / 4774149950 / ref = pd_sbs_14_img_1 / 355-1239468-1368320? _encoding = UTF8 & pd_rd_i = 4774149950 & pd_rd_r = 5f510193-a636-44b6-9ee7-011e7278ba9c & pd_rd_w = wCuCw & pd_rd_wg = ZGywm & pf_rd_p = ca22fd73-0f1e-4b39-9917-c84a20b3f3a8 & pf_rd_r = R77VP37VM7V6TX7BMPWE & psc = 1 & refRID = R77VP37VM7V6TX7BMPWE « météo Texte du Forecaster Easy Pass ")
selon lui,
Il semble tracer une ligne de front sur cette base. Donc, il semble bon d'utiliser les éléments météorologiques qui correspondent à ceux-ci.
pygrib est une bibliothèque capable de lire les fichiers au format GRIB2. Par exemple, la méthode d'installation est expliquée par les ancêtres suivants.
Préparer un environnement pour toucher les fichiers au format grib2 avec python (édition Docker)
ʻOuvrez le fichier avec la méthode open` pour obtenir l'objet.
pygrib-open.py
import pygrib
import sys
import numpy as np
import math
(Omis)
# GRIB file settings.
_sourcedir = "./hogehoge/"
_GSMfilename = _sourcedir + "Z__C_RJTD_" + _yearstr + _monstr + _daystr + _hrstr + "0000_GSM_GPV_Rgl_FD0000_grib2.bin"
# Open GRIB file
grbs = pygrib.open(_GSMfilename)
Pour _yearstr
, _monstr
, _daystr
et _hrstr
, indiquez l'année, le mois, le jour et l'heure cibles sous forme de chaînes de caractères.
Extrayez les données souhaitées de l'objet grbs
en utilisant la méthode select
avec quelques paramètres.
Cette fois, nous en utiliserons trois, parameterName
, level
et ForecastTime
.
Les noms de paramètres spécifiques varient en fonction de l'institution qui publie les données et du modèle météorologique. Dans le cas des données publiées par l'Agence météorologique japonaise
Site Web de l'Agence météorologique: Informations techniques sur les matériaux de distribution
Comme expliqué dans, n'est-il pas censé utiliser pygrib, et que doit-on spécifier pour parameterName? Je ne peux pas vous en parler.
Tableau 2-1. Paramètre spécifié pour parameterName
Paramètre spécifié | Contenu |
---|---|
Pressure reduced to MSL | Pression de correction du niveau de la mer((Unité Pa) |
Temperature | Température (notez qu'il s'agit d'une température absolue) |
Relative humidity | Humidité relative |
Vertical velocity [pressure] | Vitesse verticale du vent (coordonnées de pression) |
u-component of wind | Composante est-ouest de la vitesse horizontale du vent |
v-component of wind | Composante nord-sud de la vitesse horizontale du vent |
Geopotential height | Altitude géopotentielle |
Low cloud cover | Moins de nuages de nuages |
Medium cloud cover | Montant du nuage moyen |
High cloud cover | Nuage supérieur |
Total cloud cover | Volume total du cloud |
Tableau 2-2. Paramètres de spécification de niveau
Paramètre spécifié | Contenu |
---|---|
850 | 850hPa données de surface |
700 | Données de surface 700hPa |
500 | Données sur une surface de 500hPa |
300 | Données de surface 300hPa |
0 | Données de surface du sol (utilisées à la pression de correction du niveau de la mer) |
2 | Données de surface du sol (utilisées pour la température et l'humidité relative) |
10 | Données de surface au sol (utilisées à la vitesse du vent horizontal) |
Tableau 2-3. Paramètres spécifiés de ForecastTime
Paramètre spécifié | Contenu |
---|---|
0 | Prévoir l'heure initiale |
6 | Données 6 heures après l'heure initiale |
12 | Données 12 heures après l'heure initiale |
(Suite à intervalles de 6 heures par la suite) |
En spécifiant une combinaison de ces éléments, vous pouvez extraire le type et l'altitude des données météorologiques que vous souhaitez utiliser à partir du fichier au format GRIB2.
pygrib-select.py
#- parameterName for select from GRIB file
letter_mslp = "Pressure reduced to MSL"
letter_tmp = "Temperature"
letter_rh = "Relative humidity"
letter_vv = "Vertical velocity [pressure]"
letter_wu = "u-component of wind"
letter_wv = "v-component of wind"
letter_gh = "Geopotential height"
letter_lc = "Low cloud cover"
letter_mc = "Medium cloud cover"
letter_hc = "High cloud cover"
letter_tc = "Total cloud cover"
#-- Surface
grb_tmp = grbs.select(parameterName=letter_tmp , level=2 , forecastTime=0)
grb_prs = grbs.select(parameterName=letter_mslp , level=0 , forecastTime=0)
grb_wu = grbs.select(parameterName=letter_wu , level=10, forecastTime=0)
grb_wv = grbs.select(parameterName=letter_wv , level=10, forecastTime=0)
grb_rh = grbs.select(parameterName=letter_rh , level=2 , forecastTime=0)
#-- 850 hPa level
grb_tmp85 = grbs.select(parameterName=letter_tmp , level=850 , forecastTime=0)
grb_wu85 = grbs.select(parameterName=letter_wu , level=850 , forecastTime=0)
grb_wv85 = grbs.select(parameterName=letter_wv , level=850 , forecastTime=0)
grb_rh85 = grbs.select(parameterName=letter_rh , level=850 , forecastTime=0)
grb_gh85 = grbs.select(parameterName=letter_gh , level=850 , forecastTime=0)
#-- 700 hPa level
grb_tmp70 = grbs.select(parameterName=letter_tmp , level=700 , forecastTime=0)
grb_rh70 = grbs.select(parameterName=letter_rh , level=700 , forecastTime=0)
grb_vv70 = grbs.select(parameterName=letter_vv , level=700 , forecastTime=0)
#-- 500 hPa level
grb_tmp50 = grbs.select(parameterName=letter_tmp , level=500 , forecastTime=0)
grb_wu50 = grbs.select(parameterName=letter_wu , level=500 , forecastTime=0)
grb_wv50 = grbs.select(parameterName=letter_wv , level=500 , forecastTime=0)
grb_rh50 = grbs.select(parameterName=letter_rh , level=500 , forecastTime=0)
grb_gh50 = grbs.select(parameterName=letter_gh , level=500 , forecastTime=0)
#-- 300 hPa level
grb_wu30 = grbs.select(parameterName=letter_wu , level=300 , forecastTime=0)
grb_wv30 = grbs.select(parameterName=letter_wv , level=300 , forecastTime=0)
grb_rh30 = grbs.select(parameterName=letter_rh , level=300 , forecastTime=0)
#-- Cloud coverage
grb_lc = grbs.select(parameterName=letter_lc , forecastTime=0)
grb_mc = grbs.select(parameterName=letter_mc , forecastTime=0)
grb_hc = grbs.select(parameterName=letter_hc , forecastTime=0)
grb_tc = grbs.select(parameterName=letter_tc , forecastTime=0)
Par exemple, les données de température sur la surface 850hPa sont accessibles sous la forme de grb_tmp85.values
.
Metpy est un projet qui dispose de divers outils liés à la météo.
[Page d'accueil Metpy](https://unidata.github.io/MetPy/latest/index.html «Metpy»)
May, R. M., Arms, S. C., Marsh, P., Bruning, E., Leeman, J. R., Goebbert, K., Thielen, J. E., and Bruick, Z., 2020: MetPy: A Python Package for Meteorological Data. Version 1.0.0rc1, Unidata, Accessed 14 January 2020. [Available online at https://github.com/Unidata/MetPy.] doi:10.5065/D6WW7G29.
Le ** niveau de température équivalent ** doit être dérivé par calcul des valeurs de ** température ** et ** humidité relative ** obtenues directement à partir de GPV, mais la bibliothèque de calcul suivante incluse dans le calcul de MetPy est utilisée. Il peut être calculé facilement.
Calculer la ** température du point de rosée ** à partir de `` rosée_rh ** température ** et ** humidité relative ** ʻEquivalent_potential_temperature
** Le niveau de température équivalent ** est calculé à partir de ** température du point de rosée **, ** pression **, ** température **.
Puisque la position de la ligne de front est apprise à partir de la carte météorologique de rupture, il est nécessaire de faire correspondre le format et la plage de dessin de la carte image visualisée avec la carte météorologique de rupture.
Puisque la terre est une sphère, vous savez qu'il existe différentes méthodes pour créer une carte plate, mais si vous regardez de près la carte météorologique préliminaire, elle est écrite plus étroite vers les latitudes plus élevées.
Les cartes météorologiques pour bulletins (SPAS) sont basées sur une projection stéréo polaire plutôt que sur une projection Mercator. Les informations techniques suivantes fournies par l'Agence météorologique comprennent ** "La carte est projetée à l'aide d'une projection stéréo polaire basée sur 60 degrés de latitude nord et 140 degrés de longitude est." ** Il y a une description qui. Information technique sur les matériaux de distribution (météorologie) n ° 358 Ces informations seront ensuite utilisées lors de la superposition des données sur la carte à l'aide du fond de carte matplotlib.
Je n'avais pas d'autre choix que de lire ceci sur la carte météorologique de rupture. Les paramètres de Basemap sont la latitude et la longitude du coin inférieur gauche et supérieur droit. J'ai compris la valeur spécifiée par ** Trial and Error ** comment elle est réellement imagée.
Le résultat est le suivant. Le point de base de la stéréo polaire est spécifié par lat_0 et lon_0. La latitude et la longitude en bas à gauche sont (115 ° E, 9 ° N) et la partie supérieure droite est (178 ° E, 54 ° N).
python
Basemap(projection='stere', llcrnrlat=9, urcrnrlat=54, llcrnrlon=115, urcrnrlon=178, lat_0=60, lon_0=140, resolution='i' )
Sur cette base, j'ai dessiné la pression au sol (pression de correction du niveau de la mer) de UTC à 12h00 le 2 décembre. Le graphique des temps de rupture est ci-dessous.
Le GSM étant à l'origine des données mondiales, il y a suffisamment de données pour couvrir tout ce qui se trouve sur la terre, mais seule cette plage est utilisée. Je me sens un peu inutile. Bien qu'il s'agisse d'une carte visualisée, il y a des endroits où les bords sont un peu plus inquiétants que la carte météo, mais ce n'est pas grave.
Je ne pense pas que vous ayez plus besoin d'expliquer matplotlib.
Les données météorologiques sont des données numériques alignées (latitude, longitude) sur la surface du sol ou sur une surface isobare à haute pression. Ceci est visualisé de sorte que CNN soit facile à apprendre, plutôt que d'être facile à voir pour les humains.
Il existe des cartes de contour et des diagrammes isobares pour visualiser des données bidimensionnelles. Dans les prévisions météorologiques, la gamme de couleurs de la température est silencieusement changée entre l'été et l'hiver, mais cette fois, compte tenu de l'apprentissage, nous la garderons dans la même gamme tout au long de l'année.
value_range.py
levels_prs = np.arange(930.0,1080.0,4.0) #Pression de correction du niveau de la mer 930-Intervalle 1080hPa 4hPa
levels_tmp = np.arange(210,316,2) #Température(Kelvin) 210-Intervalle 316K 2K
levels_tmps = np.arange(-35,45,2) #Température(Celsius)-Intervalle de 35 ° C à 45 ° C 2 ° C
levels_dp = np.arange(0,80,10) #Température du point de rosée(Celsius)Non utilisé pour la visualisation
levels_dp2 = np.arange(0,3,1) #Humidité(Celsius)0 ° C à 3 ° C intervalle de 1 ° C
levels_vv = np.arange(-5,5,0.5) #Vitesse verticale(P/s) -5P/s-5P/s 0.5P/intervalle de s
levels_ept = np.arange(200,400,3) #Température équivalente(Kelvin) 200-Intervalle 400K 3K
levels_cld = np.arange(-20,110,5) #Volume du cloud(%) 0-110
levels_rh = np.arange(0.0,110.0,5) #Humidité relative(%) 0-110 5%intervalle
levels_gh_300 = np.arange(7000,10000,40) #Altitude géopotentielle 7000-Intervalle de 10000m 40m
levels_gh_500 = np.arange(4500,6200,40) #Altitude géopotentielle 4500-6200m intervalle de 40m
levels_gh_850 = np.arange(1000,2000,40) #Altitude géopotentielle 1000-Intervalle de 2000m à 40m
levels_gh_700 = np.arange(2000,4000,40) #Altitude géopotentielle 2000-Intervalle de 4000m à 40m
Les types suivants d'entrées CNN sont utilisés cette fois.
windmap
def windmap( u , v , values , levels , cmap , _save_filename , values2 , levels2 ):
# u,v Composante est-ouest de la vitesse du vent, composante nord-sud de la vitesse du vent
#valeurs données de pression
#valeurs2 données de température
# levels,niveaux de coloration 2
#carte des couleurs cmap
# _save_nom de fichier Enregistrer le nom de fichier
fig,ax = plt.subplots(figsize=(6,5.8)) #Créer un diagramme
plt.subplots_adjust(left=0.01, right=0.98, top=0.99, bottom=0.01) #Ajuster les marges
#Créer une carte de projection stéréo polaire avec Basemap
m = Basemap(projection='stere', llcrnrlat=9, urcrnrlat=54, llcrnrlon=115, urcrnrlon=178, lat_0=60, lon_0=140, resolution='i' )
m.drawparallels(np.arange(-80.,81.,10.)) #Tracez la ligne de latitude par incréments de 10 °
m.drawmeridians(np.arange(-180.,181.,10.)) #Tracez une ligne de longitude par incréments de 10 °
m.drawcoastlines() #Dessinez un littoral
lons_s = lons[::5, ::5] #Les points de dessin Kazeyaha sont sautés par 5 éléments
lats_s = lats[::5, ::5] #Les points de dessin Kazeyaha sont sautés par 5 éléments
x , y = m(lons, lats) #Conversion de la latitude et de la longitude en coordonnées de dessin de fond de carte
xs , ys = m(lons_s, lats_s) #Conversion de la latitude et de la longitude en coordonnées de dessin de fond de carte
us = u[::5, ::5] #Les données de vent (composante est-ouest) sont ignorées par 5 éléments
vs = v[::5, ::5] #Les données de vent (composante nord-sud) sont ignorées par 5 éléments
m.contour( x , y , values , levels=levels , linewidths=0.7 , colors='k' )
#Créer des courbes de niveau pour les valeurs
m.contour( x , y , values2 , levels=levels2 , linewidths=0.3 , colors='k' )
#Créer des courbes de niveau pour les valeurs2
m.contourf( x , y , values2 , levels2 , cmap=cmap )
#Carte de contour couleur(values2)Créer par écrasement
m.barbs( xs , ys , us , vs , length=4.5 )
#Créer une figure Yaha en écrasant
fig.savefig(_save_filename)
Surface 850hPa ** Niveau de température équivalent ** Tout d'abord, il y a une quantité appelée ** niveau de température **, qui est la température lorsque l'air d'intérêt est porté à 1000 hPa. Lorsque l'air descend et la compression adiabatique, la température augmente, et quand elle augmente et l'expansion adiabatique se dilate, la température diminue. La quantité d'un tel concept est utilisée car il est difficile de comparer l'énergie thermique de l'air à moins qu'elle ne soit comparée à la même pression. De plus, si l'air contient de la vapeur d'eau, il libère de la chaleur latente et monte en température à mesure que la température baisse et se condense. Par conséquent, la quantité qui prend en compte la condensation de la vapeur d'eau est appelée le ** niveau de température équivalent **. Un indice qui évalue simultanément «la chaleur et l'humidité» lorsque vous entendez dans les prévisions météorologiques, comme à la fin de la saison des pluies, «de l'air chaud et humide viendra du sud et il pleuvra très fortement pour stimuler la ligne de front». est. Bien qu'il s'agisse d'un candidat pour la ** première ligne **, la zone où le niveau de température équivalent change soudainement est une zone prometteuse pour les candidats de première ligne.
Surface 700hPa ** Humidité ** L'humidité est la différence entre la température et la température du point de rosée. Puisque la température du point de rosée est la température à laquelle la vapeur d'eau se condense, plus ce ** nombre d'humidité ** est petit, plus il est facile pour l'air de se condenser, c'est-à-dire que la quantité de vapeur d'eau est proche de la quantité de vapeur d'eau saturée, indiquant que l'air est humide. Dans la carte météorologique de grande hauteur publiée par l'Agence météorologique, la partie où l'humidité est de 3 ° C ou moins est tissée et est désignée comme ** zone humide **. Au voisinage du centre de la dépression et ** devant le front chaud **, l'air est souvent humide et pluvieux.
Surface 700hPa ** Vent vertical ** La vitesse verticale du vent représente le mouvement vertical de l'air. Il peut monter lorsque l'air se rassemble et qu'il n'y a nulle part où aller, ou lorsqu'il frappe une pente de montagne. Lorsqu'elle monte, la température baisse et lorsqu'elle atteint la température du point de rosée, la vapeur d'eau contenue dans l'air se condense. Puisqu'il s'agit du début de l'activité des précipitations, les vents verticaux sont étroitement liés à l'activité des précipitations. De plus, ** le développement de basses pressions tempérées nécessite la montée de l'air le long de la surface avant chaude à l'avant et la chute de l'air le long du front froid à l'arrière **, donc un vent vertical est requis pour les phénomènes météorologiques y compris l'avant. Est grandement impliqué.
Ceux-ci sont visualisés par les sources suivantes. Par rapport à la précédente, il n'y a pas de carte Yaha et une autre carte de contour.
drawmap
def drawmap( values , levels , cmap , _save_filename ) :
fig,ax = plt.subplots(figsize=(6,5.8))
plt.subplots_adjust(left=0.01, right=0.98, top=0.99, bottom=0.01)
m = Basemap(projection='stere', llcrnrlat=9, urcrnrlat=54, llcrnrlon=115, urcrnrlon=178, lat_0=60, lon_0=140, resolution='i' )
m.drawparallels(np.arange(-80.,81.,10.))
m.drawmeridians(np.arange(-180.,181.,10.))
m.drawcoastlines()
x , y = m(lons, lats)
#
m.contour( x , y , values , levels=levels , linewidths=0.5 , colors='k' )
m.contourf( x , y , values , levels , cmap=cmap )
#
fig.savefig(_save_filename)
GSM effectue les valeurs initiales quatre fois par jour. Les heures sont 0 heures, 6 heures, 12 heures et 18 heures en UTC. En revanche, des cartes météo de rupture sont créées toutes les 3 heures sauf à minuit. En d'autres termes, en même temps, la valeur initiale et la carte météo sont alignées trois fois à 6h00, 12h00 et 18h00. J'ai décidé de faire des entrées et des données sur les enseignants pendant 3 ans.
Ci-dessous, une vidéo de janvier et août 2019. Les données ont été téléchargées à partir de la base de données GPV publiée par l'Institute for Living Areas de l'Université de Kyoto.
[Base de données sur les zones de survie de l'Institut de recherche sur la survie de l'Université de Kyoto](http://database.rish.kyoto-u.ac.jp/arch/jmadata/gpv-original.html "Base de données sur les zones de survie de l'Institut de recherche sur la survie de l'Université de Kyoto" Données de l'agence météorologique )
Je n'ai pas changé la gamme de couleurs, vous pouvez donc voir la différence entre l'été et l'hiver. Contrairement à un diagramme de visualisation normal, cela devient un bruit d'apprentissage, je n'ai donc pas ajouté de légende.
Vent / pression / température au sol janvier 2019 (le rouge est plus chaud, le bleu est plus froid) Vent / pression / température au sol août 2019 (le rouge est plus chaud, le bleu est plus froid) 850hPa Vent / Pression / Température Janvier 2019 (le rouge est plus chaud, le bleu est plus froid) 850hPa Vent / Pression / Température Août 2019 (le rouge est plus chaud, le bleu est plus froid) Vent / Pression / Température 500hPa Janvier 2019 (le rouge est plus chaud, le bleu est plus froid) Vent / Pression / Température 500hPa Août 2019 (le rouge est plus chaud, le bleu est plus froid) 850hPa température équivalente janvier 2019 (plus rouge est plus chaud et plus humide) 850hPa température équivalente août 2019 (plus rouge est plus chaud et plus humide) Humidité 700hPa Janvier 2019 (plus bleu, humidité inférieure = humide) Humidité 700hPa Août 2019 (plus bleu, humidité inférieure = humide) 700hPa Vent vertical janvier 2019 (le rouge est un flux ascendant, le bleu est un flux descendant) 700hPa Vent vertical d'août 2019 (le rouge est un flux ascendant, le bleu est un flux descendant)
Carte météo de rupture janvier 2019 Carte météo de rupture août 2019
Cette fois, c'est devenu très long, mais j'ai posté jusqu'à la visualisation des données météorologiques, qui est l'entrée pour l'apprentissage automatique. La prochaine fois, je publierai sur la façon d'extraire la ligne de front de la carte météorologique préliminaire, qui sont les données de l'enseignant pour l'apprentissage automatique.
[La prochaine fois: dessinons un "front de type carte météorologique" par apprentissage automatique basé sur les données météorologiques (3)](https://qiita.com/m-taque/items/4d5bb45e6b5dc42dc833 " Dessinons un "front de type carte météo" par apprentissage automatique (3) ")
C'est un peu flou, mais cela ouvre le fichier GRIB2 et répertorie les données qu'il contient.
>>> import pygrib
>>> grbs=pygrib.open("Z__C_RJTD_20181209000000_GSM_GPV_Rgl_FD0000_grib2.bin")
>>> for grb in grbs:
... grb
...
1:Pressure reduced to MSL:Pa (instant):regular_ll:meanSea:level 0:fcst time 0 hrs:from 201812090000
2:Surface pressure:Pa (instant):regular_ll:surface:level 0:fcst time 0 hrs:from 201812090000
3:10 metre U wind component:m s**-1 (instant):regular_ll:heightAboveGround:level 10 m:fcst time 0 hrs:from 201812090000
4:10 metre V wind component:m s**-1 (instant):regular_ll:heightAboveGround:level 10 m:fcst time 0 hrs:from 201812090000
5:2 metre temperature:K (instant):regular_ll:heightAboveGround:level 2 m:fcst time 0 hrs:from 201812090000
6:2 metre relative humidity:% (instant):regular_ll:heightAboveGround:level 2 m:fcst time 0 hrs:from 201812090000
7:Low cloud cover:% (instant):regular_ll:surface:level 0:fcst time 0 hrs:from 201812090000
8:Medium cloud cover:% (instant):regular_ll:surface:level 0:fcst time 0 hrs:from 201812090000
9:High cloud cover:% (instant):regular_ll:surface:level 0:fcst time 0 hrs:from 201812090000
10:Total cloud cover:% (instant):regular_ll:surface:level 0:fcst time 0 hrs:from 201812090000
11:Geopotential Height:gpm (instant):regular_ll:isobaricInhPa:level 100000.0 Pa:fcst time 0 hrs:from 201812090000
12:U component of wind:m s**-1 (instant):regular_ll:isobaricInhPa:level 100000.0 Pa:fcst time 0 hrs:from 201812090000
13:V component of wind:m s**-1 (instant):regular_ll:isobaricInhPa:level 100000.0 Pa:fcst time 0 hrs:from 201812090000
(Omis)
98:Vertical velocity:Pa s**-1 (instant):regular_ll:isobaricInhPa:level 2000.0 Pa:fcst time 0 hrs:from 201812090000
99:Geopotential Height:gpm (instant):regular_ll:isobaricInhPa:level 1000.0 Pa:fcst time 0 hrs:from 201812090000
100:U component of wind:m s**-1 (instant):regular_ll:isobaricInhPa:level 1000.0 Pa:fcst time 0 hrs:from 201812090000
101:V component of wind:m s**-1 (instant):regular_ll:isobaricInhPa:level 1000.0 Pa:fcst time 0 hrs:from 201812090000
102:Temperature:K (instant):regular_ll:isobaricInhPa:level 1000.0 Pa:fcst time 0 hrs:from 201812090000
103:Vertical velocity:Pa s**-1 (instant):regular_ll:isobaricInhPa:level 1000.0 Pa:fcst time 0 hrs:from 201812090000
Ici, par exemple, pour obtenir le `` paramaterName '' du 100ème enregistrement (il semble qu'il s'agisse de messages dans GRIB),
>>> f=grbs[100]
>>> f['parameterName']
'u-component of wind'
Vous pouvez vous y référer en spécifiant `` parameterName '' pour la clé.
pygrib documentation
Si vous regardez, le premier champ après la liste est à l'origine un paramètre appelé nom
, donc il ressemble à grb = grbs.select (nom = 'U composant du vent') [0]
Il semble être utilisé pour le supprimer.
Cependant, à un moment donné, j'ai rencontré un message dans lequel le nom n'était pas défini et, à la suite de diverses recherches, je suis arrivé à parameterName. Je n'ai pas rencontré de message qui n'a pas cet ensemble jusqu'à présent.
En passant, la liste des clés de chaque message peut être récupérée comme suit.
>>> f.keys()
['globalDomain', 'GRIBEditionNumber', 'tablesVersionLatest', 'grib2divider', 'is_efas', 'angleSubdivisions', 'missingValue', 'ieeeFloats', 'isHindcast', 'section0Length', 'identifier', 'discipline', 'editionNumber', 'totalLength', 'sectionNumber', 'section1Length', 'numberOfSection', 'centre', 'centreDescription', 'subCentre', 'tablesVersion', 'masterDir', 'localTablesVersion', 'significanceOfReferenceTime', 'year', 'month', 'day', 'hour', 'minute', 'second', 'dataDate', 'julianDay', 'dataTime', 'productionStatusOfProcessedData', 'typeOfProcessedData', 'md5Section1', 'selectStepTemplateInterval', 'selectStepTemplateInstant', 'stepType', 'is_chemical', 'is_chemical_distfn', 'is_aerosol', 'is_aerosol_optical', 'setCalendarId', 'deleteCalendarId', 'is_uerra', 'sectionNumber', 'grib2LocalSectionPresent', 'deleteLocalDefinition', 'sectionNumber', 'gridDescriptionSectionPresent', 'section3Length', 'numberOfSection', 'sourceOfGridDefinition', 'numberOfDataPoints', 'numberOfOctectsForNumberOfPoints', 'interpretationOfNumberOfPoints', 'PLPresent', 'gridDefinitionTemplateNumber', 'gridDefinitionDescription', 'shapeOfTheEarth', 'scaleFactorOfRadiusOfSphericalEarth', 'scaledValueOfRadiusOfSphericalEarth', 'scaleFactorOfEarthMajorAxis', 'scaledValueOfEarthMajorAxis', 'scaleFactorOfEarthMinorAxis', 'scaledValueOfEarthMinorAxis', 'radius', 'Ni', 'Nj', 'basicAngleOfTheInitialProductionDomain', 'mBasicAngle', 'angleMultiplier', 'mAngleMultiplier', 'subdivisionsOfBasicAngle', 'angleDivisor', 'latitudeOfFirstGridPoint', 'longitudeOfFirstGridPoint', 'resolutionAndComponentFlags', 'resolutionAndComponentFlags1', 'resolutionAndComponentFlags2', 'iDirectionIncrementGiven', 'jDirectionIncrementGiven', 'uvRelativeToGrid', 'resolutionAndComponentFlags6', 'resolutionAndComponentFlags7', 'resolutionAndComponentFlags8', 'ijDirectionIncrementGiven', 'latitudeOfLastGridPoint', 'longitudeOfLastGridPoint', 'iDirectionIncrement', 'jDirectionIncrement', 'scanningMode', 'iScansNegatively', 'jScansPositively', 'jPointsAreConsecutive', 'alternativeRowScanning', 'iScansPositively', 'scanningMode5', 'scanningMode6', 'scanningMode7', 'scanningMode8', 'g2grid', 'latitudeOfFirstGridPointInDegrees', 'longitudeOfFirstGridPointInDegrees', 'latitudeOfLastGridPointInDegrees', 'longitudeOfLastGridPointInDegrees', 'iDirectionIncrementInDegrees', 'jDirectionIncrementInDegrees', 'latLonValues', 'latitudes', 'longitudes', 'distinctLatitudes', 'distinctLongitudes', 'gridType', 'md5Section3', 'sectionNumber', 'section4Length', 'numberOfSection', 'NV', 'neitherPresent', 'productDefinitionTemplateNumber', 'genVertHeightCoords', 'parameterCategory', 'parameterNumber', 'parameterUnits', 'parameterName', 'typeOfGeneratingProcess', 'backgroundProcess', 'generatingProcessIdentifier', 'hoursAfterDataCutoff', 'minutesAfterDataCutoff', 'indicatorOfUnitOfTimeRange', 'stepUnits', 'forecastTime', 'startStep', 'endStep', 'stepRange', 'stepTypeInternal', 'validityDate', 'validityTime', 'typeOfFirstFixedSurface', 'unitsOfFirstFixedSurface', 'nameOfFirstFixedSurface', 'scaleFactorOfFirstFixedSurface', 'scaledValueOfFirstFixedSurface', 'typeOfSecondFixedSurface', 'unitsOfSecondFixedSurface', 'nameOfSecondFixedSurface', 'scaleFactorOfSecondFixedSurface', 'scaledValueOfSecondFixedSurface', 'pressureUnits', 'typeOfLevel', 'level', 'bottomLevel', 'topLevel', 'tempPressureUnits', 'paramIdECMF', 'paramId', 'shortNameECMF', 'shortName', 'unitsECMF', 'units', 'nameECMF', 'name', 'cfNameECMF', 'cfName', 'cfVarNameECMF', 'cfVarName', 'modelName', 'ifsParam', 'PVPresent', 'deletePV', 'md5Section4', 'lengthOfHeaders', 'md5Headers', 'sectionNumber', 'section5Length', 'numberOfSection', 'numberOfValues', 'dataRepresentationTemplateNumber', 'packingType', 'referenceValue', 'referenceValueError', 'binaryScaleFactor', 'decimalScaleFactor', 'optimizeScaleFactor', 'bitsPerValue', 'typeOfOriginalFieldValues', 'md5Section5', 'sectionNumber', 'section6Length', 'numberOfSection', 'bitMapIndicator', 'bitmapPresent', 'md5Section6', 'sectionNumber', 'section7Length', 'numberOfSection', 'codedValues', 'values', 'packingError', 'unpackedError', 'maximum', 'minimum', 'average', 'numberOfMissing', 'standardDeviation', 'skewness', 'kurtosis', 'isConstant', 'changeDecimalPrecision', 'decimalPrecision', 'setBitsPerValue', 'getNumberOfValues', 'scaleValuesBy', 'offsetValuesBy', 'productType', 'md5Section7', 'section8Length', 'analDate', 'validDate']
Bien qu'il ne soit pas utilisé dans ce dessin de première ligne, c'est le parameterName utilisé lors de la visualisation du MSM.
Paramètre spécifié | Contenu |
---|---|
Pressure reduced to MSL | Pression de correction du niveau de la mer |
Temperature | Température |
Relative humidity | Humidité relative |
Vertical velocity [pressure] | Vitesse verticale (coordonnées de pression) |
u-component of wind | Composante est-ouest de la vitesse du vent |
v-component of wind | Composante nord-sud de la vitesse du vent |
Geopotential height | Altitude géopotentielle |
Total precipitation | Précipitation |
Downward short-wave radiation flux | Rayonnement à ondes courtes descendant |
Low cloud cover | Moins de nuages de nuages |
Medium cloud cover | Montant du nuage moyen |
High cloud cover | Nuage supérieur |
Total cloud cover | Volume total du cloud |
Recommended Posts