[気象観測データ (多地点) の 空間分布と時系列の作図 (Python による試作)]では、 気温や降水量などの日値のデータをCartopy をつかって 地図上に表示した。 そのときは、風のデータはあつかわなかった。 ひとつには、風向・風速は、水平2次元の風速ベクトルとしてあつかいたいのだが、 前の教材ページを書いたときはそのあつかいかたをまだ知らなかったからである。 もうひとつには、気象庁の観測データで 日値として記録されている 日平均風速、最多風向などは、解釈しにくい量だからである。
ここでは、時別値 (1時間ごとの値) の風速・風向をあつかうことにする。 この風速は、毎正時で終わる10分間の平均風速である。
風ベクトルは、矢印による表現と、天気図の矢羽根による表現の両方がよくつかわれる。 Cartopy では、矢印による表示をする quiver と、矢羽根による表示をする barbs がある。 ただし、どちらも、風速を、東西成分 (西風が正)と 南北成分 (南風が正) にわけてあたえるようにできている。 【この機能のつかいかたについては、山下 陽介 さんの 「気象データ解析のためのmatplotlibの使い方」 (暫定サイト https://github.com/yyousuke/matplotlib )、 とくにそのうち「7章 cartopyの利用(バージョン0.18対応)」 matplotlib-7_0.18.pdf を参考にした。 [2021-08-01 補足] その後、山下さんの文書が改訂され、matplotlib-7.pdf が バージョン 0.18 対応のものになっている。】
ひとまず、地図上に矢印あるいは矢羽根で風を表示できるところまでいったので、 プログラム例を紹介する。 ただし、地図投影は、正距円筒図法 (Plate Carree) である。 他の図法で風ベクトルを表示できるかどうかはためしていない。 (他の図法のばあいは、風の水平2次元の成分の意味がちがってくるのかもしれないが、未確認である。)
【[2021-07-23] 第1回試作の記録の中に書いていたが、毎回必要な知識なので、ぬきだしておく。】
風向は、まず、文字列から、 静穏を 0、北北東を 1、北東を 2、... 北を 16 という 16方位のコード番号 (整数値、変数名 idir) におきかえる。 それから、東向きを x 方向、北向きを y 方向としたベクトルの偏角 (変数名 arg) に換算する。 風向コードと偏角とは逆まわりであり、しかも、北風は南向きの流れなので、まちがえやすい。
どうやら、次の計算式でよいようだ。
arg = (-4 - idir) * math.pi/8
そして、風速に cos(arg) をかけると風の東西成分、sin(arg)をかけると南北成分がえられる。
地点の緯度経度の表は、 [気象観測データ (多地点) の 空間分布と時系列の作図 (Python による試作)] で変換ずみのつぎのCSVファイルをつかう。
観測値のデータの例として、 気象庁ウェブサイトの「過去の気象データ ダウンロード」から 2021年5月25日にダウンロードした、 熊谷と秩父の2地点の、2021年4月24日1時から2021年5月24日24時までの毎時のデータを用意した。 日時は、「日付リテラル」ではなく、年、月、日、時がそれぞれ数値として書き出される方式にした。 なお、風向は 「北北東」「静穏」などの日本語文字列で書き出される。 (「ダウンロードCSVファイルのデータ仕様」を「すべて数値で格納」をえらんでも、数値にならなかった。)
風速・風向の品質情報はそれぞれついているが、均質番号はあわせて1列であり、 1地点の風向・風速のデータは、CSVの5列をしめている。 それを考慮して、手作業で、各地点の データの表の列(をしめすアルファベット記号) と そこにおさめられた要素との対応表をつくった。 (ここでは前回うまくいった方法をまねたが、 どの地点も時別の風向・風速だけならば、key表作成プログラムを 対応表をつかわないで列番号を計算するように 変更したほうがよさそうだ。)
それを、つぎの Python プログラムで、地点表と組みあわせて処理し、key 表をつくった。
そして、観測データ と key表 とを読んで、地図上に作図するプログラムをつくった。
今回の試作文で表示した観測地点は2地点だけである。 これだけではおもしろくないが、地点数をふやすことは、 列の対応表をつくるてまがかかること以外は、むずかしくないと思う。
関東7都県と福島、新潟、長野、静岡、山梨県にある 気象官署や特別地域気象観測所 (ただし富士山はのぞく)の風を表示してみた。 期間は、熊谷で最高気温の極値が出た 2007年 8月 16日 14時をふくむように、 2007年 8月 11日から20日までとした。
地点表を、あらかじめ編集して、対象となる都道府県にふくまれる地点にしぼっておくことにした。 【第1回の方法で key ファイルをつくったら、緯度経度の値が意外なものになったところがあった。 原因は、気象庁の地点名が全国で一意的でなく、 わたしのプログラムがそのことに対応していないことだ。 同じ地点名があると、あとに出てきたほうの地点の緯度経度をひろってしまう。 [トラブルシューティング事例集]にも追加しておいた。 ここでは、そこに書いた「対策 3」をとることにした。】
観測値のデータとして、 気象庁ウェブサイトの「過去の気象データ ダウンロード」から 2007年8月11日1時から2007年8月20日24時までの毎時の値をふくむ CSVファイルを、 2021年7月23日にダウンロードした。 日時は (前回とちがって) 「日付リテラル」とした。 【Python の datetime パッケージで、気象庁の日付リテラルを日付として読めることが わかったので、それをつかうことにした。】
どの地点のデータもそれぞれ5列をしめているので、 手作業でcolumn対照表をつくるのはやめて、 ダウンロードしたデータにふくまれる地点名だけを書きだした表を テキストファイルの形でつくった。【なお、地点名のローマ字表記を追加しておいた。 ローマ字の方式は、気象庁が国際的につかっているものにあわせて、 ヘボン式、長音短音の区別なし、とした。 ただし、この情報は、いまのところ つかっていない。】
それを、つぎの Python プログラムで、地点表と組みあわせて処理し、key 表をつくった。
そして、観測データ と key表 とを読んで、地図上に作図するプログラムをつくった。
風速ベクトルを矢印で表示する。 風速の値と矢印の長さとの関係は、 quiver に、「scale=50」とあたえている。 (図が見やすいように数値を試行錯誤で調節したもので、数値の意味はよくわかっていない。) 静穏 (風速 0.2 m/s 以下) のばあいは地点を ○ でかこむ (quiver と別に plot をよびだしている)。 凡例の矢印を、quiverkey をつかわず、quiver に 同じ scale をあたえてかいている。
現状のプログラムでは、8月16日の日本時間1時から24時 (翌日0時) までを作図するようにしてある。
プログラムの最後の部分の plt.show() を生かすと図を画面表示し、 plt.savefig(...) をふくむ4行を生かすと図を画像ファイルに保存する。 ただし、画像ファイルは image というディレクトリにつくられるので、 実行前にそのディレクトリをつくっておく必要がある。
【第1回試作と同様に、(u, v)の値、風向、風速を、 それぞれ文字で表示することもこころみたが、 現状のプログラムではコメントにしてある。 そのうち風向の表示は漢字で、MS Windowsの日本語フォントを前提としている。 また、文字の色を指定するとなぜかエラーになったので、色の指定ははずしてある。】
風速ベクトルを天気図の矢羽根で表示する。 風速の値と矢羽根との関係は、 短い羽根が 1 m/s、長い羽根が 2 m/s、旗が 10 m/s とした。 (国際式天気図の方式をまねているが、数値が同じでないことに注意。 陸上の地上風は高層や海上の風にくらべて弱いので、同じ尺度だとよく見えてこない。)