OTENKI Data Science

TechBlog

K.Sakurai

Windows環境でGRIB2形式データをCSV形式に変換する(ある地点のデータを抽出する)

はじめに

GRIB2形式データを処理するプログラムwgrib2(入門編)」ではLinux環境を前提にwgrib2を使う方法をお話しました。
今回は、もう少し手軽にデータ利用をやってみたいというご要望にお応えして、Windows環境でwgrib2を使ってGRIB2形式データをCSV形式に変換する方法を紹介したいと思います。
もちろん、今回もインストールから順番に説明していきます。
ゴールとしては、MSM-GPVのある地点のデータを抽出するところまでできればと思います。
私のPC環境は、Windows 10 Home 64bitです。このチュートリアルを実施するだけなら、スペックはあまり気にしなくても良いと思います。

※当記事の情報は執筆時点のものです。また、ソフトウェアのダウンロードや実行はご自身の責任でお願いします。

Windows版wgrib2のインストール

本家サイトから、「Source Code and Compling Hints」のあたりの「Windows Vista/7/8/10 64-bits」のソースをダウンロードします。
ダウンロードするファイルは、wgrib2.exeと全てのライブラリ(DLL)です。
とりあえず、適当な作業フォルダ(ここではダウンロードフォルダにmsm_wind)を作って、その下にwgrib2というフォルダを作って保存すると良いと思います。
以下をコマンドプロンプトで実行してみて、wgrib2コマンドのヘルプが表示されるか確認してみましょう。
    > C:\Users\user\Downloads\msm_wind\wgrib2\wgrib2.exe
※パスは環境に合わせて編集してください。(以下同様)

このように表示されましたでしょうか。
次は、実際にGRIB2形式データを読み込んでみましょう。

-csv:CSV形式に変換する

今回もGRIB2形式データのMSM-GPVを読み込んでみます。GRIB2形式であれば他のデータでも同様に処理できると思います。
例として、地表面の初期時刻から15時間予報までのMSM-GPV(Z__C_RJTD_20181023000000_MSM_GPV_Rjp_Lsurf_FH00-15_grib2.bin※ユーザー登録頂いた方はサンプルデータからダウンロードできます)を処理していきます。ファイルは作業フォルダ(msm_wind)に入れて、まずは引数にしてオプションなしで実行してみましょう。
    > C:\Users\user\Downloads\msm_wind\wgrib2\wgrib2.exe C:\Users\user\Downloads\msm_wind\Z__C_RJTD_20181023000000_MSM_GPV_Rjp_Lsurf_FH00-15_grib2.bin
データの格納要素が表示されます。以前の記事の「GRIB2形式データの中身を確認する」から格納要素の意味を参照できると思います。

では、CSV形式ファイルに変換してみましょう。CSV形式の変換には-csvオプションを使います。-csvオプションの後には出力ファイルを指定します。
    > C:\Users\user\Downloads\msm_wind\wgrib2\wgrib2.exe C:\Users\user\Downloads\msm_wind\Z__C_RJTD_20181023000000_MSM_GPV_Rjp_Lsurf_FH00-15_grib2.bin -csv C:\Users\user\Downloads\msm_wind\msm-gpv.csv
しかし、これを実行すると全ての要素がデコードされてしまい、msm-gpv.csvの容量は3.64GBくらいになってしまいます。
これではいくら何でもファイルを開くだけで一苦労です。。。
必要な要素を絞って変換したいと思います。

-match:要素(物理量、予報時間)を絞る

変換したい要素を限定するオプション-matchがあります。
例えば、東西風速(UGRD)だけに絞ってみましょう。
    > C:\Users\user\Downloads\msm_wind\wgrib2\wgrib2.exe -match "UGRD" C:\Users\user\Downloads\msm_wind\Z__C_RJTD_20181023000000_MSM_GPV_Rjp_Lsurf_FH00-15_grib2.bin -csv C:\Users\user\Downloads\msm_wind\UGRD.csv
UGRD.csvが出力されたでしょうか。これでも300MB以上になりました。
予報時間が全て出力されているので、初期時刻だけにしてみましょう。
-matchに「":UGRD:10 m above ground:anl:"」を指定すると、初期時刻の東西風速だけが変換されます。
    > C:\Users\user\Downloads\msm_wind\wgrib2\wgrib2.exe -match ":UGRD:10 m above ground:anl:" C:\Users\user\Downloads\msm_wind\Z__C_RJTD_20181023000000_MSM_GPV_Rjp_Lsurf_FH00-15_grib2.bin -csv C:\Users\user\Downloads\msm_wind\UGRD.csv
6時間予報値に絞りたい場合は「":UGRD:10 m above ground:6 hour fcst:"」のように指定します。

-matchには正規表現も使えます。
例えば、初期時刻(anl)の東西風速(UGRD)と南北風速(VGRD)を変換したい場合は、「":(UGRD|VGRD):10 m above ground:anl:"」とします。
    > C:\Users\user\Downloads\msm_wind\wgrib2\wgrib2.exe -match ":(UGRD|VGRD):10 m above ground:anl:" C:\Users\user\Downloads\msm_wind\Z__C_RJTD_20181023000000_MSM_GPV_Rjp_Lsurf_FH00-15_grib2.bin -csv C:\Users\user\Downloads\msm_wind\wind.csv

-lon:指定した緯度経度に最も近い格子点を抽出する

最後に、任意の地点に最も近い格子点を抽出してみます。
-lonオプションに経度、緯度を指定すると、その地点に最も近い格子点のデータが抽出されます。例えば、135.525928、34.687334を指定してみましょう。
    > C:\Users\user\Downloads\msm_wind\wgrib2\wgrib2.exe -match ":(UGRD|VGRD):10 m above ground:anl:" C:\Users\user\Downloads\msm_wind\Z__C_RJTD_20181023000000_MSM_GPV_Rjp_Lsurf_FH00-15_grib2.bin -lon 135.525928 34.687334 -last C:\Users\user\Downloads\msm_wind\grid.csv -nl_out C:\Users\user\Downloads\msm_wind\grid.csv
-lastと-nl_outは出力ファイルを指定しています。同じファイルを指定するようにしてください。
出力ファイルの指定に-csvを使うと全ての格子点が出力されてしまいますのでご注意ください。
さて、grid.csvは以下のように出力されましたでしょうか。

まとめ

いかがでしたでしょうか。
今回は、Windows環境でwgrib2を用いてGRIB2形式データをCSV形式に変換、さらに、任意の地点に最も近い格子点を抽出する方法について解説しました。
プログラミングは初心者という方でも、簡単なコマンドを打つだけですので、GRIB2形式データの利用のハードルはかなり下がったのではないでしょうか。
初期時刻の異なる、長期間のデータを処理する場合は、コマンドを打つのは大変なので、バッチファイルを書いて実行すると良いと思います。

気象データは、膨大なデータ容量や特殊なフォーマットの場合がありますが、簡易的で便利な方法もあるので、より多くの方にデータを利活用頂けるといいなと思います。

この記事を書いた人

K.Sakurai

気象予報士/技術士(応用理学)/防災士 
総合気象数値計算システムSACRA、データ提供システムCOSMOS及びお天気データサイエンスの開発に一から携わる。
WRF-5kmモデル、虹予報、虹ナウキャスト、1㎞メッシュ雨雪判別予測データ、2kmメッシュ推計日射量を開発。
趣味はバドミントンと登山。

前の記事へ 【データ解説】発達する熱帯低気圧の5日予報
記事一覧へ
次の記事へ 【データ解説】虹ナウキャスト
  1. お天気データサイエンスHOME
  2. 技術情報
  3. 技術ブログ
  4. Windows環境でGRIB2形式データをCSV形式に変換する(ある地点のデータを抽出する)