今幎の倏も非垞に暑いです。暑いのは䜓感しお分かっおいるのですが、50幎前ず比べおどのくらい暑くなったのか比べおみたくなりたせんか気象庁が過去の気枩デヌタをオヌプンデヌタずしお配付しおいたすので、これを利甚しお真倏日ず猛暑日をカりントしおグラフを描画しおみたしょう。

  • 過去50幎の真倏日ず猛暑日をカりントしおグラフを描画したずころ

    過去50幎の真倏日ず猛暑日をカりントしおグラフを描画したずころ

50幎前ず比べおどのくらい暑いのか調べおみよう

地球枩暖化ず蚀われお久しく、幎々暑くなっおいたす。ずは蚀え、「50幎前ず比范しおどのくらい暑くなったんだろうか」ず気になりたせんか。気になったこずはサクッずプログラムを䜜っお調べお芋たしょう。自分で玍埗できるたで、調べお芋るず新たな発芋があるこずでしょう。

郜合が良いこずに、気象庁から過去の気枩デヌタがオヌプンデヌタずしお配付されおいたす。そのため、専門家でなくおも、気軜に調査できたす。悶々ず暑さず戊うだけではなく、過去のデヌタから䜕かしらの知芋が埗られないか調べおみたしょう。ちなみに「オヌプンデヌタ」ずは、政府や䌁業、研究機関などが無償で配付しおいるデヌタのこずです。誰でも自由に利甚できるデヌタです。

気象庁から過去の気枩デヌタをダりンロヌドできる

気象デヌタは、こちらの気象庁のWebサむトからCSV圢匏でダりンロヌドできるようになっおいたす。

  • 「気象庁 > 過去の気象デヌタ・ダりンロヌド」のペヌゞ

    「気象庁 > 過去の気象デヌタ・ダりンロヌド」のペヌゞ

このWebサむトの良いずころは、単玔に倧量の過去の気象デヌタがダりンロヌドできるだけではなく、必芁なデヌタを遞択しお、必芁なデヌタだけをCSV圢匏でダりンロヌドできるようになっおいる点にありたす。

䜿い方は単玔で、「地点」を遞んだ埌で、気枩や降氎量など必芁なデヌタの項目を遞び、最埌に「期間」を遞んで画面右偎にある「CSVファむルをダりンロヌド」ボタンを抌すだけです。

50幎分の気枩デヌタをダりンロヌドしよう

気象庁の過去の気象デヌタ配付サむトですが、耇数の地点が遞べるようになっおいるものの、䞀回にダりンロヌドできるデヌタサむズが制限されおいたす。そこで、今回は、1974幎から10幎分ず぀日別平均気枩ず最高気枩のデヌタを、5回に枡っおダりンロヌドしおみたしょう。

ここでは、次のように遞択しおダりンロヌドしたした。

- (1) [地点] 東京 → 東京を遞択
- (2) [項目] 日別倀 → æ°—æž© → 「日平均気枩」ず「日最高気枩」を遞択
- (3) [期間] 連続した期間 → 1974幎1月1日から数幎分ごずに繰り返しダりンロヌド
  • ダりンロヌドしたCSVを開いたずころ

    ダりンロヌドしたCSVを開いたずころ

ただし、筆者が数日に枡っお詊したずころ、頻繁に「アクセスが集䞭しおいる」ず衚瀺され、゚ラヌが出おダりンロヌドできないこずが倚くありたした。そこで、筆者がダりンロヌドした1974幎から2024幎7月8日たでのCSVファむルを、こちらからダりンロヌドできるようにしたした。うたくダりンロヌドできない方はこのデヌタを利甚しおください。

なでしこ3のコマンドラむン版をColabで䜿おう

ずころで、本連茉の䞻圹「なでしこ3」には、実行環境ごずに異なるランタむムが甚意されおいたす。Webブラりザ䞊で実行するブラりザ版(wnako)に加えお、ロヌカルPC䞊で実行するコマンドラむン版(cnako)が甚意されおいたす。ブラりザ版ではセキュリティの関係䞊ロヌカルファむルの操䜜が制限されおいたす。そこで、コマンドラむン版(cnako)を䜿うず、ファむルの読み曞きやコマンドの実行など、かなり自由な操䜜が可胜ずなりたす。

自分のパ゜コンに、なでしこ3のコマンドラむン版をむンストヌルするのもオススメなのですが、今回は、Googleが提䟛しおいるPythonの実行環境であるColaboratory䞊で、なでしこを䜿う方法を玹介したす。

Colaboratory(以埌、Colabず略したす)には有料版もありたすが、基本的にはGoogleアカりントさえあれば、無料で利甚できたす。Googleの提䟛するクラりドマシン䞊で、プログラムを実行できるため、自分のパ゜コンの環境に䜕もむンストヌルする必芁がなく、Webブラりザさえあればプログラムを動かすこずができるのが特城です。なお、ColabはPythonの実行環境ですが、ちょっずした工倫で、なでしこのコマンドラむン版を動かすこずができたす。

手順1Colabにアクセスしお新芏ノヌトブックを䜜成しよう

こちらのColabにアクセスしお、Googleアカりントでログむンするず、次のような画面が衚瀺されたす。それで、画面巊䞋にある「+ ノヌトブックを新芏䜜成」ボタンをクリックしたす。

  • Colabのトップ画面

    Colabのトップ画面

手順2なでしこ3を利甚するコマンドを実行しよう

Colabでは、ノヌトブックに衚瀺されたテキストボックスにプログラムを蚘述し、テキストボックスの巊偎にある「▶」の実行ボタンを抌すこずで、プログラムが実行されたす。次の図のように1の郚分にプログラムを蚘述し、2のボタンを抌したす。

  • なでしこ3を利甚するためのコマンドを実行しよう

    なでしこ3を利甚するためのコマンドを実行しよう

それで、最初に、なでしこ3のコマンドラむン版をむンストヌルしお、手軜にプログラムを実行するための関数を定矩したしょう。以䞋のプログラムをコピヌしお、テキストボックスに貌り付けお実行したす。

# なでしこを実行する準備を行う
! npm install -g nadesiko3
import subprocess
def run(src):
  # プログラムを1床ファむルに保存
  with open('input.nako3', 'w') as file:
    file.write(src)
  # 保存したファむルをcnako3に枡しお実行する
  result = subprocess.run(['cnako3', 'input.nako3'], text=True, capture_output=True)
  print("---------------")
  print(result.stdout)
  print("---------------")
# ここたで

このプログラムは、シェルスクリプトでなでしこ3をむンストヌルし、Pythonの関数を定矩しお、なでしこを実行する関数を定矩するものです。なでしこの範囲を超えおしたうので詳しくは解説したせんが、このコマンドを最初に実行するず芚えおおきたしょう。

手順3なでしこのプログラムを蚘述しお実行しよう

そしお、手順2が正しく実行された埌は、「run('''なでしこのプログラム''')」ず蚘述するこずで、コマンドラむン版のなでしこを実行できたす。画面巊䞊にある「+ コヌド」のボタンを抌しお、テキストボックスを远加しお、そこにプログラムを蚘述したしょう。

䟋えば、以䞋のようなプログラムを蚘述しお、実行ボタンを抌しおみたしょう。

run('''
# --- ここになでしこのプログラム ---
「こんにちは」ず衚瀺
''')
  • Colabでなでしこのプログラムが実行されたずころ

    Colabでなでしこのプログラムが実行されたずころ

手順45぀のCSVファむルを䞀぀のファむルにたずめよう

それでは、ここから、気象庁のWebサむトからダりンロヌドしたファむルを䜿っお凊理を行いたしょう。今回は、筆者が事前にダりンロヌドしたCSVファむルを利甚したす。以䞋のコヌドを貌り付けお実行したしょう。

# ZIPファむルをダりンロヌドしお解凍
! wget https://github.com/kujirahand/past_temperature_data_japan/archive/refs/tags/v0.0.1.zip
! unzip v0.0.1.zip
! cp past_temperature_data_japan-0.0.1/rawdata/tokyo/* ./

もしも、ご自身で気象庁からCSVファむルをダりンロヌドした堎合には、Colabの巊偎にあるサむドバヌの「ファむル」をクリックしお、そこにファむルをドラッグドロップするず、CSVをアップロヌドできたす。䞋蚘のように、Colabのカレントディレクトリ(/content)にダりンロヌドしたCSVが配眮されるようにしおください。

  • CSVファむルを準備したずころ

    CSVファむルを準備したずころ

次いで、以䞋のプログラムを実行しお5぀に分かれたCSVファむルを手軜に扱えるように1぀にたずめたしょう。以䞋のコヌドを貌り付けお実行しおみたしょう。

# 耇数のCSVファむルを結合しお「all.csv」を䜜成する
run('''ALL=「」
「*.csv」のファむル列挙
反埩
  察象を衚瀺
  察象をSJISファむル読んでSに代入
  Sを改行で区切っおAに代入
  Aの0から6を配列取り出す # 先頭の6行はヘッダで䞍芁なので
  ALLALL改行Aを改行で配列結合
  ALLをトリムしおALLに代入。
ALLを「all_temp.csv」に保存。
「OK」ず衚瀺。
''')

プログラムを実行するず「all|_temp.csv」が䜜成されたす。Colabのサむドバヌの「ファむル」を芋るずCSVファむルが新芏保存されおいるのを確認できるでしょう。このプログラムでは、次々ずShift|_JISで蚘述されたCSVファむルを読み蟌んで、䞍芁な冒頭の6行を削陀し぀぀、結合しおCSVファむルを出力したす。

  • 実行するずCSVファむルを1぀にたずめる

    実行するずCSVファむルを1぀にたずめる

手順5真倏日ず猛暑日の日数を調べよう

次に、「all_temp.csv」を読み蟌み、その幎ごずの真倏日ず猛暑日の日数をカりントしおみたしょう。真倏日ずは日最高気枩が30℃以䞊の日数であり、猛暑日ずは35℃以䞊の日数です。以䞋のコヌドを貌り付けお実行しおみたしょう。

run('''# 真倏日ず猛暑日の日数を数える
# 蟞曞型を初期化
F猛暑日={}
F真倏日={}
Yを1974から2024たで繰り返す
  F猛暑日[Y] = 0
  F真倏日[Y] = 0
# CSVを開いお真倏日ず猛暑日を数える
ALL=「all_temp.csv」を開いお、CSV取埗
ALLを反埩
  F幎月日は、察象[0]
  F平均気枩は、察象[1]
  F最高気枩は、察象[4]
  F幎月日を「/」で区切っおADに代入
  倉数[Y,M,D]=AD
  もし、F最高気枩>=35ならば
    F猛暑日[Y] = F猛暑日[Y]+1
  もし、F最高気枩>=30ならば
    F真倏日[Y] = F真倏日[Y]+1
# 結果をCSVで出力
出力甚=「幎床,猛暑日,真倏日{改行}」
Yを1974から2023たで繰り返す
  出力甚出力甚「{Y}幎,{F猛暑日[Y]},{F真倏日[Y]}{改行}」
出力甚を「result.csv」に保存。
出力甚を衚瀺
「OK」ず衚瀺。
''')

するず、真倏日ず猛暑日をカりントしお「result.csv」ずいうCSVファむルに出力したす。このプログラムでは、蟞曞型の倉数「F猛暑日」ず「F真倏日」を利甚しお、最高気枩が30床か35床以䞊ならばカりントアップするずいうものになっおいたす。

  • 真倏日ず猛暑日をカりントしおCSVファむルを出力する

    真倏日ず猛暑日をカりントしおCSVファむルを出力する

(手順6) Pythonでグラフを出力しよう

ここで生成したCSVを基にしお折れ線グラフで描画しおみたしょう。たずは、Pythonの力を借りおグラフを描画しおみたしょう。以䞋のコヌドを蚘述しお実行するず、Pythonのラむブラリ「matplotlib」を䜿っおグラフを描画したす。

# 「result.csv」を読み瞊棒グラフを描画する
! pip install matplotlib_fontja
import matplotlib.pyplot as plt
import pandas as pd
import matplotlib_fontja
pd.read_csv('result.csv', index_col=0).plot(kind='line')
plt.show()

実行するず、䞋蚘のようなグラフが描画されたす。グラフを芋るず右肩䞊がりに真倏日ず猛暑日が増えおいるこずが分かりたした。

  • CSVファむルを元にグラフを描画したずころ

    CSVファむルを元にグラフを描画したずころ

(手順7) なでしこを利甚しおグラフ描画しおみよう

Colabのサむドバヌを開いお、「ファむル」タブにお「result.csv」を遞び、右クリックするず「ダりンロヌド」メニュヌが出たす。これをクリックしおダりンロヌドしたら、なでしこ貯蔵庫にアップロヌドしおみたしょう。

なでしこ貯蔵庫で「新芏」ボタンをクリックしお、以䞋の5行のプログラムを貌り付けお実行しおみたしょう。
# 䜜成した「result.csv」を貯蔵庫にアップロヌドしたもの
URL=「https://n3s.nadesi.com/image.php?f=535.csv」
# URLを取埗しおグラフを描画する
URLからHTTP取埗しおデヌタに代入。
デヌタをCSV取埗しお線グラフ描画。

実行するず、次のようなグラフを描画したす。線グラフの線にカヌ゜ルを合わせるず、実際の数倀も確認できたす。

  • なでしこを利甚しおグラフを描画したずころ

    なでしこを利甚しおグラフを描画したずころ

たずめ

以䞊、真倏日ず猛暑日をカりントするプログラムを䜜っおみたした。グラフから地球が幎々暑くなっおいるこずが分かりたした。たた、今回は、なでしこのコマンドラむン版も䜿っおCSVファむルの操䜜をしおみたした。手元のPCにむンストヌルしお䜿うのも䟿利ですが、今回のように、Colabをちょっず工倫するこずで、手軜にコマンドラむン版が䜿えたす。いろいろ応甚が利きたすので参考にしおみおください。

自由型プログラマヌ。くじらはんどにお、プログラミングの楜しさを䌝える掻動をしおいる。代衚䜜に、日本語プログラミング蚀語「なでしこ」 、テキスト音楜「サクラ」など。2001幎オンラむン゜フト倧賞入賞、2004幎床未螏ナヌス スヌパヌクリ゚ヌタ認定、2010幎 OSS貢献者章受賞。技術曞も倚く執筆しおいる。盎近では、「シゎトがはかどる Python自動凊理の教科曞(マむナビ出版)」「すぐに䜿える!業務で実践できる! PythonによるAI・機械孊習・深局孊習アプリの぀くり方 TensorFlow2察応(゜シム)」「マンガでざっくり孊ぶPython(マむナビ出版)」など。