第2回の練習問題¶
"../DATA01/IEDA2_04_lc.csv"には2つの異なる学校の生徒が同じテストを3年間継続して受験した結果が保存されています。学校は"School"というコラムで示されています(AあるいはB)。成長曲線モデルを用いてこれらのデータをグラフで表し、それぞれの学校の傾きの平均値、傾きと切片の相関係数を求めなさい。
In [6]:
# 使用するパッケージ
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
import numpy as np
In [7]:
# データの読み込み
data = pd.read_csv("../DATA01/IEDA2_04_lc.csv",index_col=0)
In [9]:
# 欠損値の有無を確認
data.isnull().sum()
Out[9]:
First_year 1 Second_year 5 Third_year 16 School 0 dtype: int64
In [10]:
# 欠測値の削除
data = data.dropna()
In [11]:
# 学校情報を除いてデータを学校ごとに分割
A = data[data["School"]=="A"].drop("School",axis=1)
B = data[data["School"]=="B"].drop("School",axis=1)
# 値のみを取り出す
A_values = A.values
B_values = B.values
In [12]:
# School Aの成長曲線の描画
C_A = []
I_A = []
X = [1,2,3]
x = np.arange(1,3,0.01)
plt.xticks([1,2,3])
for i in A_values:
a,b = np.polyfit(X,i,1)
C_A.append(a)
I_A.append(b)
y = a*x+b
plt.plot(x,y,c="grey")
In [13]:
# School Bの成長曲線の描画
C_B = []
I_B = []
X = [1,2,3]
x = np.arange(1,3,0.01)
plt.xticks([1,2,3])
for i in B_values:
a,b = np.polyfit(X,i,1)
C_B.append(a)
I_B.append(b)
y = a*x+b
plt.plot(x,y,c="grey")
In [14]:
# School Aの傾きの平均値
np.mean(C_A)
Out[14]:
np.float64(14.357500000000014)
In [15]:
# School Aの傾きの標準偏差
np.std(C_A)
Out[15]:
np.float64(14.267741368205405)
In [16]:
# School Bの傾きの平均値
np.mean(C_B)
Out[16]:
np.float64(12.112903225806468)
In [17]:
# School Bの傾きの標準偏差
np.std(C_B)
Out[17]:
np.float64(27.392755599121724)
In [18]:
# School Aの傾きと切片の相関係数
np.corrcoef(C_A,I_A)
Out[18]:
array([[ 1. , -0.80439896], [-0.80439896, 1. ]])
In [19]:
# School Bの傾きと切片の相関係数
np.corrcoef(C_B,I_B)
Out[19]:
array([[ 1. , -0.93079477], [-0.93079477, 1. ]])