アメダス時別値の風、気温、降水量、日照時間の地図上表示

この教材は2024年度の exa とだいたい同じですが、番号をかえ、 プログラムを改訂しています。


観測点で得られた観測値を地図上の観測点の位置に表示する。

[2023年度の教材] では、 気象庁ウェブサイトの「過去の地点気象データ ダウンロード」のサイトからダウンロードした CSVファイルを加工しないで作図するプログラム例を用意した。 2020年以後の観測値をあつかうときに必要になるので、 その形式のデータをあつかうプログラムも追って紹介したいが、 初歩の教材としてはわかりにくいので、今回はさけることにした。

今回は、同じ気象庁の観測データだが、 オフライン (CD-ROM) でとりよせたもの (データ形式はバイナリデータ) を 増田が解読して CSV ファイルにしたものをつかう。 (そのCSVファイルの構成はダウンロードサイトのものとはちがう。)】

気象庁の「気象観測月報」という CD-ROM の形で 2010年から2019年までの全国の観測値を取り寄せた。 (このシリーズの CD-ROM がつくられたのはこの10年ぶんだけである。) これにはアメダスの10分値が含まれている。 今回の授業では、そこから 1時間ごと (毎正時) の風、気温、降水量、日照時間を抽出したものをつかう。

例文のプログラムで、2010-2019年のどの時期でもあつかうことができる。 (ただし、月をまたがることはできない。 しかも、毎月1日 (日本標準時) 0時の観測値は、前月のファイルに収録されている。) 地域も、日本全国あつかうことができる。

日時の一例として、今年度の「セミナーの基礎」で観測する予定の地域で、 ドップラーライダー観測がおこなわれ、その結果が 高咲ほか (2017) の論文になっている 2015年 8月 1-8日をとりあげる。

ただし、この日時の中部地方はほとんど降水がなかったので、 降水量の表示の例として設定した日時は、これとは別のものにした。


実行方法

Pythonプログラムの例文は、niigata の /home/masudako/ex/ex9 に置いてある。

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

cp -r /home/masudako/ex/ex9 .

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

今回つかうアメダス観測値のデータは、/raid/jma_kansoku_geppo/ の下の windhourly, tmphourly, preciphourly, sundurhourly というディレクトリに 置いてあるものを読むので、自分のところにコピーする必要はない。 (もし、別のところに置かれたデータを読むばあいは、 プログラムのなかの datapath という変数にあたえる文字列を変更する。)


データ

気象庁 気象観測月報 CD-ROM の内容を、 niigata の /raid/jma_kansoku_geppo/ に置いている。 そのうちアメダス10分値のファイルを解読して毎正時の観測値を抽出し、つぎのような CSVファイルを作成した。

また、2019年12月の月報CD-ROM に含まれていた amdmaster.index というファイルを編集して 地点表ファイル amedas_stnlist_ja_sjis.csv、 さらに編集して amedas_stnlist.csv を作成し、ex9 ディレクトリ内に置いた。 ここでは、ASCII コードのアルファベット・数字だけにした amedas_stnlist.csv をつかう。 【amedas_stnlist_ja_sjis.csv には地名の漢字表記とカタカナ表記がふくまれていて、 Linux上でのmore, less などでは文字化けする。 地名の漢字表記をみたい人は、emacs で見るか、パソコンに転送して見てほしい。】

amedas_stnlist.csv には、つぎの列をふくむ。

地点名ローマ字は、気象庁のファイルからひきついでおり、 全部大文字で、ローマ字つづりの方式は、ヘボン式、長音記号省略、 「ん」は m, b, p の前では m となっている。 【なお、[(ex6) 地図をかく (4) 気象観測地点を表示する] の 地点リストのローマ字は、頭文字だけ大文字であとは小文字にした。 そのうち、amedas_stations.csv のローマ字は (増田が手入力で追加したので) 「ん」は全部 n である。 しかし jma_stations.csv, jma_stations_sjis.csv は (気象庁のファイルによったので) m, b, p の前では m になっている。不統一になってしまったことが残念だが、 そのようなものとしてつかってほしい。】


[91a] 1地点の風の時系列グラフ作成

1つの地点の1か月のCSVファイルを読み、 そのうちの数日間の期間について、日時を横軸にとって、 4つの subplot に、それぞれ、 毎時の風向、風速、風速ベクトルの東西成分、南北成分の値の点グラフをかく。

地点の指定は、変数 stidsel に文字列としてアメダス地点番号 (5けたの数字) をあたえる。 また、変数 stname_roma には 地点名 (ローマ字) をあたえておく。 これは表示につかわれるだけだが、stidsel を変えても自動的に変わるようにしていないので、 ユーザーがあたえる必要がある。 amedas_stnlist.csv を参照して記入してほしい。

日時の指定は、 まず、変数 syrmo に、文字列として、年 (4けたの数字) と月 (2けたの数字) を つづけてあたえる。 そのうえで、表示対象期間のはじめの日時を datetimestart、おわりの日時を datetimeend の それぞれの datetime.datetime(...) の中に、 年、月、日、時、分を、それぞれ整数値であたえる。 datetimestart, datetimeend が syrmo であたえた月の範囲にないと、なにもかかれない。 例として、2015年 8月 1日 1時から 9日 0時までとした。

プログラムの最後の部分で図形表示をする。 プログラムの最初のほうで設定している savefig という論理変数が False ならば plt.show() によって X の画面に表示する。 (図の画面を消す操作をするとつぎの図をかく。 プログラムをとめたいときは端末のコマンドラインで control-C。) savefig が True のばあいは、imagefilepath で指定したディレクトリ (例文のままならば実行ディレクトリの下の image ) に png 画像ファイルをつくる。


[91b] 1地点の気温の時系列グラフ作成

1つの地点の1か月のCSVファイルを読み、 そのうちの数日間の期間について、日時を横軸にとって、 毎時の気温の値を点グラフにする。

subplot は 1つだけである。 地点と日時の指定方法は、91aと同様である。


[91c] 1地点の降水量の時系列グラフ作成

1つの地点の1か月のCSVファイルを読み、 そのうちの数日間の期間について、日時を横軸にとって、 毎時の降水量の値をグラフにする。 0 でない降水のあるときは 0 から時間降水量の値までの縦棒、 降水量が 0 のとき (無降水かどうかの判断はしていない) は 横軸上の○印とした。

subplot は 1つだけである。 地点と日時の指定方法は、91aと同様であるが、 例として設定した地点と日時は 91a とはちがう。


[91d] 1地点の日照時間の時系列グラフ作成

1つの地点の1か月のCSVファイルを読み、 そのうちの数日間の期間について、日時を横軸にとって、 毎時の日照時間の値をグラフにする。 0 でない値のあるときは 0 から日照時間の値までの縦棒、 値が 0 のとき (日照がないかどうかの判断はしていない) は 横軸上の○印とした。

subplot は 1つだけである。 地点と日時の指定方法は、例として設定した日時ともに 91aと同様である。


[92a] 1地点の風のデータから強風の日時をぬきだす

作図の課題からはなれるが、時系列的にデータがそろっているとできることの例として、 1つの地点の10年ぶんの風の時別値のCSVファイルをつづけて読み、 与えられたしきい値以上の風速が出現した日時と風速の値を書き出す。

【[2025-07-08 注] 7月1日の時点での [92a] のプログラムは、不等号に等号がはいっておらず、 「しきい値をこえる風速が出現した」ときに書き出すものになっていました。 7月8日に、等号をふくめて「しきい値以上」としたものにさしかえました。】

地点の指定は、91a と同様である。

しきい値は、thresh という変数の値として、m/s 単位の風速の値をあたえておく。

結果は「標準出力」に出るようにつくってあるので、 ファイルに書き出したいばあいは、redirection をつかって、たとえばつぎのようにする。

$ python 92a_check_windsp.py > windsp_ge10_nagano.txt

ただし、「ge10」は「10 m/s 以上」のつもりであり thresh によって変えてほしい。 「nagano」は地点名であり、stidsel, stname_roma にあわせて変えてほしい。


[92b] 1地点の降水量のデータから大雨の日時をぬきだす [2025-07-08 追加]

[92a] と同様に、 1つの地点の10年ぶんの降水量の時別値のCSVファイルをつづけて読み、 与えられたしきい値以上の値が出現した日時と時間降水量の値を書き出す。

地点の指定は、91a と同様である。

しきい値は、thresh という変数の値として、mm/h 単位の降水量の値をあたえておく。

結果は「標準出力」に出るようにつくってあるので、 ファイルに書き出したいばあいは、redirection をつかって、たとえばつぎのようにする。

$ python 92b_check_precip.py > precip_ge30_nagano.txt

ただし、「ge30」は「30 mm/h 以上」のつもりであり thresh によって変えてほしい。 「nagano」は地点名であり、stidsel, stname_roma にあわせて変えてほしい。


[93a] 風のベクトル表示

時刻ごとに地図をかいて、 指定した緯度経度範囲の内にある観測点の 風速ベクトルを観測点の位置からの矢印で表示する。

日時には、日本標準時がつかわれている。 年と月は、変数 year, month にあたえる値で指定する。 日と時は、daystart の日の hourstart の時から dayend の日の hourend の時までくりかえす。 Python の datetime での pandas での日時の表現は 0 時をふくみ、24時をふくまないが、 このプログラムでは、hourend に 24 を指定できるようにしてある。 (実行結果では翌日の0時として表示される。) なお、各月の1日の0時はその月のファイルにふくまれておらず、 前月のファイルに (前月の最後の日のあとに) ふくまれている。 プログラム例の現状では、2015年 8月 7日 0時 から 24時までとしてある。

作図対象となる経度と緯度の範囲を、lonmin, lonmax, latmin, latmax で 「度」を単位とする数値として指定する。 例として、長野県をふくむ領域をとった。

風速の大きさと図上の矢印の長さとを関係づけるパラメータとして arrowscale という変数に 50 という値をあたえてある。 これを大きくすると矢印が短く、小さくすると矢印が長くなる。

図には、国土数値情報の約1 km 格子のデータにより、 地形標高を段彩でかさねている。 標高と色との関係は、levelstopo と colorstopo というリスト変数で指定している。


[94a] 気温の数字による表示

時刻ごとに地図をかいて、 指定した緯度経度範囲の内にある観測点の位置に「+」印を置き、 その上側に気温を数字で表示する。

日時、緯度経度範囲の指定のしかたは 93a と同様。

地形標高をかさねていることも 93a と同様。


[94b] 気温の色わけした記号による表示

時刻ごとに地図をかいて、 指定した緯度経度範囲の内にある観測点の位置に「○」印を置き、 その中を、気温の値の階級わけに対応する色で塗る。 【その上側に数字で表示もしている。 これがじゃまならば、「for kstn」のループの内の「for lev」のループの内にある ax.text(...) の呼び出し (データ欠損のばあいと有効な値のばあいの2回) を消すかコメントにすればよい。】

日時、緯度経度範囲の指定のしかたは 93a, 94a と同様。

地形標高をかさねていることも 93a, 94a と同様、 ただし、contourf で「alpha = 0.4」を指定して、地形標高の色を薄くしている。 また、地形の標高と色の対応をしめすカラーバーを省略した。

気温の値の階級の境となる値を levelsval、階級に対応する色を colorsval というリスト変数で指定している。 (夏にありそうな値できめているので、冬には levelsval の変更が必要だろう。)

なお、階級わけの色の凡例をかく位置を、図の緯度経度で指定しているので、 lonmax をかえたときは lonleg もそれにあわせてかえる必要がある。


[94c] 気温の (機械的に生成した) 等値線による表示

数量の空間分布を、等値線 (気温のばあいは等温線ともいう) で表示したいことがある。 観測点での値から計算で等値線をかく方法としては、 観測点を頂点とする三角形網をつくって内挿する方法もあるが、 長方形の格子に内挿するほうがふつうである。 ここでは、経度・緯度を (球面であることは意識せず) 直交直線座標の x, y とみなして、 scipy パッケージの interpolate 関数を、 linear というオプションでつかって、観測点から格子点へ、緯度・経度の1次関数で内挿し、 それで得られた格子点値をつかって、matplotlib の contour で等値線をひく。

日時、緯度経度範囲の指定のしかたは 93a, 94a と同様。

地形標高をかさねていることも 93a, 94a と同様。 (alpha の値は 1.0 としてあり、alpha を指定しないばあいと同様である。)

格子点の設定は、「### 等値線のための格子を準備する」のコメントに続く部分でしている。 現状では、格子の緯度経度範囲は図の緯度経度範囲と同じ、 格子間隔は緯度・経度とも0.1度である。

機械的に計算された等値線は、ときには非現実的なことがある。 とくに、観測点でかこまれた凸多角形の外にあたるところでは、数値があばれることがある。

また、地上気温には地形標高の影響がある。色でかさねた地形情報や、 stnlist.csv にある地点の標高値を参照しながら見てほしい。


[95a] 降水量の数字による表示

時刻ごとに地図をかいて、 指定した緯度経度範囲の内にある観測点の位置に「+」印を置き、 その上側に1時間降水量を数字で表示する。

数字の色をつぎのように区別した。

日時、緯度経度範囲の指定のしかたは 93a, 94a と同様。 ただし、例として設定した日時は変えた。

地形標高をかさねていることも 93a, 94a と同様。


[96a] 日照時間の数字による表示

時刻ごとに地図をかいて、 指定した緯度経度範囲の内にある観測点の位置に「+」印を置き、 その上側に1時間のうちの日照時間を数字で表示する。

数字の色をつぎのように区別した。

日時、緯度経度範囲の指定のしかたは 93a などと同じ。 例として設定した日時も 93aと同じ。

地形標高をかさねていることも 93a などと同様。


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