ecmwf-opendata
をgoogle colaboratory(以下google colab)で使いたくて色々試していたが、gribデータをうまく読み込めず利用できなかった。また、なぜかこの手の記事を見つけられなかった(ので環境のせいかも)。
google colabでの環境
!python --version
Python 3.10.12
cfgrib.__version__
'0.9.12.0'
xarray.__version__
'2023.7.0'
エラーの状況
cfgrib
はgribフォーマットのデータをxarray
というPythonパッケージで読み込むための補助的な外部パッケージ。
よって、google colabで使う場合は以下のようにpipインストールをして利用する。
!pip install cfgrib
!pip install xarray
その後、xarray
のopen_dataarray
メソッドにて、engine='cfgrib'
とキーワード引数を設定しDataArray
として読み込むのだが、以下のエラーを吐き出し利用できない。
import xarray as xr
da = xr.open_dataarray('data.grib2', engine='cfgrib')
ValueError: did not find a match in any of xarray's currently installed IO backends ['h5netcdf', 'scipy', store']
解決
このエラーは例えばcfgrib
をインストールせずに利用すると出るエラーで、一般的なもの。故にエラー文を検索すると「先にcfgrib
をインストールせよ」という解決しか出てこない。してるんだってば!
色々試した1結果、pipインストールの場合は事前にecCodes
のライブラリをインストールしている必要があるらしい(旧バージョンのcfgribドキュメント)。
これを踏まえ、apt-get
(degian系Linuxのパッケージマネージャ)でecCodes
のライブラリをインストールする一文を加えると、データの読み込みに成功した。
!apt-get install libeccodes-dev # これが大事
!pip install cfgrib
!pip install xarray
実行サンプル
以下にgoogle colabにて実際にgribデータをecmwf-opendataでダウンロードし読み込むサンプルを示す。
!apt-get install libeccodes-dev
!pip install cfgrib
!pip install xarray
!pip install ecmwf-opendata
from ecmwf.opendata import Client
client = Client(source="ecmwf")
# 最新のアンサンブル予報の解析値(予報の元となるデータ)より300 hPa気圧面のジオポテンシャル高度分布データをdata.grib2として取得
client.retrieve(
time=0,
type="cf",
step=0,
param=["gh"],
levelist=[300],
target="data.grib2",
)
import xarray as xr
da = xr.open_dataarray('data.grib2', engine='cfgrib')
da.plot()
なお、ecmwf-opendata
からデータをダウンロードすることで、ライセンス利用規約:Attribution 4.0 International (CC BY 4.0) に同意したことになります(公式)。
おわりに
解決してよかった。apt-get
使えるのはたまげた。pip
はconda
と異なりライブラリまで管理してくれないことを学んだ。試してないがcondacolabというパッケージがあるらしい。とはいえ、いちいちcondaをインストールするのは面倒ね。
-
インポートの順番の組み合わせ、xarray[complete]の利用、pip自体のアップデート、
!pip install eccodes
、いずれも失敗に終わった。 ↩