データ分析学習の進捗【2/13】

前書き

東京大学データサイエンティスト育成講座」を使って勉強を進めます。
melheaven.hatenadiary.jp

東京大学データサイエンティスト育成講座3章

記述統計

記述統計とは、収集したデータの特徴を抽出したり、可視化したりする事です。記述統計により分析を行う際に、よりデータに対する理解度を向上させる手助けにもなります。今回は記述統計に値をまとめました。以下の統計指標を一つずつ紹介していきます。また、各統計指標にどのような利点が存在するのかをまとめてみました。

  • 分散 → データがどの程度平均値の周りにばらついているか。
  • 標準偏差 → 分散を平方根で除す事で、単位が揃う為、和差算を行える。
  • 変動係数 → 標準偏差を平均値で除した値。スケールに依存せず、ばらつきを評価できる。
  • 共分散 → 2つの変数の関係性を数値化。単位やスケールの影響を受けるので、単純比較はできない。
  • 相関係数 → 共分散をxとyの各標準偏差で除した値。スケールに依存せず、2変数の関係性を評価できる。
  • 相関行列 → 対角行列。多変量解析において有用である。

相関性があるからといって、因果関係があるというわけではありません。
melheaven.hatenadiary.jp

print('平均値: {:.3f}'.format(student_data_math['absences'].mean()))
print('最大値: {}'.format(student_data_math['absences'].max()))
print('最小値: {}'.format(student_data_math['absences'].min()))
print('分散: {:.3f}'.format(student_data_math['absences'].var(ddof=0)))
print('標準偏差: {:.3f}'.format(student_data_math['absences'].std(ddof=0)))
print('変動係数: {:.3f}'.format(student_data_math['absences'].std()/student_data_math['absences'].mean()))

print('G1の分散: {:.3f}'.format(student_data_math['G1'].std()))
print('G3の分散: {:.3f}'.format(student_data_math['G3'].std()))
print('共分散: {}'.format(np.cov(student_data_math['G1'], student_data_math['G3'])))
print('相関係数: {:.3f}'.format(sp.stats.pearsonr(student_data_math['G1'], student_data_math['G3'])[0]))
print('相関行列: {}'.format(np.corrcoef([student_data_math['G1'], student_data_math['G3']])))

平均値: 5.709
最大値: 75
最小値: 0
分散: 63.887
標準偏差: 7.993
変動係数: 1.402
G1の分散: 3.319
G3の分散: 4.581
共分散: [[11.017 12.188]
 [12.188 20.99 ]]
相関係数: 0.801
相関行列: [[1.    0.801]
 [0.801 1.   ]]

回帰分析

今回は単回帰分析を行いました。
単回帰分析では、目的変数Yと説明変数Xの関係性が1:1となっています。単回帰分析では、目的変数Yと説明変数Xの関係が一次関数(Y=aX+b)の形になります。aは回帰係数、bは切片です。データとして目的変数Yと説明変数Xが与えられる中で、最も好都合な回帰係数aと切片bを探していきます。Sklearnのアルゴリズムでは最小二乗法を用いて、計算していきます。

mathtrain.jp

最初説明変数の抽出で「data.loc[:, ['X']].values」と書いていることに戸惑いました。
scikit-learnで行列計算しているから、説明変数では上記のような書き方となっているのでしょうか。

pythondatascience.plavox.info

from sklearn import linear_model

X = data.loc[:, ['X']].values
Y = data['Y'].values

reg = linear_model.LinearRegression()
reg.fit(X,Y)
print("回帰分析 : ", reg.coef_)
print("切片: ", reg.intercept_)
print("決定係数: ", reg.score(X,Y))

plt.scatter(X,Y)
plt.xlabel('X')
plt.ylabel('Y')

plt.plot(X, reg.predict(X))
plt.grid(True)
f:id:electric-city:20210216231439p:plain:w300:h200
回帰分析結果

最後に決定係数を出力しています。決定係数は回帰式がどの程度うまく推測できているのかを客観的に示す指標です。基本的には0~1の値をとります。

bellcurve.jp