10  気温とさくらの開花を調べる

これまでに学んだデータの読み込み,散布図,相関係数を使って,東京のさくらの開花日を調べよう.本章の問いは,3 月の平均気温が高い年ほど,さくらの開花は早いのかである.

まず,散布図で関係を確認し,相関係数を求める.次に,年代による違いを比べ,この分析からわかることと,相関だけでは判断できないことを考える.

10.1 どのようなデータか

図 5.2 では,東京のさくらの開花が早くなる傾向を見た.そして,原因を考えるには,気温など,ほかのデータも調べる必要があると述べた.ここでは,開花日と 3 月の平均気温の関係を,散布図と相関係数で調べる.

tokyo_sakura.csv は,気象庁が観測した 1953〜2025 年の東京のデータを,1 年 1 行にまとめた表である.各列は次の意味を持つ.

  • year:年
  • bloom_day:ソメイヨシノの開花日(3 月 1 日を 1 日目として数えた日数)
  • march_temp_c:3 月の平均気温(℃)

CSV ファイルをダウンロードし,チャプター 4 と同じ手順で Colab にアップロードする.本章のコードは,上から順に実行する.

出典:気象庁,生物季節観測累年値と過去の気象データ・ダウンロードを加工して作成.

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

sakura = pd.read_csv("tokyo_sakura.csv")
sakura.head()
year bloom_day march_temp_c
0 1953 26 9.4
1 1954 26 8.4
2 1955 24 8.7
3 1956 26 8.6
4 1957 33 6.8

10.2 散布図で関係を見る

横軸に 3 月の平均気温,縦軸に開花日をとり,1 年を 1 点で表す.

plt.figure(figsize=(6, 4))
plt.scatter(sakura["march_temp_c"], sakura["bloom_day"], color="steelblue")
plt.xlabel("Mean temperature in March (°C)")
plt.ylabel("Bloom day (March 1 = 1)")
plt.grid(alpha=0.3)
plt.tight_layout()
plt.show()
横軸は3月の平均気温で5.5から12.9℃,縦軸は開花日で14から42.点は全体として右下がりに並んでいる.
図 10.1: 東京の 3 月の平均気温とさくらの開花日(1953〜2025 年).1 点が 1 年を表す.

図 10.1 の点は,全体として右下がりに並んでいる.3 月の平均気温が高い年ほど,開花日が早い傾向がある.3 月の平均気温が特に低かった年と,特に高かった年を取り出してみよう.

cold_years = sakura[sakura["march_temp_c"] <= 6]
warm_years = sakura[sakura["march_temp_c"] >= 12.5]
print(cold_years)
print(warm_years)
    year  bloom_day  march_temp_c
17  1970         38           5.5
31  1984         42           5.9
    year  bloom_day  march_temp_c
68  2021         14          12.8
70  2023         14          12.9

3 月の平均気温が 6℃ 以下だった 1970 年と 1984 年は,開花日が 38(4 月 7 日)と 42(4 月 11 日)であり,開花が遅かった.1984 年は,図 5.2 で最も遅く開花した年である.一方,12.5℃ 以上だった 2021 年と 2023 年は,どちらも 14(3 月 14 日)であり,最も早く開花した年に含まれる.

10.3 相関係数を求める

r = np.corrcoef(sakura["march_temp_c"], sakura["bloom_day"])[0, 1]
print("相関係数:", round(r, 2))
相関係数: -0.85

相関係数は -0.85 であり,3 月の平均気温と開花日には強い負の相関がある.

10.4 相関関係と因果関係

最初の 10 年間と最近の 10 年間で,3 月の平均気温と開花日を比べる.

early = sakura[sakura["year"] <= 1962]
recent = sakura[sakura["year"] >= 2016]

print("1953〜1962 年の 3 月の平均気温(℃):", round(early["march_temp_c"].mean(), 1))
print("2016〜2025 年の 3 月の平均気温(℃):", round(recent["march_temp_c"].mean(), 1))
print("1953〜1962 年の開花日の平均:", early["bloom_day"].mean())
print("2016〜2025 年の開花日の平均:", recent["bloom_day"].mean())
1953〜1962 年の 3 月の平均気温(℃): 8.5
2016〜2025 年の 3 月の平均気温(℃): 10.8
1953〜1962 年の開花日の平均: 27.6
2016〜2025 年の開花日の平均: 19.5

3 月の平均気温は 8.5℃ から 10.8℃ に上がり,開花日の平均は 27.6 から 19.5 へと,約 8 日早くなっている.図 5.2 で見た,開花が早くなる傾向は,3 月の気温が上がったことと関係していそうだ.

ただし,相関係数は,二つの変数の直線的な関係の強さを表すだけであり,一方が他方の原因であることまでは示さない.開花が早くなった原因を確かめるには,さくらが開花するしくみについての知識や,ほかのデータと合わせて考える必要がある.相関関係があることと,因果関係があることは区別しよう.

10.5 わかったことをまとめる

  • このデータでは,3 月の平均気温が高い年ほど,さくらの開花が早い傾向があった.
  • 最初の 10 年間と最近の 10 年間を比べると,3 月の平均気温は高くなり,開花日の平均は早くなっていた.
  • 相関係数だけでは,開花が早くなった原因までは判断できない.