#はじめに
この記事はGoogleColaboratoryでwgrib2を使用できるようにしたときの備忘録です。
(既に似た記事があるかも知れませんが、私は見つけられなかったので、とりあえずここに置いておきます。)
#wgrib2とは
こんな項目を用意してみたものの、この記事に到達する人は大半がwgrib2を知っているかと思います。が、念のため簡単に(誤解があるかもしれませんが)説明すると、grib2形式ファイルをgrads形式やcsv形式等の使いやすいものに変換してくれるありがたいコマンド(実行プログラム)です。
多くの気象データがこのgrib2形式になっており、気象データを使ってアレコレしたい人にとっては、wgirb2が使える環境が必要です。
#なんでColaboratoryにwgrib2?
ブラウザ上で気象データを弄り倒すのはロマンです。
気象データの活用とは無縁の畑から育つと、(あぁ...環境設定面倒だなぁ。ちょちょいと弄れる楽なツール無いかなぁ...)なんて思うわけです。で、調べてみると結局色々自分でやるしかないようです。(PATHを通す? /usr/localの下に...?なんて言葉が万人に通じるわけないじゃない。)ローカル環境に依存したくない。そういうことです。
となると、環境が誰でも(ほとんど)同じでライブラリとかが最初から諸々入っているColaboratory
に行きつきますよね?
ただ当然wgrib2
なんてデフォルトでColaboratoryに入っているはずもなく。でもColaboratoryでwgrib2使えたらGoogleDriveに直接データ吐き出せるしいいよなぁ...。と悩んだ結果、入れました。(結局、筆者は自分で入れているので楽できていないですが。せめてこの記事に到達した方が楽できれば幸いです。)
#方針
Colaboratoryの欠点としてインストールした諸々が12時間を超えて(colaboratory内では)保存できないことが挙げられます。無料サービスなので受け入れるしかありません。ただ、毎回wgrib2をダウンロード・展開等するのは流石に脳筋すぎます。
なので、wgrib2のインストール先はGoogleDrive内として(GoogleDrive内にwgrib2の実行プログラムを置いて)、Colaboratory側からはエイリアスをDrive内の実行プログラムに紐付けてしまいます。そうすればwgrib2を使いたいときに自らのドライブをマウントし、エイリアスを生成するだけでwgrib2が使えてしまうのでは?と言った感じです。(シンボリックリンクでも良いと思うのですが、どうもColaboratory内だと不安定なんですよね...)
#必要なもの
・Googleアカウント
・200MBほどの空き容量があるGoogleDrive
・(Colaboratoryの使い方はこちらの記事で説明しています。)
#スクリプト
all-in-one的なスクリプトは本記事の末尾に掲載しておきます。ちゃっちゃと済ませたい人はそこからコピぺ、実行してください。
以下には詳細を順に説明します。
##wgrib2(圧縮ファイル)のダウンロード
wgrib2はNCEP/NOAAからダウンロードします。以下のURLから様々なversionのwgrib2圧縮ファイルを取得することが出来ます。
https://www.ftp.cpc.ncep.noaa.gov/wd51we/wgrib2/
今回は投稿日(2021年6月14日)現在で最新のv3.0.2を導入することにします。また、先ほどの方針にもあるように、ドライブ内にwgrib2実行プログラムを落とすため、予め作業(カレント)ディレクトリをドライブ内に移してしまいます。
wgrb2_dir = "/content/drive/MyDrive/lib/wgrib2"
if not os.path.exists(wgrb2_dir): os.makedirs(wgrb2_dir)
%cd $wgrb2_dir
(今回はマイドライブ配下にlib/wgrib2というディレクトリを用意しましたが、別にどこでも構いません。)
で、ダウンロードします。(今回はwgetを使用しました)
!wget https://www.ftp.cpc.ncep.noaa.gov/wd51we/wgrib2/wgrib2.tgz.v3.0.2
(Colaboratory内でもwget等のbash環境は!
や%
を接頭に付けることで使用できます)
##wgrib2(圧縮ファイル)の展開
次にダウンロードした圧縮ファイルを展開します。
!tar -zxvf wgrib2.tgz.v3.0.2
(展開後に生成されるフォルダがgrib2となり、wgrib2じゃないの?と不安になりますが大丈夫です。問題ありません。)
##make
いよいよwgrib2実行ファイルを生成させます。grib2フォルダに移動し、makeのために環境変数を設定し、makeします。
%set_env CC gcc
%set_env FC gfortran
!make
無事に終了すると、grid2フォルダの下に、wgrib2というフォルダがあり、さらにその下にwgrib2という実行プログラムが生成されているはずです。
##Drive内のwgrib2をColaboratoryから呼び出す
さて、wgrib2をドライブ内に用意できたのであとはColaboratoryから簡単に呼び出せるようにするだけです。正直、先ほど確認したwgrib2を実行さえできれば何でもいいので、直接呼び出しても問題はありません。ただ、深いところにあるので、単に面倒です。
なので今回はエイリアスを生成させることにしました。(.bashrc等に環境設定をしてもいいのですが、(僕だけかも知れませんが安定しないんですよね...))
また、どうやらColaboratoryでは再ログインなどで実行権限を失ってしまうことがあるので、wgrib2コマンド本体の実行権限を設定します。
%alias wgrib2 "/content/drive/MyDrive/lib/wgrib2/grib2/wgrib2/wgrib2"
!chmod a+x "/content/drive/MyDrive/lib/wgrib2/grib2/wgrib2/wgrib2"
以上でwgrib2コマンドが使用できるようになったはずです。
今後は(ドライブをマウントした上で)直上の2行を実行すれば直ぐにwgrib2が実行できます。
じゃんじゃんgrib形式ファイルを展開していきましょう!
(容量にはお気をつけください)
##all-in-one(楽したい人はここだけ)
Colaboratoryのコード入力欄に以下のものをコピペ、「ユーザー毎の設定」を編集後、実行するだけで基本的にはOKです。(保存先とかどうでもいいや、使えれば。って人はコピペ&実行だけです。)
from google.colab import drive
import os, time
#==================================
#ユーザー毎の設定(ここから)
# - - - - - - - - - - - - - - - - -
#wgrib2のバージョン
wgrb_ver = "wgrib2.tgz.v3.0.2"
#保存先(MyDrive配下)
wgrb2_dir = "lib_add/wgrib2"
# - - - - - - - - - - - - - - - - -
#ユーザー毎の設定(ここまで)
#==================================
#以下は基本的に無編集でOK
#ドライブのマウント
drive.mount('/content/drive')
#ディレクトリの設定
drive_home = "/content/drive/MyDrive"
wgrb2_dir = f"{drive_home}/{wgrb2_dir}"
if not os.path.exists(wgrb2_dir): os.makedirs(wgrb2_dir)
%cd $wgrb2_dir
wgrb_file = f"{wgrb2_dir}/{wgrb_ver}"
# URL(固定部)の設定
url_root = "https://www.ftp.cpc.ncep.noaa.gov/wd51we/wgrib2/"
# 指定バージョンのwgrib2の有無を判断&ダウンロード
if not os.path.exists(wgrb_file):
url = f"{url_root}{wgrb_ver}"
!wget $url
else:
print ("wgrib2 download: PATH")
# 指定バージョンのwgrib2ファイルの解凍の有無を判断&解凍
grb2 = f"{wgrb2_dir}/grib2"
if not os.path.exists(grb2):
!tar -zxvf $wgrb_ver
else:
print ("wgrib2 unzip: PATH")
# 指定バージョンのwgrib2ファイルのコンパイルの有無を判断&コンパイル
%cd $grb2
wgrb2 = f"{grb2}/wgrib2/wgrib2"
if not os.path.exists(wgrb2):
%set_env CC gcc
%set_env FC gfortran
!make
else:
print ("wgrib2 compile: PATH!")
# wgrib2コマンドの実行権限の設定
# (再ログイン時等に実行権限を失っている場合があるため)
%ls -l $wgrb2
!chmod a+x $wgrb2
%ls -l $wgrb2
# wgrib2コマンドの登録(%wgrib2 で呼び出せるようにする)
%alias wgrib2 $wgrb2
print ("wgrib2 is available!")
time.sleep(3)
%cd /content/