続・Python による気象解析入門

観測点ごとの風のデータを図示する


観測点ごとの気象データを地図上の観測点の位置に表示する作業のつづきとして、 風のデータをあつかってみる。 材料は前回の [観測点ごとの気象データを図示する] とおなじく 気象庁のウェブサイトからダウンロードしたデータだが、 風は日平均風速だけではおもしろくないので、時別値 (1時間ごとの観測値) をつかう。 風を矢印や矢羽根で表示するには、格子点データのばあいと同様に、 Cartopy の quiver や barbs をつかう。 (この機能は格子点データむきにつくられているので、 観測点ごとのデータに最適ではないようだが。)


実行方法

今回のPythonプログラムの例文とそれがつかうデータは、luce の /home/masuda/mapstationwind に置いてある。

各自、つぎのコマンドによって、プログラム例をコピーしてほしい (最後の空白のあとのピリオドが重要)。

cp -r /home/masuda/mapstationwind .

そして、mapstationwind に cd して作業してほしい。

なお、そこには前回 mapstationobs に置いたのと同じ (Tateno = つくば、Nikko = 奥日光 についてのまちがいを修正した) jma_stations_ja_sjis.csv もふくんでいる。


気象庁の地上気象観測データ

気象庁ウェブサイトの「各種データ・資料」のページの「気象」のうちの「気象観測データ」のところにある 「過去の地点気象データ・ダウンロード」から、2023年 7月 10日に取得した。

「地点を選ぶ」では、前回と同様に、日本全国を 5つの地方にわけ、 それぞれの気象官署等 (地点を選ぶ地図で赤の二重まるで表示されているところ) を全部選択した。

ただし地図上で地名の文字が白ぬきのところは観測が継続していない地点なのでふくめない。

「項目を選ぶ」で、データの時間間隔を「時別値」とし、 気象要素として「風向・風速」、「気温」、「降水量」、「日照時間」、「海面気圧」、「相対湿度」を それぞれえらんで別々のファイルとしてダウンロードすることにした。

「期間を選ぶ」では、2023年 6月 1日から 2023年 6月 6日 までの6日間を指定した。 (静岡県などに大雨があった 6月2日をふくんでいる。) そうすると、日本時間の 6月1日1時から 6月6日24時 (=6月7日0時) までの観測値がダウンロードされる。

「表示オプションを選ぶ」のところは、いずれも、あらかじめ与えられているほう (デフォールト値) にしておく。 その「ダウンロード CSV ファイルのデータ仕様」のうち「日付の形式」は「日付リテラルで格納」である。

取得されたデータファイル (風速・風向)

ダウンロードされた data.csv のファイル名をつけなおし、 luce の /home/masudako/mapstationwind の下に置いた。このページからもリンクしておく。

各列の内容はつぎのようになっている。

取得されたデータファイル (ベクトルでない気象要素)

同じ日時・地点のくみあわせについて、つぎの気象要素の観測値もダウンロードした。 ファイル名は、上記の「wind」のところをつぎにしめす略号におきかえたものである。

列の数は、降水量と日照時間は「現象なし情報」があるので1地点あたり4列、その他は1地点あたり3列である。


[30a] 指定された緯度・経度領域 (例文では「関東」) の観測点の 風向・風速 を 文字で 地図上にしめす

地点の位置に○印、その左上に風向 (英語の頭文字略語)、右上に風速 (m/s 単位、小数1けた) をかく。

緯度・経度領域は、変数 lonmin, lonmax, latmin, latmax にあたえる値によって指定する。

それにともなって観測値 csv ファイルの選択も変える。 それには、region=['hokkaido', 'tohoku', 'kanto_chubu', 'kansai', 'kyushu'] のうち該当するものをのこせばよい。

どの時刻をとりあげるかは、プログラム中で変数 krecstart と krecend に与える値によって指定する。 これは、データフレーム dfobs の行番号であり、 観測データのある最初の時刻 (今回のデータセットでは 7月 1日 日本標準時 01時 [00時ではない]) を 0 としている。 【datetime パッケージの関数をつかって日時と行番号との換算をすればよいのだが、 まだくみこんでいない。】

プログラムの中では、まず地点表 jma_stations_ja_sjis.csv をデータフレーム dfstn に読みこむ。 つぎに、観測値 csv ファイルの地点名の行だけをデータフレーム dfobshead に読みこんで、 dfstn に、列 col00 として、観測データcsvファイルの列番号を追加する。 それから、観測値 csv ファイルを データフレーム dfobs に読みこむ。

表示する時刻ごとに、風向、風速、品質番号のリスト dir, sp, qval を作成する。 dir には、風向を日本語文字列から16方位の整数を経由して英語文字列に変換して入れている。 【Python のグラフィックスでは、日本語文字をあつかうことも可能ではあるが、 それに必要な日本語フォントの指定が OS や個別計算機の事情によってちがうので、 この実習教材では ASCII コードであらわされるアルファベット・数字などにかぎることにする。】

それから作図にはいる。文字列が左上と右上の2つになるほかは、前回の作図とほぼ同じ。

品質情報のあつかいを、前回の気温などのばあいと同様に、つぎのようにした。


[30b] [30c] 観測点の風速ベクトルを矢印で図示する

ベクトル量を矢印で表示するプログラム quiver には、ベクトル量を x成分、y成分の数値であたえる。 気象学では、x 軸 を東西方向 (東が正)、y 軸 を 南北方向 (北が正) にとるのがふつうである。 風速ベクトルは {u = dx/dt, v = dy/dt} の形になる。 u は 風の東西成分で、西風 (東にむかう流れ) が正、 v は 風の南北成分で、南風 (北にむかう流れ) が正である。

2次元ベクトルの直交直線座標と極座標とのあいだの変換はつぎのようにかける。

「風速・風向」から「(u, v)」へ変換するとき、 ベクトルの大きさは、風速をそのままつかえばよいのだが、 偏角と風向との関係は、つぎのことに注意する必要がある。

プログラムでは、つぎのような換算式をつかっている。 (idir が風向 (16方位の整数表現)、sp が風速。 風向の16方位の整数表現では、4が直角、8が平角 (2直角) にあたる。)

arg = (-4 -idir) * math.pi / 8
u[kstnobs] = sp * math.cos(arg)
v[kstnobs] = sp * math.sin(arg) 

静穏のばあいは、換算式によらず、u と v の両方に 0 をいれることにした。 (静穏はかならずしも風速が厳密に 0 ではないのだが、風向がわからないとき、 風速ベクトルの東西・南北成分に 0 以外の値をあたえる理由がない。)

格子点データの風の表示でもつかった quiver によって、(u, v) の値にもとづいて矢印をかく。

quiver は複数の矢印をいっぺんにかけるのだが、 ここでは 1地点ごとによびだしている。 【しかも、quiver にあたえる x, y と u, v のデータの型がちがうとうまくいかず、 試行錯誤のすえ、x, y, u, v ともに、要素が 1個だけ (0番だけ) の配列変数 lona, lata, ua, va にいれてからわたすことにした。 ここは熟練者ならばもっとうまくやれるだろうと思う。】

風速と図上の矢印の長さとの関係は、quiver のパラメータ scale によっている。 scale の意味はよくわからないが、試行錯誤で 50 ときめた。 凡例として、風速の値をあたえた矢印を (図の左上に黒で) しめすことにした。

静穏のばあいは、矢印でなく まる をかくことにした。 他方、静穏ではないのだが風速が弱いばあいは、矢印をかくのだが、 小さすぎて読みとれないこともある。

プログラム例 [30b] では、[30a] と同様に、地点の左上に風向 (英語)、右上に風速をかく。 [30c] では、地点の左上に u、右上に v の値を数字でかく。 実用的には、矢印に文字をそえないほうがふつうだろう。 そうするには、[30c] をもとに、 「# 観測点の左上に u, 右上に v の数値を数字でかく」から 「# 風ベクトルを図示する」の直前までをけずればよい。


[30d] 観測点の風速ベクトルを矢羽根で図示する

quiver のかわりに barbs をつかうと、風を天気図でつかわれる矢羽根であらわすことができる。

矢羽根の線の数は、国際式天気図のきまりがあるが、 それは高層天気図むきにつくられていて、地上、とくに陸上の風ではわずかな数しかかかれない。 ここでは、つぎのように変更した。標準とちがうことに注意。 凡例は title にふくめている。


[31a] 観測点の (ベクトルでない) 気象要素の値を数字で地図上にしめす

前回の[28c-d] でやったのとだいたい同じだが、前回は日別値、今回は時別値 (1時間ごとの値) である。

気象要素の指定は、変数 svar の値として、'tmp', 'precip', 'sundur', 'psea', 'rh' のいずれかをあたえる。

日時、地域については、[30a] と同様である。


[32a] ひとつの地点の風の観測値の時系列をグラフにする

1つの地点について、画面を 4段にわけ、それぞれ横軸に日時をとって 風向 (16方位)、風速 (m/s)、東西成分 (m/s)、南北成分 (m/s) の点グラフをかく。

地点の指定は、変数 stnamesel の値として、地点名をローマ字 (頭文字だけ大文字、あとは小文字) であたえる。 (国際地点番号表にあわせたので、つくば は Tateno、奥日光は Nikko である。)

地点にあわせて、変数 filenameobs の値としてあたえる csv ファイル名を、その地点がふくまれる地方のものにする。

(今回は、データ欠損 または 品質情報が 2以下のところは、欠損として処理した。 しかし、欠損箇所を明示する手つづきはくみこまなかったので、欠損箇所はただ見えないだけになっている。)


[32b] ひとつの地点の (ベクトルでない) 気象要素の観測値の時系列をグラフにする

1つの地点について、横軸に日時をとって、1つの気象要素の点グラフをかく。

【[32a] と同様に段組みにして複数の気象要素を同じ画面におさめることもできるのだが、ひとまず見送った。 地点名の表 dfstn に 複数の 観測値 csv ファイルの列の情報を書きこむためのプログラミングがまだできていないからである。】

気象要素の指定は、変数 svar の値として、'tmp', 'precip', 'sundur', 'psea', 'rh' のいずれかをあたえる。

地点の指定のしかたは [32a] と同様である。


2023-07-11
増田 耕一 (MASUDA Kooiti)
[B, F, G 合同セミナーのページ] [増田の立正大学用教材目次] [計算機を利用した気象分野の実習教材目次] [教材目次]