定性的な時系列データを作図する: 天気図型を例に

気候の分野では、定量的なデータをあつかうことが多いが、 何かの「有無」や「種類」のような定性的(質的)なデータをあつかうこともある。 ただし、ここでは、値は定性的だが、時系列になっていて、 時間軸のほうは定量的にあつかえるばあいにかぎってみる。 このようなデータがあらわす現象をつかむために、データをグラフ化するのがよい。 わたしは、Cleveland の 『Elements of Graphing Data[読書ノート]などの影響をうけて、 dot plot という表現方法がよいと思っている。 時間軸上に、注目している種類のものごとが「ある」ことを「点」であらわし、 点の分布範囲、粗密、(もしあれば)粗密の周期性などをよみとるのだ。 「点」といっても、実際は、大きさのある図形、たとえば、○ (まる) や × などをつかう。 ただし、○どうしが部分的にかさなっているときそれを認識できるように、 ○は内側をぬりつぶさず、円周だけにしておいたほうがよい。

わたしはまえからこの方法をつかっているはずなのだが、 残念ながら、手本としてしめせるような図をつくっていなかった。 Python による作図をはじめた機会に、つくりはじめている。 まだ、意図したところまでいっていないが、到達したところまでをここにしめしておく。 ここにしめした例文は、将来、別のものにさしかえてしまうかもしれない。


題材: 総観規模の大気場のパターン (いわゆる「天気図型」)

題材としてとりあげるのは、 日本付近の毎日の天気図を、「冬型」「夏型」などに分類した情報だ。

わたしは、この分類を、「天気図型」と言ってしまうことがある。 しかし、天気図という 人が (あるいは機械が) かいた図形 を分類したいのではない。 等圧線 (海面更正気圧という量の等値線) を主とする地上天気図という表現方法のたすけをかりて、 水平スケール数千 km、気象学用語でいう「総観規模」の大気の状態を分類したいのだ。 むしろ「天気型」なのかもしれないが、わたしは「天気型」という表現は、 各地点で観測された「晴れ」「くもり」「雨」などの「天気」の分類をさすのにつかいたい。 ここでは便宜上、「総観規模の大気場のパターンの分類」と書いたり、 かっこつきで「天気図型」と書いたりする。英語ならば synoptic weather pattern とする。 「総観」は synoptic の訳語なのだ。 【(用語補足) [総観規模 (synoptic scale)]

地上天気図は次のようなところで見ることができる。

わたしは昨年(2020年) 5月ごろ、1995年の1年間の毎日について、 『気象年鑑 1996』の天気図にもとづいた分類をおこなった。 それ自体が目的ではなくて、 気象観測値を数値予報モデルにとりこむ「データ同化」という技法の評価をする研究で、 同化がうまくいくかどうかが、総観規模の大気場のパターンによってちがってくると 予想されたので、そのパターンの情報が必要になったのだ。 作業記録は [このページ] にある。

分類としては 【ブログ記事 [日本の季節と天気パタン] あるいは『大気と水の循環[読書メモ]の本の第6章に書いたような考えをもとに】 つぎのものをたてて、分類基準は明確にきめず、主観的に分類した。 全部の日を分類しなければいけないとは考えず、決めにくいものは「X」としておくことにした。 (実は、当初は「H」を考えておらず、「X」のうちわけをみなおして、分類を追加した。)

毎日の天気図型を、CSVファイル tenkizu_pattern1995.csv (日本語文字なし) にした。 (研究発表の期限にせまられていそいでやったものなので、標準となるデータとはみなさないでほしい。)

このCSVファイルの第1, 2, 3列には、年, 月, 日が数字で入れてある。 第4列には、この年の1月1日を1とした通しの日付が入れてある。 (年月日から計算できるので、情報量の観点からは冗長なのだが、 いろいろなソフトウェアで時間軸上にならべたかったので、わざとこうした。) 第5列に、天気図型が、ASCIIコードのアルファベット大文字で入れてある。


作図プログラム例 1

CSVファイルをすなおに Pandas の read_csv で データフレーム df に読みこみ、 plot で 年の通しの日付を横軸、天気図型を縦軸にとったグラフをかくよう指示してみた。

(年の通しの日付は、英語で「day of year」と表現するので、列名を doy とした。 なお、これを「Julian day」「ユリウス日」という人がいるようだが、 わたしは、ユリウス日は、西暦紀元前 4713年に原点をおくものにかぎりたい。)

天気図型をならべる順序は指定しなかったのだが、plot がかってにきめてくれた。 アルファベット順や文字コード順ではない。 どうやら、データに最初に出現した順序が早いものほど下になったらしい。 結果として、 冬に多い型が下に、夏に多い型が上に表示されて、わりあいわかりやすくなったと思う。 (「その他」のつもりの X がいちばん下にこないのはちょっと残念だが。)

作図プログラム例 2

例1 と基本的に同じなのだが、Python の datetime パッケージの date 関数をつかって、 年月日から (datetimeパッケージでいう) 日付を計算し、それを横軸にとってみた。

作図プログラム例 3

例1 と 同様なのだが、対象とする期間を、6~9月にしぼってみた。 そのために、df のうちから month の列の値による条件で 行をぬきだし、 もうひとつのデータフレーム dfsub をつくって、それを作図した。

作図プログラム例 4 (うまくない図)

例3 で 期間をしぼるのと同時に、対象とする天気図型を1つにしぼってみた。 1本だけの横線上に dot がならぶ図になる。 ただし図の枠は縦にのびたままなので、図の画面のむだが多い。

作図プログラム例 5 (うまくない図)

Python の matplotlib には subplot という機能があって、画面を分割することができる。 画面を縦に6分割して、6~9月に出現する 6つの天気図型をそれぞれぬきだし、 ならべて作図してみた。 なお、分割した図のあいだに あき をつくるために、subplots_adjust という関数をよびだしている。 そのパラメータの hspace で、上下方向にどれだけあけるかを指定する。 もし横に分割して左右方向のあきを指定するならば、wspace をつかう。 (h と w は height と width からきているらしい。ここでは vertical と horizontal ではない。) 画面のわりつけは期待どおりできたが、 横軸の範囲が、部分集合ごとのデータ範囲できめられてしまったのが、見やすくない。

作図プログラム例 6

例5 と同じ情報だが、matplotlib の xlim という関数をつかって、 横軸の範囲を、6月から9月までの日付に統一した。 (かなりまわりくどいことをやっている。Python に慣れればもっと単純にできそうだ。)

例6の plt.show() のところを PNG 画像ファイルに書き出すように書きかえて得られた 画像を、この下にしめす。

plot6.png

作図プログラム例 7

例6 と同じ情報だが、横軸を日付 (mm-dd) にした。 これには、matplotlib.pyplot.subplots() をつかい、 図を fig と axes (複数のaxis) で構成したうえで、 matplotlib.dates.DateFormatter() をつかっている。 例6 までとはだいぶちがった関数をよびだすプログラムになった。

プログラムの終わりの部分の「#画面表示」と書いた行を生かすと画面に、 「#画像ファイル」と書いた行を生かすとつぎのような画像ファイルをつくるようにした。

plot7.png


2021-05-29, 2021-05-30, 2021-06-18
増田 耕一 (MASUDA Kooiti)
[計算機を利用した気象分野の実習の教材]
立正大学用 [卒論指導のページ] [3年生セミナーのページ]