2009年以前のアメダス時別値の地図上表示

このページは、2025年度のセミナーにはまにあわなかったのですが、 [B, F, G 合同セミナー (増田担当分ページ)][第9課 アメダス時別値の風、気温、降水量、日照時間の地図上表示] から派生した内容なので、 ひとまず「B, F, G 合同セミナー」のページに置き、 [計算機を利用した気象分野の実習の教材 (2025年度-)]からもリンクするようにします。


これまで

2010-2019年の時別値・日別値

気象庁の気象官署等およびアメダスの地上観測データは、 2010-2019年の10年間については、 「気象観測月報」という CD-ROM に収録されている。 そのうち1時間間隔の観測値を抽出して、地点別・月別の csv 形式にし、 増田の研究室マシン niigata と hamana では /raid/jma_kansoku_geppo/ の下の windhourly など (windの部分が気象要素略称) と名づけたディレクトリに置いた。

そのデータをつかって、 1地点の時系列をグラフにするプログラム例と、 多地点の時刻ごとの空間分布を地図上に表示するプログラム例を、 (ex9) [アメダス時別値の風、気温、降水量、日照時間の地図上表示] のページで紹介した。 なお、そのページ中の補足として、日別値 (1日ごとの値) をあつかうプログラム例もしめした。

気象庁からダウンロードした時別値 (2020年以後はこれが必要)

2020年以後の観測データは、CD-ROM や DVD-ROM の形になっておらず、 気象庁ウェブサイトの「過去の地点気象データ ダウンロード」のサイトから ダウンロードする必要がある。 その時別値を、同様に、時系列グラフや、地図表示にするプログラム例を、 (ex9d) [気象庁からダウンロードしたCSVファイルによるアメダス時別値の気象要素の図示] のページで紹介した。

なお、気象庁のアメダスでは、2021年から (開始日付は地点によってことなる)、 湿度の観測がはじまっている。 これを作図するプログラム例を、 (ex9dhum) [気象庁からダウンロードしたCSVファイルによるアメダス時別値の気象要素の図示 (2) 湿度をふくむデータ] のページで紹介した。


今回紹介するデータ: アメダスの1976-2009年の時別値

気象庁のアメダスの観測値は、 1976-2004年のものが「過去の気象データ (アメダス統計値)」 (以下「アメダス統計値」とよぶ)、 2004-2010年のものが「アメダス年報」という CD-ROM または DVD-ROM に収録されている。

ここでは、1976-2003年の時別値を「アメダス統計値」、 2004-2009年の時別値を「アメダス年報」から抽出して、 地点別・月別の csv 形式にし、 増田の研究室マシン niigata と hamana の /raid/jma_amedas_nenpo/ の下の windhourly など (windの部分が気象要素略称) と名づけたディレクトリに置いた。 (便宜上「アメダス統計値」CD-ROM 由来のものもここに置いている。)

これを、なるべく ex9 と同じ仕様のプログラムで作図できるようにした。

ただし、データの仕様につぎのようなちがいがある。

また、増田による現段階の前処理にはつぎのような欠点があり、改良予定である。 いま研究室マシンに置かれているものは暫定版と思ってほしい。


実行方法

Pythonプログラムの例文は、niigata の /home/masudako/ex/ex9a に置いてある。 (区別のため AMeDAS の a をつけた。)

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

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

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

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


データ

気象庁 アメダス統計値 と アメダス年報 CD-ROM (または DVD-ROM) から、 時別値を抽出し、つぎのような CSVファイルを作成した。

また、2009年のアメダス年報 DVD-ROM の amedas/hourly/200912 ディレクトリにあった idx200912.csv というファイルを編集して 日本語 (Shift_JIS コードの漢字と「半角」カタカナ) をふくむ地点表ファイル idx200912_sjis.csv と、 ASCII コードのアルファベット・数字の項目だけにした idx200912_ascii.csv をつくった。 【idx200912_sjis.csv には地名の漢字表記とカタカナ表記がふくまれていて、 Linux上でのmore, less などでは文字化けする。 地名の漢字表記をみたい人は、emacs で見るか、パソコンに転送して見てほしい。】

idx200912_ascii.csv には、つぎの列をふくむ。 (列の表題はついておらず、つぎに書く列名は読むプログラムであたえているものである)

地点名ローマ字は、気象庁のファイルからひきついでおり、 全部大文字で、ローマ字つづりの方式は、ヘボン式、長音記号省略、 「ん」は m, b, p の前では m となっている。


[9a1a] 1地点の風の時系列グラフ作成

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

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

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

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


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

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

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


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

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

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


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

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

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


[9a1f] 1地点の積雪深の時系列グラフ作成

ex9 では 9a1e として降雪深のグラフを示したが、 今回紹介するデータには降雪深がふくまれていないので、 積雪深のグラフ作成のプログラムを紹介する。

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

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


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

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

地点の指定は、9a1a と同様である。

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

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

$ python 9a2a_check_windsp.py > windsp_ge10_nagano.txt

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

2010年以後のデータとあわせてつかう際には、風速の名目精度がちがうことに注意。


[9a2b] 1地点の降水量のデータから大雨の日時をぬきだす

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

地点の指定は、9a1a と同様である。

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

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

$ python 9a2b_check_precip.py > precip_ge30_nagano.txt

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


[9a3a] 風のベクトル表示

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

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

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

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

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


[9a4a] 気温の数字による表示

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

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

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


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

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

日時、緯度経度範囲の指定のしかたは 9a3a, 9a4a と同様。

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

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

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


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

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

日時、緯度経度範囲の指定のしかたは 9a3a, 9a4a と同様。

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

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

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

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


[9a5a] 降水量の数字による表示

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

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

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

地形標高をかさねていることも 9a3a, 9a4a と同様。


[9a6a] 日照時間の数字による表示

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

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

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

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


[9a8a] 積雪深の数字による表示

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

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

日時、緯度経度範囲の指定のしかたは 9a3a, 9a4a などと同様。 ただし、例として設定した日時は変えた。

地形標高をかさねていることも 9a3a, 9a4a などと同様。


[daily_map] 日別値の地図上への作図 (予告)

この対象期間の日別値の前処理はまだできていない。 それができたらそれを作図するプログラム例を追加したい。


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