気象庁のMSM解析値 (京大生存研のNetCDF版) を Python xarray で 読む

気象データとしては、観測値のほかに、 数値予報の初期値のためにつくられた格子点データがよくつかわれる。 初期値をつくるためには、観測値と(前の時刻の初期値からの)予報値とをくみあわせる 「データ同化」とよばれる技術がつかわれる。 観測値をとりこんで得られた格子点値を「解析値」あるいは「客観解析値」という。 それをそのまま初期値にするばあいと、 初期値にするまでにもう一段の処理があるので解析値と初期値とが区別されるばあいがある。

格子点データのファイル形式として、 気象庁では、WMOできめられた GRIB version 2 (GRIB2) という形式をつかっているが、 研究者は、アメリカの Unidata できめられた NetCDF という形式をつかっていることが多い。

ここでは、気象庁の MSM (メソスケールモデル) の解析値の、 京都大学 生存圏研究所で NetCDFに変換された形のものを Python の xarray パッケージをつかって読むことにする。


京大生存研にある MSM データ

京大生存研の「生存圏データベース」http://database.rish.kyoto-u.ac.jp の サーバーで公開されている気象庁MSMの格子点データには、 気象庁でつくられ、気象業務支援センターから GRIB2 形式で配信されたものと、 それを京大生存研で編集して NetCDF 形式にしたものがある。 (なお、全球モデル GSM の格子点データは、GRIB2 形式のものだけが置かれている。)

ここでは、NetCDF形式になったものを読む。 「生存圏データベース」→ 「グローバル大気観測データ」→ 「気象庁データ」→ 「解析値を中心に再構成したNetCDFデータ (MSM, RSM)」→ 「解析値を中心に再構成したNetCDFデータ (MSM, RSM)」(OpenDAPでないほう) と リンクをたどると、http://database.rish.kyoto-u.ac.jp/arch/jmadata/data/gpv/netcdf/ に行く。

ここに、MSM-P と MSM-S のディレクトリがある。 MSM-P は気圧面 16層、MSM-S は地表面など 1層のデータをさしている。 それぞれの下に、「2002」から「2025」までの年 (4けた数字) のディレクトリがある。 たとえば「2002」の下をみると「0701.nc」から「1231.nc」までのファイルがある。 これは、2002年7月1日から2002年12月31日まで、1日ごとのデータで、 そこに、00 UTC から 23 UTC までの、MSM-S では 24時刻、MSM-P では 8時刻の値がふくまれている。

MSM-Sデータにはつぎの変数がふくまれる。 psea (海面気圧)、sp (モデル地表面気圧)、u (風速の西風成分)、v (風速の南風成分)、 temp (気温)、rh (相対湿度)、r1h (1時間降水量)、 ncld (雲量)、ncld_upper (上層雲量)、ncld_mid (中層雲量)、ncld_low (下層雲量)。 水平格子間隔は実際は緯度経度だが約 5 km である。 時間間隔は 1 時間だが、そのうち hour が 3の倍数の時刻は「初期値」、 他の時刻は予報値がはいっている。降水量はすべて予報値である。 観測値の情報がとりこまれるのは初期値がつくられるときである。

MSP-Pデータにはつぎの変数がふくまれる。 z (ジオポテンシャル高度)、w (鉛直p速度)、u (風速の西風成分)、v (風速の南風成分)、temp (気温)、rh (相対湿度)。 【ただし、w は、増田が 2023-06-30 までに見た 2022年のいくつかの日時の netCDF ファイルに関するかぎり、すべて 0 がはいっている。 初期値は 0 で予報が進行すると値が変化するのだろう。】 水平格子間隔は実際は緯度経度だが約 10 km (MSM-Sの格子のひとつおき)である。 気圧レベルは16個あり、1000, 975, 950, 925, 900, 850, 800, 700, 600, 500, 400, 300, 250, 200, 150, 100 hPa である。 時間間隔は 3 時間であり、(2006年3月以降は) どの時刻の値も初期値である。

(初期値・予報値の情報は http://database.rish.kyoto-u.ac.jp/arch/jmadata/data/gpv/netcdf/README による。)


研究室 Linux マシンでのデータの配置

hamana と niigata には、 2025-05-03 現在、2003-01-01 から 2025-04-24 までの日付のデータがある。 /raid/jma_msm/ の下に、 つぎのようなディレクトリ編成でデータを配置している。

補足説明


Python で NetCDF を読むためのパッケージ

Python で NetCDFを読み書きするためのパッケージとしては、netcdf4 というものがある。 (この 4 は NetCDF の version 4 をさしている。) そのほかに、xarray というものがつくられ、これでも NetCDF を読むことができる。 xarray のほうが、読んだ結果が numpy の ndarray と互換性が高いようなので、 ここでは xarray をつかうことにする。

京大生存研で編集された気象庁 MSM の NetCDF を読んで作図するプログラム例として、 京大防災研の 榎本 剛 [たけし] 先生によるものがある。 これは MSM-P を読むものである。

ここでは、このプログラム例を参考にして、MSM-P と MSM-S を読んで 地図上に作図するプログラム例をつくってみた。


気圧面や地表面での水平分布を地図上に作図するプログラム例

2025-05-03 現在、niigata と hamana の /home/masudako/ex/msm にある。 動作確認は niigata でおこなった。 プログラムのファイル名には「_」 (下線、アンダースコア) をふくんでおり、空白文字はふくんでいない。

つぎの注は、ここにあげた例文に共通である。

例文プログラムはたびたび改訂することになるだろう。

とくに、複数のプログラムで同じことをやっているところは、 ひとつのファイルに書いて各プログラムからそれを共有するようにしたいのだが、 それを実現する方針はまだたっていない。

さらにプログラム例を追加する予定。ウェブページをわけるばあいはここからリンクする。


モデルの地表面の標高とそれを作図するプログラム例

MSMモデルでつかっている地表面の標高 (ジオポテンシャル高度) を 格子点データの格子に内挿したものは、 http://database.rish.kyoto-u.ac.jp/arch/jmadata/data/gpv/original/etc/ にある TOPO.MSM_5K である。 (同じディレクトリにある 「README(支援センター)_201406.txt」、 「README(支援センター)_201702.txt」の情報によった。) TOPO.MSM_5K のタイムスタンプは 2017年1月30日で、その他の時期も同じ値だったかどうかは未確認である。 (変化があっても数値としては小さなものらしいが)。 このファイルは netCDF でも GRIB でもなく 単純バイナリ (4バイト浮動小数点数、big endian) である。

hamana および niigata では、このデータを /raid/jma_msm/topo/TOPO.MSM_5K として置いた。

このデータを、Python で読み、 地図上に標高段彩図を表示するプログラムを作成した。

2025-05-03 現在、niigata と hamana の /home/masudako/ex/jma_msm にある。 動作確認は niigata でおこなった。 プログラムのファイル名には「_」 (下線、アンダースコア) をふくんでおり、空白文字はふくんでいない。

緯度経度範囲は、例として、上記の「関東広域」としてある。

標高の値を階級わけして色と対応づける方法は、上記の風速や気温のばあいとちがい、 levels と colors の配列に値をあたえることによっている。 [気象庁の解析雨量を Pythonで読み、作図する] での降水量の階級わけと同じ方法である。


リンク集


(2023-01-16 ... 2023-08-22) 2025-05-03, 2025-05-04
増田 耕一 (MASUDA Kooiti)
増田の個人サイトでの [計算機を利用した気象分野の教材のページ] [立正大学の授業用の教材ページ] [教材目録ページ] [日本語入り口ページ] [ホームページ]