毎日暑い日が続いています。この暑さは、いつまで続くのでしょうか。今回は、ここ10年分の最高気温を描画してみましょう。いつまで暑さが続くのか視覚的に把握できます。
地元の年間気温データを取得しよう
今回は、気象庁の過去の気象データを利用して、過去10年の最高気温と最低気温をグラフに描画してみましょう。過去の最高気温と最低気温は、こちら( https://www.data.jma.go.jp/risk/obsdl/index.php )のページからダウンロードできます。
せっかくですから、読者の皆さんがお住まいの地域の気象情報をダウンロードしてみてください。順番に項目を選択していくことで、ダウンロードする情報を選べます。
例えば、「神奈川県 > 横浜」と選択し、続いて、項目に「日別値」「最高気温」や「最低気温」を選択します。そして、期間を「2014年1月1日」から「2025年5月31日」などとしましょう。期間を長めにしてしまうと、データ量が多くなり、ダウンロードできないように制限がかかってしまうので注意しましょう。
なお、気象庁の過去の気象データのページは人気があり、時々不具合が起きています。そのため、読者の皆さんが試せるように、10年分の横浜の気温データを取得したものを、そのまま、こちらのGist( https://gist.github.com/kujirahand/5782287f3caea23a72851d95f935ce9e )にアップロードしました。もし、うまくダウンロードできない場合には、このデータを利用していただければと思います。画面右上の「Download ZIP」ボタンを押すとダウンロードできますので解凍してください。
ExcelでCSVファイルを整形しよう
気象庁からダウンロードしたCSVファイルを、実際Excelで開いてみると分かるのですが、最初の6行やC列以降には、今回描画したいグラフとは関係のない情報が含まれています。そこで、Excelなどの表計算ソフトを利用して不要なデータを削除しましょう。
CSVファイルをExcelなどの表計算ソフトに読み込んだ後、下記のようにCSVファイルを編集しましょう。
1. 画面上部の6行を削除して、ヘッダ行を追加します。
2. セルA1に「年月日」、B1に「最高気温」というヘッダ名を入力します。
3. C列以降を削除して必要なデータだけを残す
すると、次のような画面になります。作業できたらシートを「kion10y.csv」というファイル名で保存しましょう。
ここで作業したデータをこちら( https://n3s.nadesi.com/index.php?page=&action=upload&mode=show&image_id=570 )からダウンロードできるようにしています。もし、うまく編集できないという場合には、こちらからダウンロードして、ファイルを「kion10y.csv」というファイル名に変更して利用してください。
ここで注意点なのですが、気象庁からダウンロードしたCSVファイルは、文字エンコーディングがShift_JISとなります。しかし、上記のGistからファイルをダウンロードすると、文字エンコーディングがUTF-8となってしまいます。
Excelで開いて文字化けしてしまう場合には、下記の手順でCSVファイルを読み込んでください。
1. Excelのメニューで「データ」→「データファイル指定」→「テキスト/CSV」を選ぶ
2. 「参照」ボタンを押して、CSVファイルを選んで「次へ」ボタンを押す
3. 元のファイルの文字エンコーディングが「65001: Unicode (UTF-8)」、区切り記号が「コンマ」になっていることを確認して「読み込む」ボタンを押す
もちろん、Excelを使わずに、テキストエディタを使うこともできます。しかし、データの一覧表示や簡単な整形には、Excelが便利です。
Excelがない方は、Googleスプレッドシートなどを利用して作業することもできます。ただし、今回のプログラムは、Excelで書き出した文字エンコーディングがShift_JISのものを対象にするため、文字エンコーディングだけShift_JISに変換してください。
Google Colabでグラフを描画してみよう
今回も、前回と同様に、Google Colabを利用してグラフを描画しましょう。Colab(こちら https://colab.research.google.com/ )にアクセスして、Googleアカウントでログインしましょう。そして「+ ノートブックを新規作成」のボタンをクリックしましょう。
続いて、ノートブックに先ほど作成したCSVファイルをアップロードしましょう。画面の左側にある「ファイル」パネルを開いて、CSVファイルをドラッグ&ドロップしましょう。すると、ファイルがアップロードされます。
そして、日本語の文字化けを解消するために、「japanize-matplotlib」をインストールしましょう。画面右側のセルに「! pip install japanize-matplotlib」と入力して、すぐ左にある実行ボタンをクリックしましょう。
それから、画面上部にある「+ コード」をクリックして、コードセルを追加します。
追加したら、以下のようなプログラムを記入します。
import pandas as pd
import matplotlib.pyplot as plt
import japanize_matplotlib
# CSVファイルのパスを指定 --- (*1)
CSV_FILE = "kion10y.csv"
# 編集済みCSVファイルを読み込む(Shift_JIS/cp932を指定)
df = pd.read_csv(CSV_FILE, encoding="cp932")
# 日付をdatetime型に変換 --- (*2)
df['年月日'] = pd.to_datetime(df['年月日'], format='%Y/%m/%d')
# 年ごとに色分けして1つのグラフに描画 --- (*3)
fig, ax = plt.subplots(figsize=(14, 6))
# 快適な気温(25度)と熱中症リスク(28度)のラインを追加 --- (*4)
plt.axhline(25, color="blue", linestyle="--", linewidth=1, label="25℃ライン")
plt.axhline(28, color="red", linestyle="--", linewidth=1, label="28℃ライン")
# データから1年分ごとデータを抽出してプロット --- (*5)
for year in df["年月日"].dt.year.unique():
# print(f"Processing year: {year}")
data = df[df["年月日"].dt.year == year].copy()
# print(f"Data for {year}:\n{data.head()}")
# 各年の月日だけに変換(年は2020に固定して描画) --- (*6)
data["月日"] = data["年月日"].apply(lambda d: d.replace(year=2020))
ax.plot(data["月日"], data["最高気温"], label=f"{year}年")
# X軸を各月の1日に設定 --- (*7)
months = pd.date_range("2020-01-01", "2020-12-31", freq="MS")
ax.set_xticks(months)
ax.set_xticklabels([f"{m.month}月" for m in months], rotation=45)
# グラフのタイトルとラベルを設定 --- (*8)
ax.set_title("各年の最高気温の比較") # タイトル
ax.set_xlabel("月") # X軸ラベル
ax.set_ylabel("最高気温 (℃)") # Y軸ラベル
ax.legend() # 凡例を表示
ax.grid(True) # グリッドを表示
plt.tight_layout() # レイアウトを調整
plt.show() # グラフを表示
ここで入力したプログラムの内容を確認してみましょう。
プログラムの(*1)では、読み込むCSVファイルのパスを設定しています。このCSVファイルは、ヘッダ行(先頭行)が「年月日」「最高気温」となっていることを想定しています。ExcelなどでCSVファイルを調整してください。
(*2)では、「年月日」列の文字列をPythonのdatetime型に変換しています。これにより日付操作や抽出がしやすくなります。
(*3)では、グラフの描画の準備として、Matplotlibのfigとax(描画領域)を作成しています。サイズを、横14インチ×縦6インチと指定しました。
(*4)では、気温25度と28度の横線をグラフに追加しています。これは、それぞれ「快適な気温」と「熱中症リスク」の目安ラインとして視覚的に参考になるように配慮したものです。
(*5)以降の部分では、10年分のデータを1年分ごとデータを取り出し、それぞれの年について最高気温のグラフを描画しています。なお、(*6)では、各データの日付の「年」部分を2020年に固定することで、すべての年のデータを1年間の中で比較できるようにしています。これによって季節の変化に沿った比較ができます。
(*7)では、X軸を1月から12月の月初めに設定し、ラベルを、1月、2月、3月…12月として表示しています。45度傾けて読みやすくしています。
(*8)では、グラフのタイトル、X軸・Y軸ラベル、凡例、グリッド、レイアウト調整などの仕上げを行っています。
プログラムを実行して確認してみよう
プログラムを入力したら、実行ボタンを押しましょう。10年分の最高気温がグラフに描画されます。10年分の気温データは圧巻です。
今回、人間が快適に感じる温度25度と、熱中症リスクが高まるとされる28度の2つのラインをグラフに追加してみました。
このグラフを見ると、7月になると急に最高気温が上がり、30度を超える日が続き、10月過ぎるまでは暑さが継続するというデータを確認できます。また、7月と8月は35度を軽く超える日も観測されているのを確認できますが、8月中旬がピークであり、そこから次第に気温が下がっていくのが分かります。
それでも、7月から10月上旬までの約3ヶ月以上、人間にとって快適とされる25度を大きく上回る日が多く、不快な日々が続くことがグラフから読み取れます。
まとめ
以上、今回は、10年分の最高気温を一つのグラフに描画することで、夏の暑さを視覚化することができました。ここでは、10年分の日別データを全て1つのグラフに描画してみましたが、特定の温度を上回る日の日数を数えてから描画したり、年ごとの気温を比較するグラフにするなど、工夫次第で面白い発見ができることでしょう。
自由型プログラマー。くじらはんどにて、プログラミングの楽しさを伝える活動をしている。代表作に、日本語プログラミング言語「なでしこ」 、テキスト音楽「サクラ」など。2001年オンラインソフト大賞入賞、2004年度未踏ユース スーパークリエータ認定、2010年 OSS貢献者章受賞。これまで50冊以上の技術書を執筆した。直近では、「大規模言語モデルを使いこなすためのプロンプトエンジニアリングの教科書(マイナビ出版)」「Pythonでつくるデスクトップアプリ(ソシム)」「実践力を身につける Pythonの教科書 第2版」「シゴトがはかどる Python自動処理の教科書(マイナビ出版)」など。