今年の夏休みはどこに行かないで家で静かにしていようという方も多いそうです。とは言え、家に居ても暑さ対策が必要です。地球温暖化と言われていますが、本当に暑くなっているのでしょうか。実際に過去10年の最高気温の情報を調べて、30度超の日数が増えているのか集計してみようと思います。

過去の気象情報はダウンロードできる

当然ですが、私が個人的に過去10年間の気温を記録していた訳もありません。過去の気象情報は、気象庁のWebサイトからダウンロードすることができます。気象庁のこの取り組みは素晴らしいものです。過去何十年もの気象情報(天気、最高気温、最低気温、平均気温、降水量、日射時間など)を選んでダウンロードすることができます。

気象庁 > 各種データ・資料 > 過去の気象データ・ダウンロード [URL] https://www.data.jma.go.jp/gmd/risk/obsdl/index.php

今回は、過去10年の最高気温を調べます。ここでは、地点を「東京」、項目でデータの種類を「日別値」必要項目を「日平均気温・日最高気温」、期間を「2010年1月1日から2020年1月1日」に設定して、CSVファイルの形式でダウンロードしました。

ダウンロードしたデータを加工しよう

そして、ExcelでCSVファイルを開いてみました。すると、指定項目について品質情報など付加的な情報も一緒についていました。

  • ExcelでCSVファイルを開いたところ

    ExcelでCSVファイルを開いたところ

今回は、最高気温を集計するのが目的ですから、Excel上でちょっとデータを加工して、「日付,平均気温,最高気温」と3列だけに加工してみます。ここでは、以下のように加工してみました。

  • 不要なデータを削除して日付と平均気温と最高気温だけにした

    不要なデータを削除して日付と平均気温と最高気温だけにした

上記の10年分の最高気温日別CSVデータをこちらのGistにアップしました。Gistのページにあるデータは、なでしこ3の簡易エディタでダウンロードして扱うことができます。GitHubのアカウントがあれば、自分で作ったデータも配置できます。

CSVデータを取り込もう

それでは、なでしこにGistからデータを取り込んでみましょう。Webブラウザで『なでしこの簡易エディタ』を開いて、以下のプログラムを実行してみましょう。

ブラウザの保存領域(ローカルストレージ)に「data.csv」という名前で気象データを保存します。

「CSVファイルを取得します」と表示。
URL=『https://gist.githubusercontent.com/kujirahand/aa130b7edf3c6d150b5399d37cd65654/raw/b0265f7fd44b529b29b66ed05ef30fdee5f1b705/data.csv』
逐次実行
 先に、URLをHTTP取得。
 次に、「取得しました!」を表示。
 次に、対象を「data.csv」に保存。
ここまで。

上記プログラムを実行すると、非同期通信(Ajax)でデータを取得してブラウザ内に保存します。

  • CSVファイルをブラウザ内にダウンロードしたところ

    CSVファイルをブラウザ内にダウンロードしたところ

集計してみよう

次に、簡単にプログラムを作って集計してみましょう。10年間で30度超えの日が何日あったのか数えるだけのプログラムです。以下のようになります。(上記のプログラムを実行して、data.csvをローカルに保存してあることを前提にしています。)

日数=0
「data.csv」を開く。# --- (*1)
CSV取得して反復
  F日付=それ[0]。
  F平均=それ[1]。
  F最高=それ[2] #---(*2)
  もし、F最高≧30ならば  # --- (*3)
   日数=日数+1。
    F日付を表示。
  ここまで。
ここまで。
「10年で30度越の日は{日数}日ありました」と表示。

プログラムを実行すると、最高気温が30度超えの日を表示し、最後に合計日数を表示します。実行すると、結構な日数あることが分かります。

  • 30度超えの日を数えるプログラムを実行したところ

    30度超えの日を数えるプログラムを実行したところ

プログラムを確認してみましょう。プログラムの(*1)の部分で先ほどダウンロードした「data.csv」を読み込みます。そして、CSVをなでしこの配列形式にしたら「反復」構文を使って、繰り返し処理を行います。

(*2)の部分で、最高気温を取り出して、(*3)の部分でその値が30以上かどうかを判定します。そして、30度以上であれば、日付を表示して、日数をカウントアップします。

年々増えているのか判定しよう

さて、基本的な処理ができたので、目的のプログラムを作ってみたいと思います。果たして最高気温が30度超えの日は年々増えているのでしょうか。西暦年を使ってカウントしてみましょう。

# --- 最高気温30度超えの日数を調べる ---
# 日数辞書を初期化 --- (*1)
日数辞書={}
Yを2010から2019まで繰り返す
  日数辞書[Y] = 0
ここまで。
# 繰り返し調べる --- (*2)
「data.csv」を開く。
CSV取得して反復
  F日付=それ[0]。
  F平均=それ[1]。
  F最高=それ[2]。
  F日付を「/」で区切る。# --- (*3)
  F年=それ[0]。F月=それ[1]。F日=それ[2]。
  もし、F最高≧30ならば # --- (*4)
    日数辞書[F年] = 日数辞書[F年]+1
  ここまで。
ここまで。
# 結果表示 --- (*5)
日数辞書をJSONエンコード整形して表示。

プログラムを実行してみると、意外な結果が表示されました。去年までの10年で言えば、10年前の2010年が一番暑かったという結果です。Wikipediaなどで調べて見ると、2010年はエルニーニョ現象が影響し、観測史上1位の猛暑になったとのこと。筆者は毎年暑くなっていると感じていましたが、30度超の日数で言えば、この10年は年々増えている訳ではないということが分かりました。

  • 30度超えの日数を表示すると...

    30度超えの日数を表示すると...

プログラムを確認しましょう。(*1)の部分では変数「日数辞書」を初期化します。この変数は、年ごとの日数を辞書形式(ハッシュ形式)でカウントするためのものです。辞書形式の変数を使うと手軽に集計処理ができます。(*2)以降の部分でデータ毎に繰り返し集計を行います。

(*3)の部分では日付データ「年/月/日」の形式を「/」で区切ってそれぞれ変数に分けます。そして、(*4)の部分で30度以上の日付をカウントします。そして、(*5)の部分で集計したデータを出力します。

グラフで傾向を調べよう

しかし、数値だけだと直感的ではありません。もう少し傾向を掴んでみましょう。上記のプログラムの末尾に、グラフを描画する以下のプログラムを書き加えて実行してみましょう。

# グラフを描画
Fラベル=[]
F値=[]
Yを2010から2019まで繰り返す
  FラベルにYを配列追加。
  F値に日数辞書[Y]を配列追加。
ここまで。
データセット = {
    "labels": Fラベル,
    "datasets": [{
      "label": '最高気温',
      "data": F値,
      "backgroundColor": 'rgba(255,0,0,0.5)'
    }]}
データセットの棒グラフ描画。

上記のプログラムを実行するとグラフが描画されます。

  • 最高気温30度以上の日数をグラフにしてみた

    最高気温30度以上の日数をグラフにしてみた

せっかくなので平均気温も描画してみましょう。二つ前のプログラムの(*4)のもし文で「F最高」を「F平均」に変えると、平均気温が30度超えの日を調べることができます。調べた日数のデータをグラフに描画するプログラムは以下の通りです。

# グラフを描画
# データ
最高気温辞書={"2010":71,"2011":61,"2012":66,"2013":58,"2014":45,"2015":47,"2016":57,"2017":51,"2018":68,"2019":55}
平均気温辞書={"2010":24,"2011":11,"2012":11,"2013":19,"2014":12,"2015":9,"2016":1,"2017":2,"2018":11,"2019":8}
# 描画用にデータの形式を変換
Fラベル=[]
F最高気温=[]
F平均気温=[]
Yを2010から2019まで繰り返す
  FラベルにYを配列追加。
  F最高気温に最高気温辞書[Y]を配列追加。
  F平均気温に平均気温辞書[Y]を配列追加。
ここまで。
データセット = {
 "labels": Fラベル,
 "datasets": [
  {"label": "最高気温日数", "data": F最高気温,
   "backgroundColor": "rgba(255,100,100,0.5)"},
  {"label": "平均気温日数", "data": F平均気温,
   "backgroundColor": "rgba(255,100,255,0.5)"}
 ]
}
データセットを棒グラフ描画。

プログラムを実行すると、以下のようにグラフが描画されます。

  • 最高気温と平均気温の両方をグラフに描画してみたところ

    最高気温と平均気温の両方をグラフに描画してみたところ

グラフを確認してみましょう。平均気温を見ても、ここ10年に限っては「年々暑くなっている」わけではありません。しかし、異常気象で相当暑かったと言われている2010年に匹敵するほど暑い年が結構あるということが分かりました。

改良点とまとめ

ここで手順を示したように、気象庁が過去の気象データを公開してくれているおかげで、様々な気象情報を自分で調べることができます。しかも、数行の簡単なプログラムで条件を指定して手軽にデータを集計してグラフにすることができます。例えば、今回のプログラムの条件を変えて「最高気温が35度超えの日」を調べるのも簡単にできます。

なお、もちろん地球温暖化が進んでいるので、毎年暑くなっているのは確かなんですが、実際に集計してみると、さすがに、そこまで顕著に表れているわけではないことも分かりました。また、東京や日本全国を対象にした気象情報は多くあるものの、実際に自分の住んでいる場所の情報となると、それほど多くは見当たらないかもしれません。そこで、自分でデータをダウンロードしてきて、試してみるなら新たな発見があるかもしれません。

自由型プログラマー。くじらはんどにて、プログラミングの楽しさを伝える活動をしている。代表作に、日本語プログラミング言語「なでしこ」 、テキスト音楽「サクラ」など。2001年オンラインソフト大賞入賞、2004年度未踏ユース スーパークリエータ認定、2010年 OSS貢献者章受賞。技術書も多く執筆している。