[PYTHON] Versuchen Sie, durch maschinelles Lernen basierend auf Wetterdaten eine "wetterkartenähnliche Front" zu zeichnen (2)

Zeichnen wir durch maschinelles Lernen anhand der Wetterdaten eine "wetterkartenähnliche Front". (2) Die Geschichte der Visualisierung der eingegebenen Wetterdaten

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.

0. Meine Umgebung

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.

Hard-und Software

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.

Entwicklungsumgebung

Obwohl Atom in der integrierten Entwicklungsumgebung enthalten ist, verwende ich es nicht viel. Weil es die Generation ist, die mit vi ...

1. Meteorologische Daten zur Frontlinie

1.1 Was ist das Ziel für das Zeichnen der Frontlinie?

** 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. SPAS_COLOR_201912021200.v8.512.png

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.

Anfangszeitdaten und beobachtete Werte Basierend auf den anfänglichen Zeitdaten berechnet GSM zukünftige atmosphärische Bedingungen, z. B. 3 Stunden später, 6 Stunden später usw. Die "anfänglichen Zeitdaten" sind hier die "wahrscheinlichsten atmosphärischen Bedingungen", die von einem endlichen Beobachtungspunkt zu einem bestimmten Zeitpunkt an regulären Gitterpositionen unter vollständiger Verwendung statistischer Methoden erhalten werden. Dies wird als "objektive Analyse" bezeichnet, und die "Datenassimilation", die seit kurzem auf verschiedene Bereiche angewendet wird, wird seit einiger Zeit verwendet. [Zielanalyse der Meteorologischen Agentur-Homepage](https://www.jma.go.jp/jma/kishou/know/whitep/1-3-3.html "Zielanalyse")

1.2 Meteorologische Faktoren, die die Frontlinie bestimmen

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 ") 51RlzcuwIBL.SX351_BO1,204,203,200.jpg

demnach

  1. Grenze auf der Warmluftseite, wo ** Isothermen ** konzentriert sind (Boden, 850hPa Oberfläche)
  2. Das südliche Ende (850 hPa Oberfläche), an dem ** äquivalente Temperaturlinien ** konzentriert sind
  3. ** Der Teil, in dem sich Windgeschwindigkeit und Windrichtung ** plötzlich ändern
  4. Umfassen Sie ** Feuchtgebiet ** und ** Steigbecken ** umfassend

Darauf scheint es eine Frontlinie zu ziehen. Es scheint also gut, die diesen entsprechenden meteorologischen Elemente zu verwenden.

  1. pygrib

2.1 Was ist Pygrib?

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)

2.2 Öffnen Sie die GRIB-Datei

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.

2.3 Extrahieren Sie durch Angabe des meteorologischen Elements, der Höhenebene und der Vorhersagezeit

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.

  1. MetPy

3.1 Über MetPy

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.

3.2 Berechnung des äquivalenten Temperaturniveaus usw.

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 **.

4. Dies und das der Karte

4.1 Projektionsmethode

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.

Muss ich übereinstimmen? Das kann eine Übertreibung sein. Das war bei meiner Methode notwendig. Es kann möglich sein, maschinelles Lernen zu erstellen, das aus vielen Daten eine korrekte Frontlinie zieht, selbst wenn der Bereich unterschiedlich ist.

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.

4.2 Zeichenbereich

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. gsm_prs_srf_2019120212.v8.512.png Die Wetterkarte ist unten. SPAS_COLOR_201912021200.v8.512.png

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.

5. Visualisierung mit matplotlib

5.1 Informationen zur Visualisierung

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

5.2 Visualisierung von Pfeilfedern, Konturen und Konturlinien

Die folgenden Arten von CNN-Eingängen werden dieses Mal verwendet.

  1. Bodenoberfläche ** Windtemperatur Druck **
  2. 850hPa Oberfläche ** Windtemperatur Druck ** (** Geopotentialhöhe **)
  3. 500hPa Oberfläche ** Windtemperaturdruck ** (** Geopotentialhöhe **) Der Wind drückt die Windgeschwindigkeit und -richtung mit einem Pfeilfederdiagramm aus (unter Verwendung der Widerhakenmethode von matplotlib). Überschreiben Sie das Konturdiagramm für den Druck und das Konturdiagramm und die Farbkontur für die Temperatur. Der Druck wird am Himmel durch das Element Geopotentialhöhe ausgedrückt. In der Welt der Meteorologie werden höhere meteorologische Elemente als Höhenverteilung bei einem bestimmten Druck dargestellt. Der Luftdruck nimmt mit zunehmender Höhe exponentiell ab. Abhängig vom hohen und niedrigen Druck nimmt die Höhe des angegebenen Druckniveaus zu oder ab. Dies wird als geopotentiale Höhe bezeichnet. Kandidaten für ** Fronten ** sind Bereiche, in denen sich die Temperatur schnell ändert, und Bereiche, in denen sich die Windrichtung schnell ändert. Die Quelle zum Übereinanderzeichnen dieser drei Datentypen ist unten dargestellt.

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)

5.3 Visualisierung mit Konturkarte

  1. 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.

  2. 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.

  3. 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)

5.4 Häufigkeit der Erstellung von GSM-Visualisierungsdaten

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) ww_wndsrf01.gif Bodenwind / Druck / Temperatur August 2019 (rot ist wärmer, blau ist kälter) ww_wndsrf08.gif 850hPa Wind / Druck / Temperatur Januar 2019 (rot ist wärmer, blau ist kälter) ww_wnd8501.gif 850hPa Wind / Druck / Temperatur August 2019 (rot ist wärmer, blau ist kälter) ww_wnd8508.gif 500hPa Wind / Druck / Temperatur Januar 2019 (rot ist wärmer, blau ist kälter) ww_wnd5001.gif 500hPa Wind / Druck / Temperatur August 2019 (rot ist wärmer, blau ist kälter) ww_wnd5008.gif 850hPa äquivalente Temperatur Januar 2019 (roter ist wärmer und feuchter) ww_ept8501.gif 850hPa äquivalente Temperatur August 2019 (roter ist wärmer und feuchter) ww_ept8508.gif 700hPa Luftfeuchtigkeit Januar 2019 (blauer, niedrigere Luftfeuchtigkeit = nass) ww_situ7001.gif 700hPa Luftfeuchtigkeit August 2019 (blauer, niedrigere Luftfeuchtigkeit = nass) ww_situ7008.gif 700hPa Vertikaler Wind Januar 2019 (Rot ist Aufwärtsströmung, Blau ist Abwärtsströmung) ww_vvl7001.gif 700hPa Vertikaler Wind August 2019 (Rot ist Aufwärtsströmung, Blau ist Abwärtsströmung) ww_vvl7008.gif

Breaking Weather Chart Januar 2019 ww201901.gif Breaking Weather Chart August 2019 ww201908.gif

Zusammenfassung

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) ")

Nachtrag

So identifizieren Sie parameterName aus der GRIB2-Datei

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

Versuchen Sie, durch maschinelles Lernen basierend auf Wetterdaten eine "wetterkartenähnliche Front" zu zeichnen (5)
Versuchen Sie, durch maschinelles Lernen anhand von Wetterdaten eine "wetterkartenähnliche Front" zu zeichnen (3).
Versuchen Sie, durch maschinelles Lernen basierend auf Wetterdaten eine "wetterkartenähnliche Front" zu zeichnen (1)
Versuchen Sie, durch maschinelles Lernen anhand von Wetterdaten eine "wetterkartenähnliche Front" zu zeichnen (4)
Versuchen Sie, durch maschinelles Lernen basierend auf Wetterdaten eine "wetterkartenähnliche Front" zu zeichnen (2)
Versuchen Sie, den Strombedarf durch maschinelles Lernen vorherzusagen
Geschichte rund um die Datenanalyse durch maschinelles Lernen
Anfänger des maschinellen Lernens versuchen, einen Entscheidungsbaum zu erstellen
Versuchen Sie, eine Bezier-Kurve zu zeichnen
Sammeln von Daten zum maschinellen Lernen
Versuchen Sie, eine Blackjack-Strategie zu entwickeln, indem Sie das Lernen stärken ((1) Implementierung von Blackjack)
Suchen Sie nach technischen Blogs durch maschinelles Lernen mit dem Schwerpunkt "Verständlichkeit"
Versuchen Sie, den Wert des Wasserstandsmessers durch maschinelles Lernen unter Verwendung der offenen Daten von Data City Sabae vorherzusagen
[Maschinelles Lernen] Erstellen Sie ein Modell für maschinelles Lernen, indem Sie Transferlernen mit Ihrem eigenen Datensatz durchführen
Versuchen Sie, mit Python eine Lebenskurve zu zeichnen
Hinweise zum maschinellen Lernen (von Zeit zu Zeit aktualisiert)
Versuchen Sie, einen neuen Befehl unter Linux zu erstellen
Versuchen Sie, eine Blackjack-Strategie zu entwickeln, indem Sie das Lernen stärken (② Registrieren Sie die Umgebung im Fitnessstudio).
Erstellen Sie eine Python-Umgebung für maschinelles Lernen unter Mac OS
Versuchen Sie, den Wechselkurs (FX) mit nicht tiefem maschinellem Lernen vorherzusagen
Vorhersage von Zeitreihendaten durch AutoML (automatisches maschinelles Lernen)
[Maschinelles Lernen] Versuchen Sie, Objekte mithilfe der selektiven Suche zu erkennen
xgboost: Effektives Modell für maschinelles Lernen für Tabellendaten
Einführung in das maschinelle Lernen mit Simple Perceptron
Windows10 (x64) Erstellen Sie nativ eine maschinelle Lernumgebung
So zeichnen Sie interaktiv eine Pipeline für maschinelles Lernen mit scikit-learn und speichern sie in HTML
Datenvisualisierung mit Python - Die Methode zum gleichzeitigen Zeichnen von Attribut-basierten Diagrammen mit "Facet" ist zu praktisch
Versuchen Sie, eine Blackjack-Strategie zu entwickeln, indem Sie das Lernen stärken (③ Stärkung des Lernens in Ihrer eigenen OpenAI Gym-Umgebung).
Einführung in das maschinelle Lernen
Erstellen Sie mit macOS sierra eine Python-Lernumgebung für maschinelles Lernen
Erstellen Sie eine maschinelle Lernumgebung auf einem Mac (pyenv, deeplearning, opencv).
Versuchen Sie, ein Deep Learning / Neuronales Netzwerk mit Scratch aufzubauen
Versuchen Sie, die Leistung des Modells für maschinelles Lernen / Regression zu bewerten
Sammeln Sie Daten zum maschinellen Lernen, indem Sie aus biobasierten öffentlichen Datenbanken kratzen
Einführung in das maschinelle Lernen mit scikit-learn-Von der Datenerfassung bis zur Parameteroptimierung
Die Verwendung von icrawler zum Sammeln von Daten zum maschinellen Lernen wurde vereinfacht
Versuchen Sie, die Leistung des Modells für maschinelles Lernen / Klassifizierung zu bewerten
Dockerfile zum Erstellen einer datenwissenschaftlichen Umgebung basierend auf pip3
Anfänger des maschinellen Lernens versuchen, Naive Bayes zu erreichen (2) - Implementierung
Erstellen Sie eine KI, die Zuckerbergs Gesicht mit tiefem Lernen identifiziert learning (Datenlernen)
Einstellungen der Python3-basierten maschinellen Lernumgebung auf dem Mac (Koexistenz mit Python2)
Anfänger des maschinellen Lernens versuchen, Naive Bayes (1) - Theorie zu erreichen
Verwendung der offenen Daten von Data City Sabae zur Vorhersage des Werts des Wasserstandsmessers durch maschinelles Lernen Teil 2
Ich war frustriert von Kaggle und versuchte, durch Schaben und maschinelles Lernen ein gutes Mietobjekt zu finden
Schnelle Schritte zum Erstellen einer maschinellen Lernumgebung mit Jupyter Notebook unter macOS Sierra mit anaconda