Hier werden die folgenden Dateien in Liste der Beispieldaten der Meteorologischen Agentur als Ziel ausgewählt.
Beide verwenden ein Binärformat namens GRIB2.
Ich habe Anacondas virtuelle Umgebung verwendet.
Verwenden Sie, wie der Titel des Artikels andeutet, pygrib. Kann von Pip oder Conda installiert werden.
conda install -c conda-forge pygrib
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
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")
pygrib.gribmessage
wird später beschrieben.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
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 |
ParameterNumber
sollte in Kombination mit parameterCategory
verwendet werdenDie oben extrahierte pygrib.gribmessage enthält ** Daten für alle Netze einer bestimmten Zeit und eines bestimmten Datenelements ** Es ist beinhaltet.
Variablennamen | Schimmel | Inhalt |
---|---|---|
validDate | datetime.datetime | Prognosedatum und -zeit(UTC) |
analDate | datetime.datetime | Referenzdatum und -zeit der Prognoseanalyse(UTC) |
forecastTime | int | analDate VonvalidDate Zeitunterschied 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) |
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.
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]]))
Recommended Posts