[Work/Class/Python3の基礎とデータ処理/2_PythonLibraries]

CSVデータからの線形重回帰分析

この内容は前期試験の課題である

気象庁オープンデータ

前回やったのと同じ「気象庁|過去の気象データ・ダウンロード」ページから,必要なデータを絞ってCSV形式でダウンロードすることができる.今回は複数の観測地点のデータを持ってきて,年度と緯度と8月の日中最高気温の月平均を見てみる.

重回帰分析

重回帰分析とは,説明変数が2変数以上の回帰分析である.多変量解析と呼ばれる分析手法群の中の一つの手法である.重回帰分析は,モデルが線形である場合,つまり簡単に言えば「y = ax1 + bx2 + c」のaとbとcを求めることに相当する.

重回帰分析の時,モデルの中の説明変数x1やx2は,実は(x1)^2など二乗の場合でも分析できる.あくまで係数との関係が線形であれば線形回帰として求められる.この場合,説明変数を入力する際にあらかじめ二乗したデータを作っておいて,それを入力する作業が必要になる.

Scipyでの2変数重回帰分析

単純線形回帰の場合はnumpyだけでも計算を行うことができたが,重回帰分析ではscipyというライブラリを用いる.使い方は同じく簡単である.

import numpy
import scipy.linalg

explanatory_array1 = [........] # 説明変数1 配列の中身を入れておく
explanatory_array2 = [........] # 説明変数2 上記に同じ
responsive_array = [.......] # 目的変数の配列 中身を入れておく

N = len(explanatory_array1)
G = numpy.array([explanatory_array1, explanatory_array2, np.ones(N)]).T

# np.ones(N)は計算用に使う行列の生成

# Tについては以下を参照
# https://docs.scipy.org/doc/numpy/reference/generated/numpy.ndarray.T.html
result = scipy.linalg.solve(G.T.dot(G), G.T.dot(responsive_array))

# モデルが y = ax1 + bx2 + cの時
# result[0]: a, result[1]: b, result[2]:c となる配列が返って来る

課題

複数の観測点の観測データをもとに,説明変数1:観測年,説明変数2:観測された地点の緯度,日中平均気温の月平均を目的変数として,重回帰分析を行い,プロットするPythonコードを書け.