LoginSignup
2
2

More than 1 year has passed since last update.

Colaboratoryでwgrib2を使えるようにした

Posted at

はじめに

この記事は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/

参考

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2