Préparer un environnement pour toucher les fichiers au format grib2 avec python (édition Docker)

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.

Prévisions numériques et grib2

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.

Construction de l'environnement pygrib sur docker

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

Préparation d'échantillons de données

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

Lire le test

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.

Recommended Posts

Préparer un environnement pour toucher les fichiers au format grib2 avec python (édition Docker)
Préparer l'environnement python3 avec Docker
Préparer l'environnement d'exécution de Python3 avec Docker
Construire un environnement Mysql + Python avec docker
J'ai créé un environnement pour Masonite, un framework WEB Python similaire à Laravel, avec Docker!
Configurer un environnement de développement Python avec Atom
[Python] Explique comment utiliser la fonction format avec un exemple
Préparer un environnement pour utiliser OpenCV et Pillow avec AWS Lambda
[Python] Création d'un environnement avec Anaconda [Mac]
Créer un environnement Jupyter Lab (Python) avec Docker
Comment créer un environnement NVIDIA Docker
Remarques lors de la création d'un environnement avec python
Connectez-vous à MySQL avec Python dans Docker
Créer un environnement Python + uWSGI + Nginx avec Docker
Environnement de lancement avec LineBot + Heroku + Docker + Python
Comment installer python3 avec docker centos
Maintenance de l'environnement réalisée avec Docker (je souhaite post-traiter GrADS en Python
Introduction à Python Préparons l'environnement de développement
Remarque: préparez l'environnement de CmdStanPy avec docker
Notes de l'installation de Homebrew à la création d'un environnement Anaconda pour Python avec pyenv
Construire un environnement Anaconda pour Python avec pyenv
Comment recadrer une image avec Python + OpenCV
[Python] Créer un environnement de développement Django avec Docker
Créer un environnement de Nginx + uWSGI + Python (Django) avec docker
Construire un environnement conforme à la norme de codage Python (PEP8) avec Eclipse + PyDev
Introduction à Python "Re" 1 Construction d'un environnement d'exécution
Télécharger des fichiers sur Google Drive avec Lambda (Python)
De la construction d'environnement Python à la construction d'environnement virtuel avec anaconda
Comment préparer un environnement avec une version et un package Python différents pour chaque projet avec pyenv-virtualenv sur Amazon Linux
Convertir une chaîne au format de liste caractère par caractère avec python
Une histoire sur la façon dont les utilisateurs de Windows 10 ont créé un environnement pour utiliser OpenCV3 avec Python 3.5
[Cloud 9] Essayez de créer un environnement avec django 1.11 de Python 3.4 sans même comprendre 1 mm
J'ai essayé de créer un environnement d'apprentissage automatique avec Python (Mac OS X)
Construction d'environnement virtuel avec Docker + Flask (Python) + notebook Jupyter
Pour pouvoir utiliser le japonais avec Python dans l'environnement Docker
[Python] Construction de l'environnement OpenCV avec Docker (cv2.imshow () fonctionne également)
J'ai essayé de toucher un fichier CSV avec Python
Introduction au traitement parallèle distribué Python par Ray
Note de lecture: Introduction à l'analyse de données avec Python
Comment créer un environnement Django (python) sur Docker
J'ai essayé d'implémenter le perceptron artificiel avec python
Créer un environnement pour le traitement du langage naturel avec Python
Exemple d'environnement pytest pour réparer la base de données avec Docker
Supprimer les en-têtes de fichiers CSV à plusieurs formats avec python
Créer un environnement pour utiliser CaboCha avec Google Colaboratory
Utiliser python avec docker
environnement python avec docker-compose
Environnement virtuel avec Python 3.6
Comment convertir un tableau en dictionnaire avec Python [Application]
Créez un environnement pour "Deep Learning from scratch" avec Docker
Makefile minimal et buildout.cfg pour créer un environnement avec buildout
Présentation de l'image Docker de Kaggle sur Windows pour créer un environnement
20200329_Introduction à l'analyse de données avec Python 2nd Edition Personal Summary
De la construction de l'environnement au déploiement pour flask + Heroku avec Docker
Comment télécharger des fichiers sur Cloud Storage avec le SDK Python de Firebase