[PYTHON] Lesen Sie die GRIB2-Datei der Meteorological Agency auf pygrib

Einführung

Hier werden die folgenden Dateien in Liste der Beispieldaten der Meteorologischen Agentur als Ziel ausgewählt.

Beide verwenden ein Binärformat namens GRIB2.

Überprüfungsumgebung

Ich habe Anacondas virtuelle Umgebung verwendet.

Bibliotheksinstallation

Verwenden Sie, wie der Titel des Artikels andeutet, pygrib. Kann von Pip oder Conda installiert werden.

conda install -c conda-forge pygrib

Implementierungsbeispiel

Ermitteln Sie die Temperatur [℃] des Jingu-Stadions (35.6745, 139.7169) (nächster Maschenpunkt) zu jedem Zeitpunkt (JST) aus der Probendatei (MSM) der Meteorologischen Agentur.

from datetime import timedelta
import pygrib
import pandas as pd

time_diff = timedelta(hours=9)

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

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

print(df)

↓ Ausgabeergebnis

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

Erklärung zur Implementierung

Dateiverbindung

pygrib.open Erstellen Sie mithilfe der Klasse eine Schnittstelle mit der Datei.

import pygrib

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

Nachrichtenmethode

Nimmt das Argument N (int) und gibt die N-te (1 Ursprung) pygrib.gribmessage-Instanz auf dem Iterator zurück.

In[]


gpv_file.message(2)

Out[]


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

Methode auswählen

Nimmt ein Argument in der Form "** kwargs" und gibt eine Liste von "pygrib.gribmessage" zurück, die dieser Bedingung entspricht.

Wenn mehrere Suchbedingungen angegeben sind, werden sie als UND-Bedingungen ausgewertet.

--1 Zustand

In[]


gpv_file.select(name="Temperature")

Out[]


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

--2 Bedingungen

In[]


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

Out[]


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

Die Elemente, die praktisch für Suchbedingungen verwendet werden können, sind wie folgt.

Artikelname Eingabetyp
name str
shortName str
forecastTime(※) int
validDate datetime.datetime
parameterCategory int
parameterNumber(※※) int

Datenwerterfassung

Die oben extrahierte pygrib.gribmessage enthält ** Daten für alle Netze einer bestimmten Zeit und eines bestimmten Datenelements ** Es ist beinhaltet.

Hauptvariablen

Variablennamen Schimmel Inhalt
validDate datetime.datetime Prognosedatum und -zeit(UTC)
analDate datetime.datetime Referenzdatum und -zeit der Prognoseanalyse(UTC)
forecastTime int analDateVonvalidDateZeitunterschied zu
distinctLatitudes numpy.ndarray Liste der Maschenbreiten(1 Dimension)
distinctLongitudes numpy.ndarray Liste der Maschenlängen(1 Dimension)
values numpy.ndarray Liste der Datenwerte für alle Netze(2D)

Latlons-Methode

Gibt eine Liste der Breiten- und Längengrade des Netzes für jedes Netz zurück. Beide Rückgabetypen sind "numpy.ndarray".

In[]


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

Out[]


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

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

Es scheint, dass die Reihenfolge so ist, dass der Fall, in dem es als Matrix geschrieben wird, und der Fall, in dem es auf einer Karte angezeigt wird, visuell übereinstimmen.

Datenmethode

Holen Sie sich den Datenwert des Netzes innerhalb des Bereichs der Argumente "lat1" (minimaler Breitengrad), "lat2" (maximaler Breitengrad), "lon1" (minimaler Längengrad) und "lon2" (maximaler Längengrad) und des Breiten- / Längengrads dieses Netzes. Machen. Was den Rückgabewert betrifft, so ist das netzartige zweidimensionale "numpy.ndarray" jedes Datenwerts, Breiten- und Längengrads ein Taple.

In[]


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

Out[]


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

Referenz

Recommended Posts

Lesen Sie die GRIB2-Datei der Meteorological Agency auf pygrib
Laden Sie die Winddaten der Meteorological Agency herunter
Konvertieren Sie die GRIB der Radar-Per-Polarkoordinaten GPV der Meteorological Agency in netCDF (CF / Radial Standard).
Laden Sie die Winddaten der Meteorological Agency herunter
Lesen Sie die GRIB2-Datei der Meteorological Agency auf pygrib
Überprüfen Sie die Existenz der Datei mit Python
Lesen wir die RINEX-Datei mit Python ①
Konvertieren Sie den Zeichencode der Datei mit Python3
Die Niederschlagsdaten der Meteorologischen Agentur kratzen und auf M5Stack anzeigen
Vorlage des Python-Skripts zum Lesen des Inhalts der Datei
Lesen Sie die Leistung des Smart Meters mit M5StickC (BP35C0-J11-T01 Edition) ab.
Lesen Sie die CSV-Datei mit dem Jupiter-Notizbuch und schreiben Sie die Grafik übereinander
Eine Geschichte darüber, wie man das Atomfeld (XML-Telegramm) der Meteorologischen Agentur mit einem Raspeltorte bekommt und twittert
[Python] Lesen Sie die CSV-Datei und zeigen Sie die Abbildung mit matplotlib an
Lesen Sie die VTK-Datei und zeigen Sie die Farbkarte mit Jupiter an.
Konvertieren Sie die GRIB der Radar-Per-Polarkoordinaten GPV der Meteorological Agency in netCDF (CF / Radial Standard).
Holen Sie sich Informationen von der Meteorological Agency und benachrichtigen Sie Slack über Wetterwarnungen in den 23 Bezirken von Tokio
Verarbeiten Sie den Inhalt der Datei der Reihe nach mit einem Shell-Skript
So erstellen Sie einen Befehl zum Lesen der Einstellungsdatei mit Pyramide
Formatieren Sie die CSV-Datei "Nationalfeiertag" des Kabinetts mit Pandas
Lesen Sie die Datei in Python mit einem relativen Pfad aus dem Programm
Die Idee, die Konfigurationsdatei mit einer Python-Datei anstelle von yaml zu füttern
Extrahieren Sie die xz-Datei mit Python
Folgen Sie der Dateihierarchie mit fts
Laden Sie die mit appcfg.py bereitgestellte Datei herunter
Die Geschichte des "Lochs" in der Akte
Datei mit Standard-App öffnen
[Bilderkennung] Lesen des Ergebnisses der automatischen Annotation mit VoTT
Bearbeiten Sie die Datei des SSH-Verbindungszielservers auf dem Server mit VS-Code
Lesen Sie das Diagrammbild mit OpenCV und ermitteln Sie die Koordinaten des Endpunkts des Diagramms
Öffnen Sie eine Excel-Datei in Python und färben Sie die Karte von Japan
Zeigen Sie den Status der COVID 19-Infektion in Japan mit Splunk an (GitHub-Version).
Lesen Sie die Datei mit Python und löschen Sie die Zeilenumbrüche [Hinweise zum Lesen der Datei]
Python / numpy> Lesen Sie die Datendatei mit der Elementnamenzeile> Verwenden Sie genfromtxt ()
Richten Sie die Größe der Farbleiste an der Matplotlib aus
Lesen Sie die Datei Zeile für Zeile mit Python
Lesen Sie die Datei Zeile für Zeile mit Python
Lesen Sie die Datei, indem Sie den Zeichencode angeben.
Die dritte Nacht der Runde mit für
Lesen Sie den gesamten Inhalt von proc / [pid]
Die zweite Nacht der Runde mit für
Versuchen Sie, die Datei mit dem Befehl less neu zu schreiben
[Python] Ruft den Zeichencode der Datei ab
Überprüfen Sie die Dateigröße mit du -sh *
Lesen Sie die Implementierung des globalen ARM-Timers
Zeichendatendatei mit numpy lesen
Laden Sie die Datei mit PHP herunter [Im Aufbau]
[Python] Lesen Sie die angegebene Zeile in der Datei
Zählen Sie die Anzahl der Zeichen mit Echo
[Automatisierung] Lesen Sie E-Mails (Nachrichtendatei) mit Python
[Python3] Grundlegendes zu Dateivorgängen
Verschiedene Möglichkeiten, die letzte Zeile einer CSV-Datei in Python zu lesen
[Bash] Übergibt den Inhalt der Datei beim Lesen an Variablen für jede Spalte
Ersetzen Sie die eindeutige Darstellung der gelesenen Textdatei durch eine Beschriftung (mit GiNZA).