日本は五季になってしまったのか!?T検定で検証!
はじめに
「最近の夏はおかしい...暑すぎる...」
「もはや夏じゃない、別の季節なんじゃ...?」
こんな声を2024年の夏、耳にする機会が多かったのではないでしょうか(私はそう思いました)。テレビでは連日暑さが伝えられ、「酷暑」という新しい季節ができたなどと騒がれることもありました。そこで、本記事では"夏の中でも特に暑い夏"という「酷暑」が日本の新しい季節として成立するのか、統計的に検証してみたいと思います!
検証の前に...四季の存在を確認
大前提として、日本に四季が存在していなければ話が始まりません。そこで別の記事で四季の存在を検証した結果、統計的に四季はしっかり存在していることが確認できました。
よろしければ、こちらの記事もどうぞ。
結論:「酷暑」という季節は成立しない
近年の夏の暑さは、過去のデータと比べ、統計的に有意な差を示しました...しかし、その差は新しい季節と呼べるほど十分ではないと推察しました。詳しい理由は以下で説明していきます!
新しい季節?「酷暑」を検証
では、検証を始めていきましょう!
「酷暑」候補の月としては一際暑い印象があった8月と9月にします。四季が明確といわれている福島県福島市を使用データに採用しました。また、検証期間は以下の通りです。
【検証期間】
- 過去データ: 1972年〜2021年(50年間)
- 最近データ: 2022年〜2024年(3年間)
検証方法
STEP1.
T検定: 1972年〜2021年と2022年〜2024年の8月・9月の平均気温の差を検証します。
STEP2.
箱ひげ図: 気温分布を可視化して差を視覚的に考察します。
T検定とは?
T検定は2つのサンプルの平均値に統計的な差かあるか判断する分析手法です。今回は95%の信頼区間を基準とし、p値が0.05未満の場合を「有意な差がある」と判断します。
STEP1. T検定
使用データ
気象庁ホームページから以下のデータを取得しました。
- 場所:福島県福島市
- 項目:月平均気温
- 期間:1972年〜2024年の8月、9月
- オプション:
- 利用上注意が必要なデータは格納しない
- 観測環境などの変化にかかわらず、すべての期間の値を表示(格納)する。ただしデータの不均質を示す情報をつける。
コード
from scipy import stats
import pandas as pd
import numpy as np
# CSVファイルを読み込む
df = pd.read_csv('./data/hukuoka_summer.csv', encoding='shift-jis', header=[3])
# データ形式を整備
df = df.drop(0)
df = df.drop(['平均気温(℃).1'], axis=1)
df["月"] = df["月"].astype('int')
df["年"] = df["年"].astype('int')
old_data = df[df["年"] <= 2021].copy() # 1972年-2021年
new_data = df[df["年"] > 2021].copy() # 2022年-2024年
# T検定
results = []
months = [8,9]
for month in months:
old_temp = old_data[old_data["月"] == month]["平均気温(℃)"]
recent_temp = new_data[new_data["月"] == month]["平均気温(℃)"]
t_stat, p_value = stats.ttest_ind(recent_temp, old_temp)
results.append({f"{month}月":'{:.6f}'.format(p_value)})
print(results)
結果
月 | p値 | 判定 |
---|---|---|
8月 | 0.025943 | 有意な差 |
9月 | 0.000089 | 有意な差 |
8月、9月ともにp値が0.05以下となったため、近年の暑さは過去の暑さと差が見られることがわかりました。
STEP2. 箱ひげ図
箱ひげ図はデータのばらつき具合を示すのに用います。
箱ひげ図の見方
コード
箱ひげ図を表示するコードです。
import seaborn as sns
import matplotlib.pyplot as plt
import japanize_matplotlib
old_data['期間'] = '1972-2021'
new_data['期間'] = '2022-2024'
conbined_df = pd.concat([old_data,new_data])
plt.figure(figsize=(6,6))
sns.boxplot(data=conbined_df, x="月", y="平均気温(℃)", hue="期間", palette="Set2")
plt.title("1972-2024年の8月・9月の気温比較", fontsize=14)
plt.xlabel("月", fontsize=12)
plt.ylabel("平均気温(℃)", fontsize=12)
plt.legend(title="期間", title_fontsize=10)
plt.tight_layout()
中央値を計算するコードです。
# 各月ごとの中央値を計算
median_values = conbined_df.groupby(["期間", "月"])["平均気温(℃)"].median()
# 出力
print(median_values)
結果
期間 | 1972-2021 | 2022-2024 | 中央値差 |
---|---|---|---|
8月 | 25.45 | 28.10 | 3.65 |
9月 | 20.75 | 24.10 | 3.35 |
8月、9月ともに3℃以上の差があり、かつ近年と過去の気温データには統計的には有意な違いが見られました。つまり、「酷暑」は成立する...?
もう少し考えてみる
確かに差は見つかりましたが...新しい季節と呼べるほどなのでしょうか?
というのも、日本に四季は存在するのか?気温データで検証してみた!より、従来の季節間の気温差は
- 最も気温差が大きい季節の変化:秋→冬(Δ13.8℃)
- 最も気温差が小さい季節の変化:夏→秋(Δ9.5℃)
であり、「酷暑」と「普通の夏」の差(3℃強)は、従来の季節の切り替わり(9℃以上)と比べると、まだまだ小さいと考えられます。
よって、「酷暑」は統計的に有意な差が見られるものの、新しい季節として成立するとは言い難いと考えられます。
おわりに
気象庁の気温データから新しい季節が追加されたのかを検証しました。確かに近年の夏は、お家に引きこもって24時間クーラーをつけるには十分でしたが、新しい季節というほどではないようです。(めっちゃ暑かったけどね)
来年は例年並みの暑さになってくれ〜〜笑
参考リンク
How to Perform ANOVA in Python
Discussion