Récemment, j'ai vu des articles utilisant les données Amedas publiées par l'Agence météorologique comme exemple de données pour l'apprentissage automatique. D'autre part, comme les données de prévision de surface publiées par l'Agence météorologique, il y a les résultats de simulations de prévisions numériques telles que GSM et MSM, mais je n'ai jamais vu un article qui utilise ces données. Dans cet article, je présenterai pygrib, qui permet à python de gérer le format grib2, qui est l'un des formats pour les données de prévisions numériques telles que GSM.
Les prévisions numériques jouent un rôle majeur dans la technologie de prévision météorologique moderne. Qu'est-ce qu'une prévision numérique? Selon l'Agence météorologique…
La prévision numérique est une méthode de prédiction des conditions atmosphériques futures en calculant les changements temporels tels que le vent et la température avec un ordinateur à l'aide d'équations physiques.
En bref, c'est une technologie qui prédit le temps en simulant l'état de la terre avec un ordinateur. Dans le domaine des prévisions météorologiques, je pense que les prévisions sont souvent créées en utilisant ces données de prévision numériques avec un post-traitement ajouté, ou en sélectionnant la plus plausible parmi plusieurs résultats de prévisions numériques. Je vais.
Il existe plusieurs types de méthodes de simulation, mais la plupart des résultats de simulation sont fournis sous la forme de GPV (grid point value). GPV divise la terre en grilles à intervalles réguliers, et des données telles que la température et la vitesse du vent sont stockées dans chaque grille. [^ Post processus] Dans les prévisions météorologiques, les données GPV dans lesquelles plusieurs données de type grille sont stockées dans le sens du temps sont souvent traitées. L'un des formats de stockage de ce GPV est le format grib2, et la plupart des données de l'Agence météorologique sont également diffusées dans ce format.
[^ Post-traitement]: étant donné que la valeur stockée est la valeur du point de grille ou la valeur moyenne, il est rare d'utiliser la valeur telle quelle en tant que prévision de n'importe quel point du point de grille, et d'ajouter un post-traitement comme décrit ci-dessus. Il y a beaucoup de.
Si vous voulez voir les données réelles de GPV, vous pouvez les voir à partir de GPV Weather Forecast. En fait, ce sont les données de chaque grille, mais dans de nombreux cas, un traitement d'interpolation approprié est effectué lors de la visualisation.
Il semble y avoir des options pour traiter les données grib2 de python, mais cette fois j'utiliserai pygrib qui prend en charge python3. [^ python3] Si vous le faites normalement, vous risquez de rester bloqué avec l'installation de grib_api [^ eccodes] publié par ECMWF (Centre européen de prévisions à moyen terme). Cette fois, je vais le mettre dans anaconda. De plus, comme c'est une bonne idée, il sera construit sur docker. Avec cela, la probabilité que l'installation échoue en raison de la dépendance à l'environnement sera considérablement faible.
[^ python3]: D'autres modules ne supportaient que 2 séries lorsque je l'ai essayé avant (début 2016), mais il peut être pris en charge maintenant. [^ eccodes]: Récemment, il semble que l'utilisation de ecCodes soit recommandée.
Le Dockerfile est le suivant.
Dockerfile
FROM ubuntu:latest
MAINTAINER hangyo
#Installation et mise à jour du package
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
#Installez 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 d'anaconda
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
#Mise à jour de la bibliothèque
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
Veuillez modifier la version d'anaconda en conséquence. Jusqu'à l'installation d'anaconda, je me suis référé au référentiel suivant (également une copie complète). https://github.com/iriya-ufo/ml-anaconda
Avant de créer et de lancer, préparez un exemple de fichier pour grib2. Cette fois, j'utiliserai les données de la page de divulgation des données de l'Agence météorologique de l'Institut de recherche sur la survie de l'Université de Kyoto.
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
Il s'agit des données de prévision de FT (temps de prévision: temps à partir de l'heure initiale) 0h à 15h de la surface de l'Agence météorologique MSM dont l'heure initiale est 00:00 (UTC) le 2 janvier 2017. Si les gens ordinaires jouent avec les résultats des prévisions numériques, je pense que les données de surface sont suffisantes.
En guise de petite note, les données sont enregistrées dans un chemin, mais sauvegardons-les dans un emplacement différent du Dockerfile. C'est un problème du comportement de docker, mais docker transfère les données sous le répertoire de Dockerfile vers le démon docker au moment de la construction de docker, et la compilation du démon docker. Pour cette raison, si grib2 est placé sous le Dockerfile, le transfert prendra plus de temps que nécessaire. Vous pouvez vous référer à http://kimh.github.io/blog/jp/docker/gothas-in-writing-dockerfile-jp/.
Tout d'abord, construisez et exécutez pour entrer dans le conteneur.
cd path_of_Dokcerfile
docker build -t pygrib_ubuntu .
docker run -it -v /somepath:/temp pygrib_ubuntu
Vous devriez maintenant être à l'intérieur du conteneur du docker.
Si vous essayez ls / temp
et confirmez que vous avez Z__C_RJTD_20170102000000_MSM_GPV_Rjp_Lsurf_FH00-15_grib2.bin
, le montage est réussi.
Enfin, le test pygrib
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)
Le résultat de
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
C'est OK si ça devient comme.
J'aimerais écrire un autre article sur l'utilisation spécifique de pygrib.