続・Python による気象解析入門 (補遺)

気象庁アメダスの観測データ (時別値) を地図表示する


[アメダス時別値の風、気温、降水量、日照時間の地図上表示] では、 気象庁「気象観測月報」CD-ROM から増田が抽出しCSV形式にしたアメダス時別値をあつかった。 ここでは気象庁ウェブサイトからダウンロードしたデータで、 各地点の気温などの気象要素を表示してみる。


観測データ (csv ファイル) のダウンロード

2024年8月22-23日に、 気象庁ウェブサイトの「各種データ・資料」の 「過去の気象データ・ダウンロード」のページで、つぎのように指定して、csv ファイルをダウンロードした。 (長野での実習の背景データを想定したので、新潟、長野、山梨、群馬、埼玉、東京の都県である。)

このようにして得られた (いまのところ 6 都県それぞれの) csvファイルを、 niigata では /home/masudako/ex/amedas2024data/ の下に置いた。一例をここにつける。

見出し行の数が、なぜか日別値のばあいとちがい、 最初の日時の観測値は 7行め (Python 流のかぞえかたでは第6行) にある。

各地点ごと、各気象要素ごとに、「品質情報」と「均質番号」の列がある。 また、気象官署等の降水量には、「現象なし情報」の列もある。 したがって、1地点あたり、気象官署等のばあいは 7列、一般のアメダス地点のばあいは 6列をつかっている。


観測地点表

日別値のためにつくったものをそのままつかう。説明は[日別値のページ]を見てほしい。


プログラム例の実行のしかた

niigata では、アメダスの日別値のプログラム例と同じディレクトリに追加した。 したがって、つぎの準備てつづきは、日別値のばあいと同様である。

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

そして「cd mapamedas2024」のあと、つぎのプログラムをそれぞれ実行できる。

地点表は mapamedas2024 ディレクトリにふくめてある。 観測データの csv ファイルは、/home/masudako/ex/amedas2024data/ に置かれたものを読む。 (niigata のほかの計算機で実行するときには、観測データのファイルもコピーする必要がある。)


観測地点での観測値を地図上に表示する

現状では、8月 18日 1時 から 8月 22日 0時 までの気温を 1時間ごとに地図上に作図し、png ファイルで書きだすようになっている。

利用の際に変更すること

気象要素を変えるには jvar にあたえる値を変えればよい。 (0:気温、1:降水量)。

対象となる日時を変えるには、krecstart, krecend にあたえる値を変えればよい。 (ここにあたえる値は、2024年 8月 18日 1時 (JST) を 0 とした とおしの時間数で、 (いまあるデータファイルでは) 可能な値の最大は 95 である。 datetime をつかえばもっとわかりやすくできるが、ためしにつくったままになっている。)

表示する地図の範囲を変えるには、 lonmin, lonmax, latmin, latmax にあたえる値を変える。 それとともに、対象となる地点がふくまれる都道府県も変わるので、 regionlist の内容も変える (コメント行で列挙されているものからえらぶ)。

niigata 以外の計算機で実行するばあいは、 datapath (csvファイルが置かれたところ), imagefilepath (結果の画像ファイルが置かれるところ), shapefilepath (県境の地理データが置かれたところ) を、それぞれの計算機の事情にあわせて修正する。 地点リストファイル amedas_stn_m20230804.csv が Python プログラムとは別のディレクトリに置かれている ばあいは、それを読む pd.read_csv( ) の中のそのファイル名にパス指定を追加する。

おぼえがき

複数の csv ファイルをつないで処理する手順は、日別値のばあいと同じである。[ドキュメント改訂予定]

気象庁の csv ファイルの「日付リテラル」は、 たとえば「2024/8/18 1:00:00」のような形になっている。 Python で想定している標準的な形は「2024-08-18 01:00:00」のような形である。 Python の datetime パッケージの strptime 関数で、 年月日は、変換書式 '%Y/%m/%d' を指定すると、そのまま読みとれる。 ところが、時分秒は、'%H:%M:%S' を指定すればよさそうなのだが、「時」が 1けただと、エラーになってしまう。 この例ならば「1:」のまえに「0」をおぎなってから strptime にあたえる必要がある。


観測地点での観測値と、それを空間内挿してつくった等値線を地図上に表示する

アメダスの観測値 (の気温) を、そのまま数字で表示するのとかさねて、 scipy.interpolate によって緯度経度の格子点に線形内挿し、 matplotlib の contour によって等値線をひくプログラムをつくった。

利用の際に変更すること

気象要素の指定は map_amedas_hourly.py と同様である。 ただし、等値線レベルをあたえる配列 levels0 と levels1 の内容は、 日照時間のためのものだけ用意しており、他の気象要素については追加する必要がある。

表示する地図の範囲の指定も map_amedas_hourly.py と同様だが、 さらに、(地図の範囲とは別に) 格子点データを作成する範囲 lonming, lonmaxg, latming, latmaxg も変える必要がある。

おぼえがき

観測点でかこまれていない領域について機械的にひかせた等値線は不適切である可能性が高いが、 ここでは scipy.interpolate が計算した格子点値をそのままつかって機械的に等値線をひいていることに 注意してほしい。

(これは空間データ処理技術ではなく対象に関することであり、時別値だけでなく日別値でもおこることだが、) 地上気温は地表面の標高に大きくよる。 山地があるばあい、まばらに分布する観測点の気温から空間内挿した気温の等値線は、 気温の水平分布を代表したものとはいいがたい。 たとえば、現在のプログラム例をそのまま実行した結果をみると、 富士山を中心とする低温域があるように見えるが、そのひろがりはかならずしも現実的ではない。 対策としては、標高が たとえば 1000 m 以上の地点を空間内挿からはずすことが考えられる。 それには、xp.append(), yp.append(), zp.append() を実行する条件が 「if qval[kstnobs] >= 5:」となっているのを 「if (qval[kstnobs] >= 5) and (dfstn.height[kstnlist] < 1000):」 と変えればよい。


1地点の観測値の時系列をグラフにする

アメダスの 1地点の 気温と降水量の日別値の時系列をグラフにするプログラムをつくった。 上に気温、下に降水量をしめす。 ただし、品質情報のチェックがまだできていないので、version 1 としておく。

期間については、まず syrmo にあたえる文字列 (現状では '20240818_0821') を、 データファイルにあわせて変更する。 図の横軸を説明する ax.set_xtitle にあたえる文字列もあわせて変更する。 横軸の尺度はデータファイルにふくまれる期間がおさまるように設定される。

地点名は、stnamesel にあたえる文字列として、ローマ字 (最初の文字だけ大文字) で指定する。 それにあわせて、region に、都府県名 (北海道は振興局名にする予定) をローマ字 (全部小文字) で指定する。


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