アイスクリーム統計学にようこそ! のページを読み進めながら、以下の課題を Python を使って解いてください。
__課題4.1__ 去年の夏をダウンロードし、散布図を描いてください。
# URL によるリソースへのアクセスを提供するライブラリをインポートする。
import urllib # Python 2 の場合
# import urllib.request # Python 3 の場合
# ウェブ上のリソースを指定する
url = 'https://raw.githubusercontent.com/maskot1977/ipython_notebook/master/toydata/ice_cream2.txt'
# 指定したURLからリソースをダウンロードし、名前をつける。
urllib.urlretrieve(url, 'ice_cream2.txt') # Python 2 の場合
# urllib.request.urlretrieve(url, 'ice_cream.txt') # Python 3 の場合
('ice_cream2.txt', <httplib.HTTPMessage instance at 0x10611ae18>)
# ダウンロードしたデータから、列ごとに数字を読み込んでリストに格納する。
col1 = []
col2 = []
col3 = []
for i, line in enumerate(open('ice_cream2.txt')):
if i == 0:
continue
a = line.split()
col1.append(int(a[0]))
col2.append(int(a[1]))
col3.append(int(a[2]))
# 図やグラフを図示するためのライブラリをインポートする。
import matplotlib.pyplot as plt
%matplotlib inline
# プロットする
plt.scatter(col2, col3, alpha=0.5)
plt.title("Numbers of customers in last summer")
plt.xlabel("Temperature")
plt.ylabel("Customers")
for day, x, y in zip(col1, col2, col3):
plt.text(x, y, day, alpha=0.8, size=12)
plt.show()
__課題4.4__: 去年の夏をダウンロードし、以下の問に答えてください。
# 平均値を求める関数
def average(list):
# 分散を求める関数
def variance(list):
# 標準偏差を求める関数
import math
def standard_deviation(list):
# 共分散(偏差積の平均)を求める関数
def covariance(list1, list2):
# 相関係数を求める関数
def correlation(list1, list2):
# 相関係数を求める
correlation(col2, col3)
0.8703518769354424
# 回帰直線の傾き=相関係数*((yの標準偏差)/(xの標準偏差))を求める関数を作ってください。
def a_fit(xlist, ylist):
# y切片=yの平均-(傾き*xの平均)を求める関数を作ってください。
def b_fit(xlist, ylist):
# 回帰直線の式
print("y = ax + b; (a, b) = ({0}, {1})".format(a_fit(col2, col3), b_fit(col2, col3)))
y = ax + b; (a, b) = (17.2482570476, -229.981812671)
# たとえば最高気温 31度のときの予測客数は
a_fit(col2, col3) * 31 + b_fit(col2, col3)
304.71415580478936
# 回帰直線を描くための準備として、回帰直線の式を参考に、xの最小値〜最大値の範囲のxに対応するyの予測値(fitted_y)を計算してください。
test_x = []
fitted_y = []
for x in range(min(col2), max(col2)+1):
# 散布図と回帰直線を描く。
plt.figure(figsize=(8,5))
plt.plot(col2,col3,'bo', label='Exp.')
plt.plot(test_x,fitted_y,'k-', label='fitted line', linewidth=10, alpha=0.3)
plt.title("Numbers of customers in last summer")
plt.xlabel("Temperature")
plt.ylabel("Customers")
plt.legend(loc='best',fancybox=True, shadow=True)
plt.grid(True)
for day, x, y in zip(col1, col2, col3):
plt.text(x, y, day, alpha=0.8, size=12)
plt.show()
__課題4.5__:店舗別8月の平均客数データ(12店舗)をダウンロードし、相関係数、回帰直線の傾き、回帰直線のy切片を求め、散布図に回帰直線を描き入れてください。
# ウェブ上のリソースを指定する
# 指定したURLからリソースをダウンロードし、名前をつける。
('shop_distance.txt', <httplib.HTTPMessage instance at 0x10efa5680>)
# ダウンロードしたデータから、列ごとに数字を読み込んでリストに格納する。
# 相関係数を求める
-0.9795221182977909
# 回帰直線の式
y = ax + b; (a, b) = (-0.476140442984, 755.34959721)
# 回帰直線を描くための準備
# 散布図と回帰直線を描く。
__課題4.6__:入学試験の点数と学業成績のデータを用いて、以下の問いに答えてください。
# ウェブ上のリソースを指定する
# 指定したURLからリソースをダウンロードし、名前をつける。
('entrance_exam.txt', <httplib.HTTPMessage instance at 0x10f184cf8>)
# ダウンロードしたデータから、列ごとに数字を読み込んでリストに格納する。
# 相関係数を求める
0.7617976726140626
# 回帰直線の式
y = ax + b; (a, b) = (0.00806763181226, -1.79748736837)
# 回帰直線を描くための準備
# 散布図と回帰直線を描く。
__課題5.1__:去年の夏(最低気温込み)のデータを用い、次の問いに答えてください。
# ウェブ上のリソースを指定する
# 指定したURLからリソースをダウンロードし、名前をつける。
('ice_cream3.txt', <httplib.HTTPMessage instance at 0x10f19ca70>)
# ダウンロードしたデータから、列ごとに数字を読み込んでリストに格納する。
# 相関係数を求める
0.3019115780164577
# 回帰直線の式
y = ax + b; (a, b) = (8.1, 118.6)
# 回帰直線を描くための準備
# 散布図と回帰直線を描く。
__課題5.3__:去年の夏(最低気温込み)のデータを用い、最高気温の影響を取り除いた、最低気温と客数の偏相関係数を求めてください。
# a の影響を除いた、b と y の偏相関係数 partial correlation coefficient を求める関数
def partial_correlation(a, b, y):
# 偏相関係数を求める
-0.895600384086399
__課題5.4__:去年の夏(最低気温込み)のデータを用い、最低気温の影響を取り除いた、最高気温と客数の偏相関係数を求めてください。
# 偏相関係数を求める
0.9732414179952071
__課題5.6__:入学試験の点数と学業成績(高校の平均評定込み)のデータを用い、以下の問いに答えてください。
# ウェブ上のリソースを指定する
# 指定したURLからリソースをダウンロードし、名前をつける。
('entrance_exam2.txt', <httplib.HTTPMessage instance at 0x10f184248>)
# ダウンロードしたデータから、列ごとに数字を読み込んでリストに格納する。
# 高校の平均評点(10点満点)と入学試験の点数の相関係数
0.6908644748080228
# 高校の平均評点(10点満点)と入学後の学業成績(GPA:4点満点)の相関係数
0.607225119617223
# 入学試験の点数と入学後の学業成績(GPA:4点満点)の相関係数
0.7617976726140626
#高校の平均評定の影響を取り除いたときの、入学試験の点数と入学後の学業成績の偏相関係数
0.5958704629308409
#入学試験の点数と入学後の学業成績の偏相関係数について、考えられる解釈
__課題6.1__:去年の夏(最低気温込み)のデータを用いて以下の問いに答えてください。
# ダウンロードしたデータから、列ごとに数字を読み込んでリストに格納する。
# a の影響を除いた、b と y の偏回帰係数 partial regression coefficient を求める関数
def partial_regression(a, b, y):
# 偏回帰係数を求める
-16.703141150412772
# a の影響を除いた、b と y の標準偏回帰係数 standard partial regression coefficient を求める関数
def standard_partial_regression(a, b, y):
# 標準偏回帰係数を求める
-0.6225767534015739
本文を読んで概念を学んでください。
__課題6.3__:去年の夏(最低気温込み)のデータを用い、「客数の予測値 = 定数m + 定数p × 最高気温 + 定数q × 最低気温」という重回帰モデルを考えたときの、定数m, p, qを求めてください。
# 定数p = 客数と最高気温の偏回帰係数
25.956775622524997
# 定数q = 客数と最低気温の偏回帰係数
-16.703141150412772
# 定数m = 客数の平均 - p×最高気温の平均 - q×最低気温の平均
-90.64045237935426
__課題6.4__:去年の夏(最低気温込み)のデータを用い、「客数の予測値 = 定数m + 定数p × 最高気温 + 定数q × 最低気温」という重回帰モデルを考えたときの、重回帰モデルによる予測値と実際の客数との相関係数を求めてください。
# 予測値を求める
fitted_y = []
# 予測値と実際の客数との相関係数を求める
0.9757108760038424
実測値と重回帰モデルによる予測値の相関係数を「重相関係数」(Multiple correlation coefficient)と呼ぶ。
__課題6.5__:去年の夏(最低気温込み)のデータを用い、最高気温と最低気温から客数を予測する場合の重相関係数を求めてください。
# a と b から y を予測する場合の重相関係数を求める関数
def multiple_correlation(a, b, y):
# 最高気温と最低気温から客数を予測する場合の重相関係数を求める
0.9757108760038422
__課題6.6__:入学試験の点数と学業成績(高校の平均評定込み)のデータを用いて、以下の問いに答えてください。
# ダウンロードしたデータから、列ごとに数字を読み込んでリストに格納する。
# 定数p = 入学後の学業成績と入学試験の点数の偏回帰係数
0.006934890958833941
# 定数q = 入学後の学業成績と高校の平均評定の偏回帰係数
0.12812099330335897
# 定数m = 入学後の学業成績の平均 - p×入学試験の点数の平均 - q×高校の平均評定の平均
-2.0941113349445843
# 高校の平均評点と入学試験の点数の2つの変数を使って入学後の学業成績を予測する場合の重相関係数
0.7699771459141179
# 入学試験と学業成績の相関係数
0.7617976726140626
# 入学試験と学業成績の相関係数と、重相関係数とを比較して、どのようなことが言えるか
__今日の課題提出__:計算結果を.ipynb ファイル(または.jsonファイル)として保存し、指定したアドレスまでメールしてください。メールタイトルは「__アイスクリーム統計学456__」とし、メール本文に学籍番号と氏名を明記のこと。また、感想も書いてくれると喜びます。今後の講義の改善につながるかも知れません。