見出し画像

GPV形式の気象データ入門

はじめに、扉の絵は『気象庁|数値予報とは』より引用させていただいてます。
また『GPV形式』という言い方をするのかよく分かりませんが、なんとなく語呂がよかったのでタイトルに使いました。あしからずご了承ください。

さて、今回はGPVデータの話です。

気象データの中でも特殊な部類に入るデータの代表格であり、気象データは難しいとされる原因の一つでもあります。逆にいうと『GPVデータを制すれば気象データを制す』とも言えるかもしれませんね(大げさ…)

ということで、気象データアナリストにはぜひ扱えるようになってほしいGPVデータについて、概要を書きたいと思います。

GPVデータとは

GPV(Grid Point Value:格子点値)とは、空間を格子状(メッシュ)に区切り、その格子点上の値が集まって構成されたデータです。身近なもので例えると、障子の枠みたいな感じでしょうか。

GPV ≒ 障子の枠?

ちょっと違うかも?😅
ただGPVの格子は正方形とは限らないので、そういう意味では障子と似ているところもちゃんとありますよね。

…閑話休題。
GPVのちゃんとしたイメージとして、地球上をメッシュに区切った様子を見たい方は、気象庁ウェブサイトにあるこちらの図が最適と思います。

気象庁|数値予報とは』より引用

アメダスや高層観測データがある1地点のデータであるのに対し、GPVは空間的な広がりを持つデータという特徴があります。空間的なデータなので、そのまま作図(可視化)したり、2次元以上の次元の数値データとしてデータ処理する使い方ができますし、また任意の緯度経度のデータを切り出して使うこともできます。任意の緯度経度で地点切り出しする場合は、最寄りの格子点値を取り出す方法や、周辺4格子点から内挿処理して値を算出する方法があります。

例えばこんな絵を描けます
(地上気圧・風・降水量)

GPVデータの代表格といえば数値予報データです。サイトによってはGPV=数値予報データと記述しているものもあります。もちろんGPVデータは数値予報データだけではありませんが、狭義でGPV=数値予報データと言いたくなるくらいに代表的で、重要なデータであることは間違いありません。

では数値予報以外にどのようなデータがあるかというと、降水ナウキャストや雷ナウキャストなどの予報プロダクト、推計気象分布・毎時大気解析のような実況解析データ、さらには気象レーダーや気象衛星による観測データまであります。

ここには書ききれないくらい多くのデータがありますので、詳しくは気象庁ウェブサイトなどをご参照ください。

👉 気象データ高度利用ポータルサイト
👉 気象庁情報カタログ 
👉 GPVサンプルデータの一覧

GPVデータのデータ形式

GPVデータの扱いが難しい要因として、バイナリデータである、という点を挙げることができます。バイナリデータは0と1のみで表される二進数のデータであり、コンピュータのためのデータ形式です。

そして気象データのバイナリデータには、いくつかの特殊なデータ形式が存在します。この点も難易度を上げる一因と言えるでしょう。ここでは代表的なデータ形式を2つ紹介します。

GRIB2

GRIB2形式は世界気象機関(WMO)が規定する国際的な気象通報式、つまりはGPVデータのためのデータ形式です。数値データに加えて、インデックス情報(気象要素名や緯度経度・時間情報などデータに関する説明情報)が一緒に格納されています。

例えば、書籍に本文だけでなく目次や索引が付いているイメージでしょうか。このインデックス情報を専用ソフトウェアで読み取ることができるので、方法を学べばGPVデータを比較的簡単に処理できる、というわけです。

なおGRIB2の他に(というか前に)GRIB1というものもあります。現在多くのデータで使われているのはGRIB2です。気象庁のJRA55再解析データのようにGRIB1のデータも存在します。ただGRIB1→GRIB2変換はわりと簡単にできますので、実質的にはGRIB2形式の扱い方だけ知っていれば十分なことが多いです。

GRIB2の長所は(後述のNetCDFに比べ)圧縮性が高くファイルサイズが小さくなる点です。すなわち流通させるのに適しています。気象庁のデータも数値予報GPVをはじめ、多くのGPVデータがGRIB2で配信されています。

一方でGRIB2の短所は(あえて書くと)本来WMOが規定した世界共通のフォーマットのはずなのに、気象機関によって微妙に違う場合があることです。
例えば、ヨーロッパ中期予報センター(ECMWF)はGRIB2のデータを処理するためのライブラリを公開していますが、日本の気象庁のデータの中にはうまく処理できないものがあります。おそらく内部で使われているテーブルか何かの違いではないかと想像していますが、私もよく知りません。

ということで、少し不便なところもあるGRIB2ですが、多くのGPVデータがGRIB2形式なので、気象データアナリストにはぜひ扱えるようになってほしいですね。

NetCDF

NetCDF形式はUnidataが開発したデータ形式で、GRIB2形式と同様に数値データに加えてインデックス情報を格納したデータです。

NetCDFの長所は汎用性の高さにあります。NetCDFは気象だけでなく、海洋や気候変動など地球科学の広い分野で利用されています。またGIS系のソフトウェアもNetCDFをサポートしているようです。
そういえば、アメリカで開発されている数値予報モデルWRFも、入出力ファイルはNetCDFです。

このように多様な用途を持つNetCDFですが、短所としてはGRIB2に比べると圧縮性に劣る点を挙げることができます。データ利用者の立場からすると、もともとNetCDFのデータを入手するより、GRIB2のデータをNetCDFに変換して使うことの方が多くなるのでは?と思います。

その他

以上、代表的なフォーマットを説明いたしましたが、この他にインデックス情報を含まない数値データのみのGPVもあります。GrADSという地球科学系では有名な描画ソフトウェアで使われるデータ形式ということもあり、文脈によってはGrADSバイナリとか、GrADS形式なんて呼ばれることもあります。

このインデックス情報なし数値データのみの単純なバイナリデータは、データの並び(気象要素・時間・3次元空間の並び)がどうなっているかや、ビッグエンディアンかリトルエンディアンかなど、ある程度の情報を事前に把握しておく必要があるので、難易度は非常に高いです。

一方で上記情報がわかっていれば、Pythonのnumpyでも読み込むことができ、私の個人的な体感では、GRIB2やNetCDFをPythonで読み込むよりも高速に処理できる、というメリットがあると思います。

とはいえ、気象データアナリスト含め一般のデータ分析者やエンジニアが触れることはあまりないデータ形式なので、そんなものもあると知っておいていただければ十分です。

GPVのための専用ソフトウェア

GPVデータが難しいと言われるもう一つの理由として、人がメモ帳アプリ等で気軽に開いて見ることができない、という点もあります。やっぱ視覚的に見れないとどうしようもないですよね。

しかし実際には、GPVデータを処理するための専用ソフトウェアやPythonライブラリが複数存在し、OSSとして公開されていますので比較的簡単に扱うことができます。

ここでは気象のGPVデータを処理するための代表的なソフトウェアを紹介します。

wgrib2

wgrib2はアメリカ海洋大気庁(NOAA)が公開する、GRIB2形式のGPVデータを処理するためのソフトウェアです。
Linux系やMacの場合はソースコードをダウンロードしてコンパイルして使用しますが、Windowsの場合はコンパイル済み実行ファイルが公開されていますので、ダウンロードするだけで使用できます。

wgrib2はコマンドラインで実行したり、Python等のプログラミング言語で実行したりして使用します。
主な機能として、GRIB2のファイルが持つインデックス情報を書き出したり、インデックス情報を使ってデータの一部を取り出したり、GRIB2からNetCDFなど他のフォーマットに変換したりすることができます。

その他

wgrib2はNOAAが公開するソフトウェアですが、ECMWFが公開するecCodesにもコマンドラインでGRIB2を処理するソフトウェアが含まれています。ただこれを使っているという話は、少なくとも日本ではあまり聞いたことがありませんし、情報も少ないです。個人的には興味はありますが…

また日本の気象庁も、数値予報GPVと一緒にサンプルプログラムを配布しています。確かCとかFortranのプログラムだったような(?)
こちらも私は、研究者等ではない一般利用者が使っているという話は、あまり聞いたことがありません(情報共有歓迎😁)。

ということで、コマンドラインツールとしてはwgrib2一択かな、と思います。

GPVのためのPythonライブラリ

次にPythonライブラリを紹介します。

xarray

xarrayはNetCDFのGPVデータを読み込むことができるPythonライブラリです。

読み込んだGPVはnumpyの多次元配列のような形で利用できますが、xarrayの突出した特徴として『時間・空間の座標軸を持った多次元配列として扱える』という長所があります。

例えばnumpy配列ですと「axis=0が時間軸で、axis=1が経度方向で…」とあらかじめ知った上で、意識してコードを書く必要があります。
一方でxarrayでは、時間軸や緯度経度方向の軸の情報を持ったオブジェクトが作られます。これにより時間や緯度経度でインデクシング・スライシングすることができるようになっています。
例えば緯度経度を指定して、緯度30〜50度・経度130〜145度のデータを取り出す、ということが簡単にできます。これはかなり便利です。

他にも内挿計算や可視化の機能が備わっており、非常に高機能です。一通りデータ処理したら、numpy配列やデータフレームで値を書き出すことも可能です。

個人的にはGPVデータをPythonで扱う方法としては、wgrib2でGRIB2 → NetCDF変換してxarrayで読み込む、という方法が一番便利で使いやすいと思います。

pygrib

pygribはGRIB2のGPVデータをそのまま読み込むことができるPythonライブラリです。NetCDFに変換する必要がない、という点ではxarrayより便利です。

ただデメリットとして、内部でecCodes(ECMWFのライブラリ)を使っているためか、気象庁データの中にはうまく読み込めないものがあります。
最も利用されると思われる数値予報GPVは問題なく読み込めますが、推計気象分布や解析雨量などは読み込めないようです。

またpygribはWindows環境で利用できない場合があり、OSに依存してしまう側面があります。さらにxarrayの座標軸のような機能もなく、データ処理上の利便性もxarrayに劣ります。

私個人としては、pygribを使うケースもちゃんとありますが、特に最近はxarrayを使うことが圧倒的に多いかな、と思います。

その他

PythonでGPVデータを扱うライブラリは他にもあります。

これまで何度か登場したECMWFや、イギリス気象庁(UKMET)が独自に公開するPythonライブラリがあります。個人的に興味はあるものの、情報が少なく敷居が高いです。いつか時間をかけて調べて、またnoteに書けたらいいなと思います。

他にはNetCDFのGPVを読み込めるnetCDF4というライブラリがありますが、xarrayほど便利な機能はなく、あえてこちらを選ぶ理由はありません。

また、気象ビジネス推進コンソーシアム(WXBC)の有志で作成したwxbcgribというPythonモジュールがあります。WXBCは気象データの利活用を広めるため、独自にPythonモジュールを作成されていました。
ただ今後はxarrayを紹介していくような雰囲気があり、wxbcgribのアップデートを続けるかどうかは不明です。

ということでPythonでGPVデータを扱う場合も、ほぼほぼ『wgrib2 + xarray』の組み合わせ一択になると言えるでしょう(個人の見解です)。

なお上述したように、インデックス情報なし数値データのみの単純バイナリデータであれば、numpyで読み込んじゃうという手もあります。処理速度重視であれば有力な選択肢です。

…そもそも処理速度重視なら、CなりFortran使えばいいんですけどね。

おわりに

ということでGPVデータについて、データ形式や専門ソフトウェアなどの概要をまとめました。ここまで読んでいただき、ありがとうございます。

GPVに関するこうしたまとめサイトや文献ってあまり見かけないので、少しでもお役に立てていたら幸いです。

なお実践編というか、実際にどういうコード書くか、という話はまた次回書ければと思っています。次回…いつになるかわかりませんが(笑)

もしすぐにでも実践編を学びたいという方、気象データアナリスト養成講座をご検討ください!私も講師として関わっており、GPVデータの扱い方も学べます。

またGPVデータを使いたいという企業の方、お仕事としても承っております。まずはお気軽に、以下の問い合わせフォームからご連絡いただければ幸いです。

最後までお読みいただき、ありがとうございました。

この記事が気に入ったらサポートをしてみませんか?