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 |
これまでに学んだデータの読み込み,散布図,相関係数を使って,東京のさくらの開花日を調べよう.本章の問いは,3 月の平均気温が高い年ほど,さくらの開花は早いのかである.
まず,散布図で関係を確認し,相関係数を求める.次に,年代による違いを比べ,この分析からわかることと,相関だけでは判断できないことを考える.
図 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 |
横軸に 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()
図 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 日)であり,最も早く開花した年に含まれる.
r = np.corrcoef(sakura["march_temp_c"], sakura["bloom_day"])[0, 1]
print("相関係数:", round(r, 2))相関係数: -0.85
相関係数は -0.85 であり,3 月の平均気温と開花日には強い負の相関がある.
最初の 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 月の気温が上がったことと関係していそうだ.
ただし,相関係数は,二つの変数の直線的な関係の強さを表すだけであり,一方が他方の原因であることまでは示さない.開花が早くなった原因を確かめるには,さくらが開花するしくみについての知識や,ほかのデータと合わせて考える必要がある.相関関係があることと,因果関係があることは区別しよう.