Kürzlich habe ich einige Artikel gesehen, in denen von der Meteorologischen Agentur veröffentlichte Amedas-Daten als Beispieldaten für maschinelles Lernen verwendet werden. Andererseits gibt es als Oberflächenprognosedaten, die von der Meteorologischen Agentur veröffentlicht wurden, die Ergebnisse numerischer Prognosesimulationen wie GSM und MSM, aber ich habe noch nie einen Artikel gesehen, der diese Daten verwendet. In diesem Artikel werde ich pygrib vorstellen, mit dem Python das grib2-Format verarbeiten kann, eines der Formate für numerische Prognosedaten wie GSM.
Numerische Vorhersagen spielen eine wichtige Rolle in der modernen Wettervorhersagetechnologie. Was ist eine numerische Prognose? Laut Meteorological Agency…
Die numerische Vorhersage ist eine Methode zur Vorhersage zukünftiger atmosphärischer Bedingungen durch Berechnung zeitlicher Änderungen wie Wind und Temperatur mit einem Computer unter Verwendung physikalischer Gleichungen.
Kurz gesagt, es ist eine Technologie, die das Wetter vorhersagt, indem sie den Zustand der Erde mit einem Computer simuliert. Am Standort von Wettervorhersagen denke ich, dass Vorhersagen häufig erstellt werden, indem diese numerischen Vorhersagedaten mit hinzugefügter Nachbearbeitung verwendet werden oder indem aus mehreren numerischen Vorhersageergebnissen die plausibelste ausgewählt wird. Ich werde.
Es gibt verschiedene Arten von Simulationsmethoden, aber die meisten Simulationsergebnisse werden in Form von GPV (Grid Point Value) bereitgestellt. GPV unterteilt die Erde in regelmäßigen Abständen in Gitter, und Daten wie Temperatur und Windgeschwindigkeit werden in jedem Gitter gespeichert. [^ Nachbearbeitung] Bei der Wettervorhersage werden häufig GPV-Daten verarbeitet, in denen mehrere gitterartige Daten in Zeitrichtung gespeichert sind. Eines der Speicherformate für dieses GPV ist das grib2-Format, und die meisten Daten der Meteorological Agency werden auch in diesem Format verteilt.
[^ Nachbearbeitung]: Da der gespeicherte Wert der Wert des Rasterpunkts oder der Durchschnittswert ist, wird der Wert selten als Prognose für einen beliebigen Punkt im Rasterpunkt verwendet und die Nachbearbeitung wie oben beschrieben hinzugefügt. Es gibt viele.
Wenn Sie die tatsächlichen Daten von GPV anzeigen möchten, können Sie diese unter GPV-Wettervorhersage anzeigen. Eigentlich sind es die Daten für jedes Gitter, aber in vielen Fällen wird bei der Visualisierung eine geeignete Interpolationsverarbeitung durchgeführt.
Es scheint einige Optionen zu geben, wenn es um Grib2-Daten aus Python geht, aber dieses Mal werde ich pygrib verwenden, das Python3 unterstützt. [^ python3] Wenn Sie dies normal tun, kann es sein, dass Sie bei der Installation von grib_api [^ eccodes], die vom EZMW (European Medium-Term Forecast Center) veröffentlicht wurde, nicht weiterkommen. Dieses Mal werde ich es in Anakonda setzen. Da es eine gute Idee ist, wird es außerdem auf Docker aufgebaut. Damit ist die Wahrscheinlichkeit, dass die Installation aufgrund von Umgebungsabhängigkeit ausfällt, erheblich gering.
[^ python3]: Andere Module unterstützten früher nur 2 Serien, als ich es zuvor (Anfang 2016) ausprobiert habe, aber es wird jetzt möglicherweise unterstützt. [^ eccodes]: In letzter Zeit scheint die Verwendung von ecCodes empfohlen zu werden.
Die Docker-Datei lautet wie folgt.
Dockerfile
FROM ubuntu:latest
MAINTAINER hangyo
#Paketinstallation und Update
RUN apt-get update && apt-get -y upgrade
RUN apt-get -y install build-essential
RUN apt-get -y install git vim curl wget
RUN apt-get -y install zlib1g-dev \
libssl-dev \
libreadline-dev \
libyaml-dev \
libxml2-dev \
libxslt-dev \
libncurses5-dev \
libncursesw5-dev
#Installieren Sie pyenv
RUN git clone git://github.com/yyuu/pyenv.git /root/.pyenv
RUN git clone https://github.com/yyuu/pyenv-pip-rehash.git /root/.pyenv/plugins/pyenv-pip-rehash
ENV PYENV_ROOT /root/.pyenv
ENV PATH $PYENV_ROOT/bin:$PATH
RUN echo 'eval "$(pyenv init -)"' >> .bashrc
#Installation von Anakonda
ENV ANACONDA_VER 4.1.1
ENV LD_LIBRARY_PATH=/lib/x86_64-linux-gnu:$PYENV_ROOT/versions/anaconda3-$ANACONDA_VER/lib
RUN pyenv install anaconda3-$ANACONDA_VER
RUN pyenv global anaconda3-$ANACONDA_VER
ENV PATH $PYENV_ROOT/versions/anaconda3-$ANACONDA_VER/bin:$PATH
#Bibliothek Update
RUN conda update -y conda
RUN pip install --upgrade pip
RUN conda install -c conda-forge pygrib=2.0.2
RUN conda install -c conda-forge jpeg
RUN mkdir /temp
Bitte ändern Sie die Version von Anaconda entsprechend. Bis zur Installation von anaconda habe ich auf das folgende Repository verwiesen (auch eine vollständige Kopie). https://github.com/iriya-ufo/ml-anaconda
Bereiten Sie vor dem Erstellen und Starten eine Beispieldatei für grib2 vor. Dieses Mal werde ich die Daten der Meteorological Agency Data Disclosure Page des Instituts für Überlebensforschung der Universität Kyoto verwenden.
wget -P somepath/ http://database.rish.kyoto-u.ac.jp/arch/jmadata/data/gpv/original/2017/01/02/Z__C_RJTD_20170102000000_MSM_GPV_Rjp_Lsurf_FH00-15_grib2.bin
Dies sind die Prognosedaten von FT (Prognosezeit: Zeit von der Anfangszeit) 0h bis 15h der Oberfläche der Meteorologischen Agentur MSM, deren Anfangszeit am 2. Januar 2017 00:00 (UTC) ist. Wenn normale Leute mit numerischen Prognoseergebnissen spielen, denke ich, dass Oberflächendaten ausreichend sind.
Als kleine Anmerkung werden die Daten in einem Pfad gespeichert, aber wir speichern sie an einem anderen Ort als in der Docker-Datei. Es ist ein Problem des Verhaltens von Docker, aber Docker überträgt die Daten im Verzeichnis Dockerfile zum Zeitpunkt der Docker-Erstellung an den Docker-Daemon und die Docker-Daemon-Builds. Aus diesem Grund dauert die Übertragung länger als nötig, wenn Sie grib2 unter die Docker-Datei stellen. Sie können auf http://kimh.github.io/blog/jp/docker/gothas-in-writing-dockerfile-jp/ verweisen.
Zuerst bauen und ausführen, um in den Container zu gelangen.
cd path_of_Dokcerfile
docker build -t pygrib_ubuntu .
docker run -it -v /somepath:/temp pygrib_ubuntu
Sie sollten sich jetzt im Docker-Container befinden.
Wenn Sie ls / temp
versuchen und bestätigen, dass Sie Z__C_RJTD_20170102000000_MSM_GPV_Rjp_Lsurf_FH00-15_grib2.bin
haben, ist die Bereitstellung erfolgreich.
Zum Schluss der Pygrib-Test
python
import pygrib
grbs = pygrib.open('/temp/Z__C_RJTD_20170102000000_MSM_GPV_Rjp_Lsurf_FH00-15_grib2.bin')
for grb in grbs:
print(grb)
Das Ergebnis von
1:Pressure reduced to MSL:Pa (instant):regular_ll:meanSea:level 0:fcst time 0 hrs:from 201701020000
2:Surface pressure:Pa (instant):regular_ll:surface:level 0:fcst time 0 hrs:from 201701020000
3:10 metre U wind component:m s**-1 (instant):regular_ll:heightAboveGround:level 10 m:fcst time 0 hrs:from 201701020000
4:10 metre V wind component:m s**-1 (instant):regular_ll:heightAboveGround:level 10 m:fcst time 0 hrs:from 201701020000
...
172:Medium cloud cover:% (instant):regular_ll:surface:level 0:fcst time 15 hrs:from 201701020000
173:High cloud cover:% (instant):regular_ll:surface:level 0:fcst time 15 hrs:from 201701020000
174:Total cloud cover:% (instant):regular_ll:surface:level 0:fcst time 15 hrs:from 201701020000
175:Total precipitation:kg m-2 (accum):regular_ll:surface:level 0:fcst time 14-15 hrs (accum):from 201701020000
Es ist in Ordnung, wenn es so wird.
Ich möchte einen weiteren Artikel über die spezifische Verwendung von Pygrib schreiben.