気象観測データに1年周期のサインカーブをあてはめる (Python による試作)

[2021-04-30] 4月29日にここに置いたプログラムと結果の図にはまちがいがありました。 4月30日に改訂しました。

板倉用教材の[海陸分布がもたらす気候の特徴]の中で、 「気温の年変化の振幅と位相」をあつかった。 緯度などの条件が同じならば、海の影響をうけるほど、気温の年変化の振幅は小さくなり、 年変化の位相は遅いほうにずれるだろう。

わたしは、1998年ごろに、日本をふくむ世界の多数の地点の毎日の気温の観測値に、 1年周期のサインカーブ (正弦波) をあてはめて、振幅や位相の分布をみた。 結果を研究論文にするところまでいかなかったが、 その下書きのようなものを[気温の年周期の振幅と位相 -- 両半球中高緯度、地上気温の日データによる]のページに 置いている。

そのときは、最小2乗法によるあてはめを、Fortranでプログラムを書いて実行した。 図は GMT (Generic Mapping Tools)というソフトウェアでかいた。

その計算の手順を基本的に変えないで、2020年12月に R でかきなおして 板倉用教材の[気象観測データに1年周期のサインカーブをあてはめる (Rによる暫定版)]で紹介した。 さらに、2021年 4月に Python でかきなおしてみた。 配列変数の添え字(index)が、Fortran と R では 1 からはじまるが、Python では 0 からはじまる。 書きかえには、そのちがいを考慮する必要がある。 (わたしの4月29日の段階でのプログラムはその関連のまちがいをふくんでおり、4月30日に訂正した。)

対象となるデータについても、もっと汎用化することがのぞましいが、 いまの段階では、 板倉用教材の[気象庁の観測データを使う (1)]で例としてつかった アメダス 館林 の 2018年12月から2020年11月までの毎日の日平均気温をそのまま使い、 [気象観測データのグラフ作成と基本的な統計処理 (Python による試作)]に つづくように構成することにする。

Python によるプログラム例

Python 版のプログラムをつくるにあたって、(1/kfmax)年周期成分までをあてはめるように書いた。 しかし、動作確認は、kfmax が 1 のばあいについてしただけである。

このプログラムを実行してつくった図

sinfit_temp_tatebayashi.png

この例では、気温の平均値は 15.8 ℃、1年周期の振幅は 11.2 ℃、 位相は1周を1として0.577、 それを1年周期成分が最大となる日付になおすと 1月1日を1として211日、つまり7月30日となった。 1年周期成分の分散は、日ごとの観測値の集まりがもつ分散の 88.9 % をしめている。

(毎日の値を見ると、実際の気温の極大は7月30日よりだいぶあとに出ている。 数値をみると、最大値は2020年8月11日の32.4℃だ。 この2年間、7月はまだ梅雨の状態で気温があまりあがらず、8月になってから暑い日が多くなったのだ。 天候には年々変動があって、この特徴はかならずしも常にみられるものではないが、 1年周期のサインカーブからのこのようなずれかたは、ありがちなことだ。)

何を計算したかの説明

最小2乗法

最小2乗法の考えかたは、つぎのようなものである(と、わたしは理解している)。

ここでの最小2乗法の利用

結果としてしめした数値

グラフにしめしたもの


2021-04-29, 2021-04-30
増田 耕一 (MASUDA Kooiti)
[気象観測データのグラフ作成と基本的な統計処理 (Python による試作)] [計算機を利用した気象分野の実習の教材]
立正大学用 [卒論指導のページ] [3年生セミナーのページ]