Letztes Mal [Zeichnen wir eine "Wetterkarten-ähnliche Front" durch maschinelles Lernen basierend auf Wetterdaten (1)](https://qiita.com/m-taque/items/80a87052fde00fb96fab "Basierend auf Wetterdaten" Ich habe den gesamten Ablauf als Versuch gepostet, durch maschinelles Lernen eine "wetterkartenähnliche Front" zu zeichnen (1) "). Teil 2 fasst die Geschichte bis zur Visualisierung numerischer Daten im GPV-Format zusammen.
Ich verwende eine Mac OS-Umgebung. Früher habe ich mit Mac Book Pro und iPhone (Pythonista) gelernt, aber ich habe es gekauft, als der Mac mini erneuert wurde. Infolgedessen war es gut, den Speicher zu erhöhen.
Mac mini(2018) Prozessor 3,2 GHz 6-Core Intel Core i7 Speicher 32 GB 2667 MHz DDR4
OS macOS Catalina Als es zum ersten Mal eingeführt wurde, war es ein Generationen alter Mojave.
Obwohl Atom in der integrierten Entwicklungsumgebung enthalten ist, verwende ich es nicht viel. Weil es die Generation ist, die mit vi ...
** Fronten ** werden von der Meteorologischen Agentur analysiert und in ** Asian Ground Analysis Map (ASAS) ** und ** Breaking Weather Map (SPAS) ** dargestellt.
Über die Wetterkarte der Meteorologischen Agentur
Als Beispiel wird der am 2. Dezember 2019 um 21:00 UTC angezeigt.
Dies ist die ** Wetterkarte **, die wir anstreben.
Andererseits sind die meteorologischen Daten, die diesmal von der Universität Kyoto erhalten wurden, ** Global Forecast Model (GSM) **, eines der numerischen Vorhersagemodelle der Meteorological Agency.
Erläuterungen wie numerische Vorhersagen finden Sie weiter unten. Wie lautet die numerische Vorhersage auf der Website der Meteorologischen Agentur
GSM-Daten enthalten Daten zu meteorologischen Faktoren wie ** Temperatur ** und ** Druck **, aber ich weiß nicht, wo ** die Frontlinie ** ist. Man kann sagen, dass dieses maschinelle Lernen aus diesen GSM-Daten lernen soll, dass "es erkennt, wo die Frontlinie gezogen werden soll und die Frontlinie zeichnet" wie ** Wetterkarte **.
Lassen Sie uns dann die Daten der Anfangszeit von GSM als Ziel festlegen. Dies liegt daran, dass dies der Zielzeit entspricht, zu dem die Wetterbehörde die Wetterkarte analysiert und erstellt, und es wird angenommen, dass fast dieselben Wetterbedingungen ausgedrückt werden.
Die Frontlinie ist die Grenze zwischen Luftgruppen mit unterschiedlichen Eigenschaften, und normalerweise ist es die Grenze zwischen ** warmer Luft ** und ** kalter Luft **, aber wenn Sie die Wetterdaten visualisieren, scheint es, dass eine solche Grenze überall existiert. Ich werde.
Wie entscheiden Sie zunächst, wo Sie die Frontlinie ziehen möchten? In den Fachbüchern zur Meteorologie gibt es nicht viel Spezifisches, aber ich fand heraus, dass das Nachschlagewerk für die meteorologische Vorhersageprüfung eine solche Beschreibung enthält (siehe in der meteorologischen Vorhersageprüfung die Wetterkarte). Die Frontline-Analyse ist aufgrund des Problems des Zeichnens von Wetterfronten ein großes Genre.
[Meteorological Forecaster Easy Pass-Text](https://www.amazon.co.jp/ Meteorological Forecaster Easy Pass-Text-% E3% 80% 88 Praktische Fähigkeiten> -Einfache Durchbruch-Meteorologische Prognoseprüfung Support Group / dp / 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 „Wetter Forecaster Easy Pass Text ")
demnach
Darauf scheint es eine Frontlinie zu ziehen. Es scheint also gut, die diesen entsprechenden meteorologischen Elemente zu verwenden.
pygrib ist eine Bibliothek, die Dateien im GRIB2-Format lesen kann. Die Installationsmethode wird beispielsweise von den folgenden Vorfahren erläutert.
Bereiten Sie eine Umgebung zum Berühren von Dateien im Grib2-Format mit Python vor (Docker Edition)
Verwenden Sie die Methode "open", um die Datei zu öffnen und das Objekt abzurufen.
pygrib-open.py
import pygrib
import sys
import numpy as np
import math
(Ausgelassen)
# 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)
Geben Sie für "_yearstr", "_monstr", "_daystr" und "_hrstr" das Zieljahr, den Monat, den Tag und die Stunde als Zeichenketten an.
Extrahieren Sie die gewünschten Daten aus dem Objekt grbs
, indem Sie die select
-Methode mit einigen Parametern verwenden.
Dieses Mal werden wir drei verwenden: "parameterName", "level" und "ForecastTime".
Bestimmte Parameternamen variieren je nach Institution, die die Daten veröffentlicht, und dem Wettermodell. Im Fall von Daten, die von der japanischen Wetterbehörde veröffentlicht wurden
Homepage der Meteorologischen Agentur: Technische Informationen zu Vertriebsmaterialien
Soll in pygrib nicht verwendet werden, und was sollte für parameterName angegeben werden? Ich kann dir nichts darüber erzählen.
Tabelle 2-1. Für parameterName angegebener Parameter
Angegebener Parameter | Inhalt |
---|---|
Pressure reduced to MSL | Korrekturdruck des Meeresspiegels((Pa Einheit) |
Temperature | Temperatur (Beachten Sie, dass es sich um eine absolute Temperatur handelt) |
Relative humidity | Relative Luftfeuchtigkeit |
Vertical velocity [pressure] | Vertikale Windgeschwindigkeit (Druckkoordinaten) |
u-component of wind | Ost-West-Komponente der horizontalen Windgeschwindigkeit |
v-component of wind | Nord-Süd-Komponente der horizontalen Windgeschwindigkeit |
Geopotential height | Geopotentialhöhe |
Low cloud cover | Geringere Wolkenwolkenmenge |
Medium cloud cover | Mittlere Wolkenwolkenmenge |
High cloud cover | Obere Wolkenwolkenmenge |
Total cloud cover | Gesamtwolkenvolumen |
Tabelle 2-2. Parameter der Levelspezifikation
Angegebener Parameter | Inhalt |
---|---|
850 | 850hPa Oberflächendaten |
700 | 700hPa Oberflächendaten |
500 | Daten auf 500hPa Oberfläche |
300 | 300hPa Oberflächendaten |
0 | Bodenoberflächendaten (verwendet bei Meeresspiegelkorrekturdruck) |
2 | Bodenoberflächendaten (verwendet für Temperatur und relative Luftfeuchtigkeit) |
10 | Bodenoberflächendaten (werden bei horizontaler Windgeschwindigkeit verwendet) |
Tabelle 2-3. Angegebene Parameter von ForecastTime
Angegebener Parameter | Inhalt |
---|---|
0 | Anfangszeit prognostizieren |
6 | Daten 6 Stunden nach der ersten Zeit |
12 | Daten 12 Stunden nach der ersten Zeit |
(Fortsetzung in Abständen von 6 Stunden danach) |
Durch Angabe einer Kombination aus diesen können Sie den Typ und die Höhe der Wetterdaten, die Sie verwenden möchten, aus der GRIB2-Formatdatei extrahieren.
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)
Beispielsweise kann auf die Temperaturdaten auf der 850hPa-Oberfläche in Form von "grb_tmp85.values" zugegriffen werden.
Metpy ist ein Projekt mit verschiedenen wetterbezogenen Tools.
[Metpy-Homepage](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.
Das ** äquivalente Temperaturniveau ** muss durch Berechnung aus den Werten von ** Temperatur ** und ** relativer Luftfeuchtigkeit ** abgeleitet werden, die direkt von GPV erhalten wurden. Es wird jedoch die folgende Berechnungsbibliothek verwendet, die in MetPys Berechnung enthalten ist. Es kann leicht berechnet werden.
Berechnen Sie die Taupunkttemperatur aus der Taupunkttemperatur und der relativen Luftfeuchtigkeit Berechnen Sie das ** äquivalente Temperaturniveau ** aus der "äquivalenten_Potentialtemperatur" ** Taupunkttemperatur **, ** Druck ** und ** Temperatur **.
Da die Position der Frontlinie aus der Bruchwetterkarte gelernt wird, ist es erforderlich, das Format und den Zeichenbereich der visualisierten Bildkarte mit der Bruchwetterkarte abzugleichen.
Da die Erde eine Kugel ist, wissen Sie, dass es verschiedene Methoden gibt, um eine flache Karte zu erstellen. Wenn Sie sich jedoch die vorläufige Wetterkarte genau ansehen, wird sie in Richtung höherer Breiten enger geschrieben.
Bulletin Weather Maps (SPAS) basieren eher auf einer polaren Stereoprojektion als auf einer Mercator-Projektion. Die folgenden technischen Informationen, die von der Meteorologischen Agentur bereitgestellt werden, umfassen ** "Die Karte wird mit einer polaren Stereoprojektion projiziert, die auf 60 Grad nördlicher Breite und 140 Grad östlicher Länge basiert." ** Es gibt eine Beschreibung, die. [Technische Informationen zu Verteilungsmaterialien (Meteorologische Ausgabe) Nr. 358](http://www.data.jma.go.jp/add/suishin/jyouhou/pdf/358.pdf "Technische Informationen zu Verteilungsmaterialien (Meteorologische Ausgabe)" Nr. 358 ") Diese Informationen werden dann verwendet, wenn die Daten auf der Karte mithilfe der Matplotlib-Grundkarte überlagert werden.
Ich hatte keine andere Wahl, als dies aus der aktuellen Wetterkarte zu lesen. Die Parameter der Grundkarte sind der Breiten- und Längengrad von links unten und rechts oben. Ich habe den Wert herausgefunden, der angibt, wie er tatsächlich mit ** Versuch und Irrtum ** abgebildet wird.
Das Ergebnis ist wie folgt. Der Basispunkt von Polar Stereo wird durch lat_0 und lon_0 angegeben. Der untere linke Breiten- und Längengrad beträgt (115 ° O, 9 ° N) und der obere rechte ist (178 ° E, 54 ° N).
python
Basemap(projection='stere', llcrnrlat=9, urcrnrlat=54, llcrnrlon=115, urcrnrlon=178, lat_0=60, lon_0=140, resolution='i' )
Auf dieser Grundlage habe ich am 2. Dezember um 12:00 Uhr den Bodendruck (Meeresspiegelkorrekturdruck) von UTC gemessen. Die Wetterkarte ist unten.
Da es sich bei GSM ursprünglich um globale Daten handelt, gibt es genügend Daten, um alles auf der Erde abzudecken, aber nur dieser Bereich wird verwendet. Ich fühle mich ein wenig verschwenderisch. Obwohl es sich um eine visualisierte Karte handelt, gibt es einige Stellen, an denen die Kanten etwas besorgniserregender sind als die Wetterkarte, aber das ist in Ordnung.
Ich glaube nicht, dass Sie mehr über Matplotlib erklären müssen.
Meteorologische Daten sind numerische Daten, die auf der Bodenoberfläche oder auf einer isobaren Hochdruckoberfläche (Breite, Länge) aufgereiht sind. Dies wird so visualisiert, dass CNN leicht zu erlernen ist, anstatt für Menschen leicht zu sehen.
Es gibt Konturkarten und isobare Diagramme zur Visualisierung zweidimensionaler Daten. In der Wettervorhersage ändert sich der Farbbereich der Temperatur zwischen Sommer und Winter leise, aber dieses Mal werden wir ihn, wenn wir lernen, das ganze Jahr über im gleichen Bereich halten.
value_range.py
levels_prs = np.arange(930.0,1080.0,4.0) #Meeresspiegelkorrekturdruck 930-1080hPa 4hPa Intervall
levels_tmp = np.arange(210,316,2) #Temperatur(Kelvin) 210-316K 2K Intervall
levels_tmps = np.arange(-35,45,2) #Temperatur(Celsius)-Intervall von 35 ° C bis 45 ° C und 2 ° C.
levels_dp = np.arange(0,80,10) #Taupunkttemperatur(Celsius)Wird nicht zur Visualisierung verwendet
levels_dp2 = np.arange(0,3,1) #Feuchtigkeit(Celsius)0 ° C bis 3 ° C 1 ° C Intervall
levels_vv = np.arange(-5,5,0.5) #Vertikale Geschwindigkeit(P/s) -5P/s-5P/s 0.5P/s Intervall
levels_ept = np.arange(200,400,3) #Äquivalente Temperatur(Kelvin) 200-400K 3K Intervall
levels_cld = np.arange(-20,110,5) #Wolkenvolumen(%) 0-110
levels_rh = np.arange(0.0,110.0,5) #Relative Luftfeuchtigkeit(%) 0-110 5%Intervall
levels_gh_300 = np.arange(7000,10000,40) #Geopotentialhöhe 7000-10000m 40m Intervall
levels_gh_500 = np.arange(4500,6200,40) #Geopotentialhöhe 4500-6200m 40m Intervall
levels_gh_850 = np.arange(1000,2000,40) #Geopotentialhöhe 1000-2000m 40m Intervall
levels_gh_700 = np.arange(2000,4000,40) #Geopotentialhöhe 2000-4000m 40m Intervall
Die folgenden Arten von CNN-Eingängen werden dieses Mal verwendet.
windmap
def windmap( u , v , values , levels , cmap , _save_filename , values2 , levels2 ):
# u,v Windgeschwindigkeit Ost-West-Komponente, Windgeschwindigkeit Nord-Süd-Komponente
#Werte Druckdaten
#Werte2 Temperaturdaten
# levels,Farbbereich der Ebene 2
#cmap Farbkarte
# _save_Dateiname Dateiname speichern
fig,ax = plt.subplots(figsize=(6,5.8)) #Erstellen Sie ein Diagramm
plt.subplots_adjust(left=0.01, right=0.98, top=0.99, bottom=0.01) #Passen Sie die Ränder an
#Erstellen Sie mit Basemap eine polare Stereo-Projektionskarte
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.)) #Zeichnen Sie die Breitengradlinie in Schritten von 10 °
m.drawmeridians(np.arange(-180.,181.,10.)) #Zeichnen Sie eine Längengradlinie in Schritten von 10 °
m.drawcoastlines() #Zeichne eine Küste
lons_s = lons[::5, ::5] #Kazeyaha Zeichenpunkte werden von 5 Elementen übersprungen
lats_s = lats[::5, ::5] #Kazeyaha Zeichenpunkte werden von 5 Elementen übersprungen
x , y = m(lons, lats) #Konvertieren Sie von Längen- und Breitengrad in Grundkarten-Zeichnungskoordinaten
xs , ys = m(lons_s, lats_s) #Konvertieren Sie von Längen- und Breitengrad in Grundkarten-Zeichnungskoordinaten
us = u[::5, ::5] #Winddaten (Ost-West-Komponente) werden von 5 Elementen übersprungen
vs = v[::5, ::5] #Winddaten (Nord-Süd-Komponente) werden von 5 Elementen übersprungen
m.contour( x , y , values , levels=levels , linewidths=0.7 , colors='k' )
#Erstellen Sie Konturlinien für Werte
m.contour( x , y , values2 , levels=levels2 , linewidths=0.3 , colors='k' )
#Erstellen Sie Konturlinien für Werte2
m.contourf( x , y , values2 , levels2 , cmap=cmap )
#Farbkonturkarte(values2)Erstellen Sie durch Überschreiben
m.barbs( xs , ys , us , vs , length=4.5 )
#Erstellen Sie eine Yaha-Figur, indem Sie sie überschreiben
fig.savefig(_save_filename)
850hPa Oberfläche ** Äquivalentes Temperaturniveau ** Zuallererst gibt es eine Menge, die als ** Temperaturniveau ** bezeichnet wird. Dies ist die Temperatur, bei der die interessierende Luft auf 1000 hPa gebracht wird. Wenn die Luft absinkt und sich adiabatisch komprimiert, steigt die Temperatur, und wenn sie steigt und sich die adiabatische Expansion ausdehnt, sinkt die Temperatur. Die Menge eines solchen Konzepts wird verwendet, weil es schwierig ist, die Wärmeenergie der Luft zu vergleichen, wenn sie nicht bei demselben Druck verglichen wird. Wenn die Luft Wasserdampf enthält, gibt sie außerdem latente Wärme ab und steigt in der Temperatur an, wenn die Temperatur sinkt und kondensiert. Daher wird die Menge, die die Koagulation von Wasserdampf berücksichtigt, als ** äquivalentes Temperaturniveau ** bezeichnet. Ein Index, der gleichzeitig "Wärme und Nässe" bewertet, wenn Sie in der Wettervorhersage hören, z. B. am Ende der Regenzeit, "dass warme und feuchte Luft aus dem Süden einströmt und sehr stark regnet, um die Frontlinie zu stimulieren." ist. Obwohl es sich um einen Kandidaten für die Front handelt, ist der Bereich, in dem sich das äquivalente Temperaturniveau plötzlich ändert, ein vielversprechender Bereich für den Kandidaten an der Front.
700hPa Oberfläche ** Luftfeuchtigkeit ** Die Luftfeuchtigkeit ist die Differenz zwischen Temperatur und Taupunkttemperatur. Da die Taupunkttemperatur die Temperatur ist, bei der Wasserdampf kondensiert, ist es für Luft umso leichter zu kondensieren, je kleiner diese ** Feuchtigkeitszahl ** ist, dh die Wasserdampfmenge liegt nahe an der Menge an gesättigtem Wasserdampf, was darauf hinweist, dass die Luft feucht ist. In der von der Meteorologischen Agentur veröffentlichten meteorologischen Hochhauskarte ist der Teil, in dem die Luftfeuchtigkeit 3 ° C oder weniger beträgt, gestrickt und als ** Feuchtgebiet ** ausgewiesen. In der Nähe der Mitte des Niederdrucks und ** vor der Warmfront ** ist die Luft oft feucht und regnerisch.
700hPa Oberfläche ** Vertikaler Wind ** Die vertikale Windgeschwindigkeit repräsentiert die vertikale Bewegung der Luft. Es kann steigen, wenn sich Luft sammelt und es keinen Ort gibt, an den man gehen kann, oder wenn es auf einen Berghang trifft. Wenn es steigt, sinkt die Temperatur und wenn es die Taupunkttemperatur erreicht, kondensiert der in der Luft enthaltene Wasserdampf. Da dies der Beginn der Niederschlagsaktivität ist, hängen vertikale Winde eng mit der Niederschlagsaktivität zusammen. Darüber hinaus erfordert ** die Entwicklung eines gemäßigten Niederdrucks den Luftanstieg entlang der Warmfrontfläche vorne und den Luftabfall entlang der Kaltfront hinten **, sodass für meteorologische Phänomene einschließlich der Front vertikaler Wind erforderlich ist. Ist stark involviert.
Diese werden durch die folgenden Quellen visualisiert. Im Vergleich zur vorherigen Karte gibt es keine Yaha-Karte und keine andere Konturkarte.
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 erstellt viermal täglich Anfangswerte. Die Zeiten sind 0 Uhr, 6 Uhr, 12 Uhr und 18 Uhr in UTC. Auf der anderen Seite werden alle 3 Stunden außer Mitternacht aktuelle Wetterkarten erstellt. Mit anderen Worten, gleichzeitig werden der Anfangswert und die Wetterkarte dreimal um 6:00, 12:00 und 18:00 Uhr ausgerichtet. Ich beschloss, 3 Jahre lang Eingabe- und Lehrerdaten zu erstellen.
Unten sehen Sie ein Video von Januar und August 2019. Die Daten wurden aus der GPV-Datenbank heruntergeladen, die vom Institut für Lebensräume der Universität Kyoto veröffentlicht wurde.
Überlebensgebietsdatenbank des Überlebensforschungsinstituts der Universität Kyoto
Ich habe den Farbbereich nicht geändert, sodass Sie den Unterschied zwischen Sommer und Winter erkennen können. Im Gegensatz zu einem normalen Visualisierungsdiagramm wird es zu einem Lerngeräusch, daher habe ich keine Legende hinzugefügt.
Bodenwind / Druck / Temperatur Januar 2019 (rot ist wärmer, blau ist kälter) Bodenwind / Druck / Temperatur August 2019 (rot ist wärmer, blau ist kälter) 850hPa Wind / Druck / Temperatur Januar 2019 (rot ist wärmer, blau ist kälter) 850hPa Wind / Druck / Temperatur August 2019 (rot ist wärmer, blau ist kälter) 500hPa Wind / Druck / Temperatur Januar 2019 (rot ist wärmer, blau ist kälter) 500hPa Wind / Druck / Temperatur August 2019 (rot ist wärmer, blau ist kälter) 850hPa äquivalente Temperatur Januar 2019 (roter ist wärmer und feuchter) 850hPa äquivalente Temperatur August 2019 (roter ist wärmer und feuchter) 700hPa Luftfeuchtigkeit Januar 2019 (blauer, niedrigere Luftfeuchtigkeit = nass) 700hPa Luftfeuchtigkeit August 2019 (blauer, niedrigere Luftfeuchtigkeit = nass) 700hPa Vertikaler Wind Januar 2019 (Rot ist Aufwärtsströmung, Blau ist Abwärtsströmung) 700hPa Vertikaler Wind August 2019 (Rot ist Aufwärtsströmung, Blau ist Abwärtsströmung)
Breaking Weather Chart Januar 2019 Breaking Weather Chart August 2019
Dieses Mal ist es sehr lang geworden, aber ich habe bis zur Visualisierung meteorologischer Daten gepostet, die die Eingabe für maschinelles Lernen sind. Das nächste Mal werde ich darüber berichten, wie man die Frontlinie aus der Wetterkarte extrahiert, die die Lehrerdaten für maschinelles Lernen enthält.
[Nächstes Mal: Zeichnen wir eine "Wetterkarten-ähnliche Front" durch maschinelles Lernen basierend auf Wetterdaten (3)](https://qiita.com/m-taque/items/4d5bb45e6b5dc42dc833 "Basierend auf Wetterdaten" Zeichnen wir durch maschinelles Lernen eine "wetterkartenähnliche Front" (3) ")
Es ist ein bisschen matschig, aber es öffnet die GRIB2-Datei und listet die darin enthaltenen Daten auf.
>>> 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
(Ausgelassen)
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
Hier zum Beispiel, um den paramaterName
des 100. Datensatzes zu erhalten (es scheint sich um Nachrichten in GRIB zu handeln),
>>> f=grbs[100]
>>> f['parameterName']
'u-component of wind'
Sie können darauf verweisen, indem Sie für den Schlüssel parameterName
angeben.
pygrib documentation Wenn Sie sich das ansehen, ist das erste Feld nach der Auflistung ursprünglich ein Parameter namens "Name". Es sieht also so aus, als ob "grb = grbs.select (name =" U-Komponente des Windes ") [0]" Es scheint verwendet zu werden, um es herauszunehmen.
Irgendwann stieß ich jedoch auf eine Nachricht, in der der Name nicht festgelegt war, und als Ergebnis verschiedener Suchvorgänge kam ich zu parameterName. Ich habe noch keine Nachricht gefunden, für die dieses Set noch nicht festgelegt ist.
Abgesehen davon kann die Liste der Schlüssel, über die jede Nachricht verfügt, wie folgt abgerufen werden.
>>> 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']
Obwohl es in dieser Frontlinienzeichnung nicht verwendet wird, ist es der Parametername, der bei der Visualisierung des MSM verwendet wird.
Angegebener Parameter | Inhalt |
---|---|
Pressure reduced to MSL | Korrekturdruck des Meeresspiegels |
Temperature | Temperatur |
Relative humidity | Relative Luftfeuchtigkeit |
Vertical velocity [pressure] | Vertikalgeschwindigkeit (Druckkoordinaten) |
u-component of wind | Ost-West-Komponente der Windgeschwindigkeit |
v-component of wind | Nord-Süd-Komponente der Windgeschwindigkeit |
Geopotential height | Geopotentialhöhe |
Total precipitation | Niederschlag |
Downward short-wave radiation flux | Kurzwellige Strahlung nach unten |
Low cloud cover | Geringere Wolkenwolkenmenge |
Medium cloud cover | Mittlere Wolkenwolkenmenge |
High cloud cover | Obere Wolkenwolkenmenge |
Total cloud cover | Gesamtwolkenvolumen |
Recommended Posts