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

[2025-11-14 おおはば改訂しました。]

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

格子点データのファイル形式として、 気象庁では、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 (下層雲量)。 水平格子間隔は 2006年3月以後は 約 5 km (正確には、緯度 0.05 度、経度 0.0625度)、 2006年2月まではその2倍のあらさの約 10 km である。 時間間隔は 1 時間だが、そのうち hour が 3の倍数の時刻は「初期値」、 他の時刻は予報値がはいっている。降水量はすべて予報値である。 観測値の情報がとりこまれるのは初期値がつくられるときである。

MSP-P データにはつぎの変数がふくまれる。 z (ジオポテンシャル高度)、w (鉛直p速度、気象学の教科書では ω [オメガ] と書かれることが多い)、u (風速の西風成分)、v (風速の南風成分)、temp (気温)、rh (相対湿度)。 水平格子間隔は、2006年3月以後は 約 10 km、2006年2月までは 約 20 km (いずれも MSM-S の格子のひとつおき)である。 気圧レベルは16個あり、1000, 975, 950, 925, 900, 850, 800, 700, 600, 500, 400, 300, 250, 200, 150, 100 hPa である。 時間間隔は 3 時間であり、(2006年3月以降は) どの時刻の値も初期値である。

ここにある MSM解析値の格子は、 3次元データの鉛直レベルは p 面であり、メソスケール数値予報モデルのレベルと同じではない。 水平位置は緯度・経度それぞれ等間隔の格子であり、 メソスケール数値予報モデルの格子とは同じではないらしい。 したがって、配信された解析値がつくられるまでに、 モデル格子からの空間内挿がおこなわれている。 モデルの空間分解能は、2006年3月以後、ほぼ一定にたもたれているようだが、 気象庁のモデルが改訂されると、 その前後でデータの質がちがうかもしれないことに、注意が必要だろう。


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

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

補足説明


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

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

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


プログラム例

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

【2006年2月以前のデータには、それ以後のデータと仕様のちがいがある。 増田がつかんでいるのは、 ひとつは、格子間隔が、以前のデータは以後のデータの2倍であること、 もうひとつは、気温の単位が、以前は ℃ (セルシウス度)、以後は K (ケルビン) であること、 の2点である。つぎのブログ記事にややくわしく書いた。

2025年11月のプログラム例改訂で、この2つの問題点には対処し、 プログラムを前後の期間を通じてつかえるようにした。 しかし、2006年2月以前のデータについての動作テストは不じゅうぶんであり、 未解決の問題があるかもしれない。】

上記のほかにもいくつかプログラム例をつくっているので、 このページ、またはこのページからリンクされたページに追加していく予定。

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


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

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

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

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


南北・鉛直断面や、東西・鉛直断面を作図するプログラム例

プログラム例はいずれも、年、月、日を指定し、 世界時 (UTC) でその日のうち 3時間おきの 8時刻 (リスト変数 hours の内容を変更することによってしぼりこむことができる) について作図する。

鉛直の範囲は 気圧 (hPa) で pmin, pmax の値で指定する。 pmin が上にくるように作図する。

等値線および色塗りの境界は リスト変数 vallevs の値で指定している。 色はカラーマップで、正と負がありうる変数については coolwarm、 符号が一定の変数については Blues を指定している。

savefig が True のときPNG画像ファイル出力、False のとき画面表示となる。

画像ファイルのファイル名には、savejst が True のとき日本標準時 (JST) で、 False のとき世界時 (UTC) で日時がはいる。

指定した経度での南北・鉛直断面

経度 (東経が正) を lonsel で、緯度 (北緯が正) の範囲を latmin, latmax で指定する。

指定した緯度での東西・鉛直断面

緯度 (北緯が正) を latsel で、経度 (東経が正) の範囲を lonmin, lonmax で指定する。


リンク集


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