観測点で得られた観測値を地図上の観測点の位置に表示する。
気象庁の「気象観測月報」という CD-ROM の形で 2010年から2019年までの全国の観測値を取り寄せた。 (このシリーズの CD-ROM がつくられたのはこの10年ぶんだけである。) これにはアメダスの10分値が含まれている。 今回の授業では、そこから 1時間ごと (毎正時) の風と気温を抽出したものをつかう。 【[2024-07-23 補足] 降水量、日照時間もつかえるようにした。】
【[(ex7) 地図上に観測地点を表示する]の回や、 [昨年度の教材] では、 気象庁ウェブサイトの「過去の地点気象データ ダウンロード」のサイトからダウンロードした CSVファイルを加工しないで作図するプログラム例を用意した。 しかし、ダウンロードサイトがつくるファイルの構成 (列の順序) が変わったところがあり、 昨年度のプログラムをつかうならば修正が必要である。
今回は、同じ気象庁の観測データだが、 オフライン (CD-ROM) でとりよせたもの (データ形式はバイナリデータ) を 増田が解読して CSV ファイルにした。 (そのCSVファイルの構成はダウンロードサイトのものとはちがう。)】
例文のプログラムで、2010-2019年のどの時期でもあつかうことができる。 ただし、月をまたがることはできない。 また、毎月1日 (日本標準時) 0時の観測値は、前月のファイルに収録されている。 地域も、日本全国あつかうことができる。
具体例としては、今年度の「セミナーの基礎」で観測する予定の地域で、 ドップラーライダー観測がおこなわれ、その結果が 高咲ほか (2017) の論文になっている 2015年 8月 1-8日をとりあげる。
[2024-07-23 補足] この日時の中部地方はほとんど降水がなかったので、 降水量の表示の例として設定した日時は、これとは別のものにした。
Pythonプログラムの例文は、niigata の /home/masudako/ex/exa に置いてある。 (16進数の表記で 0123456789 につづいて abcdef とすることがあるのにあわせた。)
各自、つぎのコマンドによって、プログラム例をコピーしてほしい (最後の空白のあとのピリオドが重要)。
cp -r /home/masudako/ex/exa .
そして、exa に cd して作業してほしい。
今回つかうアメダス観測値のデータは、/diskb/jma_kansoku_geppo/ の下の windhourly と tmphourly [2024-07-23 追加 preciphourly, sundurhourly] というディレクトリに 置いてあるものを読むので、自分のところにコピーする必要はない。 (もし、別のところに置かれたデータを読むばあいは、 プログラムのなかの datapath という変数にあたえる文字列を変更する。)
つぎのようにして、1つずつコピーしてほしい。
cd exa cp /home/masudako/ex/exa/a1c*.py . cp /home/masudako/ex/exa/a1d*.py . cp /home/masudako/ex/exa/a5a*.py . cp /home/masudako/ex/exa/a6a*.py .
気象庁 気象観測月報 CD-ROM の内容を、 niigata の /diskb/jma_kansoku_geppo/ に置いている。 そのうちアメダス10分値のファイルを解読して、つぎのような CSVファイルを作成した。
また、2018年1月の月報CD-ROM に含まれていた amdmaster.index というファイルを編集して 地点表ファイル amedas_stn.csv を作成し、exa ディレクトリ内に置いた。
【同様なファイルは毎月の月報にふくまれており、 2018年1月のものをとりあげたのは偶然だが、実習の目的にはそれでよいと判断した。 [ここから 2024-08-05 補足] 2018年1月以外の時期に観測されていた気象要素があっても抽出しそこなっている可能性はある。 その見落としをふせぐには、なるべく新しい amdmaster.index をつかい、 そこにふくまれた過去の履歴の情報も見るべきである。 [日別値の作図の教材ページ] では、2019年12月の月報CD-ROM の情報を採用した。 しかし、履歴を見て抽出する地点を変えるプログラムは複雑になり、 (増田は) まだ作成できていない。】
【このファイルには地名の漢字表記とカタカナ表記がふくまれていて、 Linux上では、emacs で見ることはできるが、more などでは文字化けする。】
上記の amedas_stn.csv から、 アメダス地点番号、地点名 (ローマ字)、緯度、経度、標高 をぬきだしたファイル stnlist.csv を作成し、同じディレクトリに置いた。 緯度・経度は「度」とその小数に換算した。
この地点名ローマ字は、気象庁のファイルからひきついでおり、 全部大文字で、ローマ字つづりの方式は、ヘボン式、長音記号省略、 「ん」は m, b, p の前では m となっている。 【[[(ex7) 地図上に観測地点を表示する]] の 地点リストのローマ字は、頭文字だけ大文字であとは小文字にした。 そのうち、amedas_stations.csv のローマ字は (増田が手入力で追加したので) 「ん」は全部 n である。 しかし jma_stations.csv, jma_stations_sjis.csv は (気象庁のファイルによったので) m, b, p の前では m になっている。不統一になってしまったことが残念だが、 そのようなものとしてつかってほしい。】
1つの地点の1か月のCSVファイルを読み、 そのうちの数日間の期間について、日時を横軸にとって、 毎時の風向、風速、風速ベクトルの東西成分と南北成分の値を点グラフにする。
地点の指定は、変数 stidsel に文字列としてアメダス地点番号 (5けたの数字) をあたえる。 また、変数 stname_roma には 地点名 (ローマ字) をあたえておく。 これは表示につかわれるだけだが、stidsel を変えても自動的に変わるようにしていないので、 ユーザーがあたえる必要がある。 stnlist.csv を参照して記入してほしい。
日時の指定は、 まず、変数 syrmo に、文字列として、年 (4けたの数字) と月 (2けたの数字) を つづけてあたえる。 そのうえで、左端の日時を xlim0、右端の日時を xlim1、 それぞれの datetime.datetime(...) の中に、 年、月、日、時、分を、それぞれ整数値であたえる。 xlim0, xlim1 が syrmo であたえた月の範囲にないと、なにもかかれない。 例として、2015年 8月 1日 1時から 9日 0時までとした。
1つの地点の1か月のCSVファイルを読み、 そのうちの数日間の期間について、日時を横軸にとって、 毎時の気温の値を点グラフにする。
subplot は 1つだけである。 地点と日時の指定方法は、a1aと同様である。
1つの地点の1か月のCSVファイルを読み、 そのうちの数日間の期間について、日時を横軸にとって、 毎時の降水量の値をグラフにする。 0 でない降水のあるときは 0 から時間降水量の値までの縦棒、 降水量が 0 のとき (無降水かどうかの判断はしていない) は 横軸上の○印とした。
subplot は 1つだけである。 地点と日時の指定方法は、a1aと同様であるが、 例として設定した日時は a1a とはちがう。
1つの地点の1か月のCSVファイルを読み、 そのうちの数日間の期間について、日時を横軸にとって、 毎時の日照時間の値をグラフにする。 0 でない値のあるときは 0 から日照時間の値までの縦棒、 値が 0 のとき (日照がないかどうかの判断はしていない) は 横軸上の○印とした。
subplot は 1つだけである。 地点と日時の指定方法は、例として設定した日時ともに a1aと同様である。
作図の課題からはなれるが、時系列的にデータがそろっているとできることの例として、 1つの地点の10年ぶんの風の時別値のCSVファイルをつづけて読み、 与えられたしきい値以上の風速が出現した日時と風速の値を書き出す。
地点の指定は、a1a と同様である。
しきい値は、thresh という変数の値として、m/s 単位の風速の値をあたえておく。
結果は「標準出力」に出るようにつくってあるので、 ファイルに書き出したいばあいは、redirection をつかって、たとえばつぎのようにする。
$ python a2a_check_windsp.py > windsp_ge10_nagano.txt
ただし、「ge10」は「10 m/s 以上」のつもりであり thresh によって変えてほしい。 「nagano」は地点名であり、stidsel, stname_roma にあわせて変えてほしい。
時刻ごとに地図をかいて、 指定した緯度経度範囲の内にある観測点の 風速ベクトルを観測点の位置からの矢印で表示する。
日時には、日本標準時がつかわれている。 年と月は、変数 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 というリスト変数で指定している。 【これが不要のばあいは、「# 標高の等値線をひく」というコメントのあと、 「### 観測点と観測値を表示する」というコメントの前までの実行文を コメントにするか消せばよい。 「# 標高データを読む」から 「# 風速データを読む」の前までも 不要になるので、これもコメントにするか消すのがよい。】
プログラムの最後の部分で plt.show() によって図を X の画面に表示している。 (図の画面を消す操作をするとつぎの図をかく。 プログラムをとめたいときは端末のコマンドラインで control-C。) コメントにしてある plt.savefig(...) をふくむ複数の行を有効にすると、 そのうちの imagefilepath で指定したディレクトリ (例文のままならば実行ディレクトリの下の image ) に画像ファイルをつくる。
時刻ごとに地図をかいて、 指定した緯度経度範囲の内にある観測点の位置に「+」印を置き、 その上側に気温を数字で表示する。
日時、緯度経度範囲の指定のしかたは a3a と同様。
地形標高をかさねていることも a3a と同様。
時刻ごとに地図をかいて、 指定した緯度経度範囲の内にある観測点の位置に「○」印を置き、 その中を、気温の値の階級わけに対応する色で塗る。 【その上側に数字で表示もしている。 これがじゃまならば、「for kstn」のループの内の「for lev」のループの内にある ax.text(...) の呼び出し (データ欠損のばあいと有効な値のばあいの2回) を消すかコメントにすればよい。】
日時、緯度経度範囲の指定のしかたは a3a, a4a と同様。
地形標高をかさねていることも a3a, a4a と同様、 ただし、contourf で「alpha = 0.4」を指定して、地形標高の色を薄くしている。 また、地形の標高と色の対応をしめすカラーバーを省略した。
気温の値の階級の境となる値を levelsval、階級に対応する色を colorsval というリスト変数で指定している。 (夏にありそうな値できめているので、冬には levelsval の変更が必要だろう。)
なお、階級わけの色の凡例をかく位置を、図の緯度経度で指定しているので、 lonmax をかえたときは lonleg もそれにあわせてかえる必要がある。
数量の空間分布を、等値線 (気温のばあいは等温線ともいう) で表示したいことがある。 観測点での値から計算で等値線をかく方法としては、 観測点を頂点とする三角形網をつくって内挿する方法もあるが、 長方形の格子に内挿するほうがふつうである。 ここでは、経度・緯度を (球面であることは意識せず) 直交直線座標の x, y とみなして、 scipy パッケージの interpolate 関数を、 linear というオプションでつかって、観測点から格子点へ、緯度・経度の1次関数で内挿し、 それで得られた格子点値をつかって、matplotlib の contour で等値線をひく。
日時、緯度経度範囲の指定のしかたは a3a, a4a と同様。
地形標高をかさねていることも a3a, a4a と同様。 (alpha の値は 1.0 としてあり、alpha を指定しないばあいと同様である。)
格子点の設定は、「### 等値線のための格子を準備する」のコメントに続く部分でしている。 現状では、格子の緯度経度範囲は図の緯度経度範囲と同じ、 格子間隔は緯度・経度とも0.1度である。
機械的に計算された等値線は、ときには非現実的なことがある。 とくに、観測点でかこまれた凸多角形の外にあたるところでは、数値があばれることがある。
また、地上気温には地形標高の影響がある。色でかさねた地形情報や、 stnlist.csv にある地点の標高値を参照しながら見てほしい。
時刻ごとに地図をかいて、 指定した緯度経度範囲の内にある観測点の位置に「+」印を置き、 その上側に1時間降水量を数字で表示する。
数字の色をつぎのように区別した。
日時、緯度経度範囲の指定のしかたは a3a, a4a と同様。 ただし、例として設定した日時は変えた。
地形標高をかさねていることも a3a, a4a と同様。
時刻ごとに地図をかいて、 指定した緯度経度範囲の内にある観測点の位置に「+」印を置き、 その上側に1時間のうちの日照時間を数字で表示する。
数字の色をつぎのように区別した。
日時、緯度経度範囲の指定のしかたは a3a などと同じ。 例として設定した日時も a3aと同じ。
地形標高をかさねていることも a3a などと同様。