前回の記事では、Matplotlibでsubplotsを利用してグラフを描いてみました。
今回はnumpyのpolynomialを利用して線形回帰分析を行おうと思います。
1. 線形回帰分析とは?
ウィキペディアを見てみると線形回帰分析を以下のように説明しています。
統計学で線形回帰は、従属変数yと1つ以上の独立変数Xとの線形相関関係をモデル化する回帰分析手法です。
-ウィキペディア-
本当に簡単に言えば、グラフに表示される値が持つ平均的な傾きとも言えます。
線形回帰をグラフに表示すると、目に見えにくい2つの値の相関関係をより確実に示すことができます。

上記のグラフはkaggleからダウンロードした資料を視覚化したものです。
親の学歴、人種、学生の達成度が含まれており、その中で数学と読解力のスコアの関係を図式化しました。
ファイルは以下のリンクからダウンロードするか、リンクから入手できます。以下のファイルは日本語化されているので、好きな方を選んでください。
2. グラフを描く
まず上記のグラフのように学生の数学、読解力スコアを散布図でグラフに描いてみましょう。
以前のレクチャーで見たコードと同じように始め、ロードするファイルのパスだけを変更すればよいです。
import pandas as pd
# モジュール呼び出しと日本語フォント設定
import matplotlib.pyplot as plt
import matplotlib
# MacOSでのフォント設定
# matplotlib.rcParams["font.family"] = "AppleGothic"
# Windowsでのフォント設定
matplotlib.rcParams["font.family"] = "Malgun Gothic"
# フォントサイズ設定
matplotlib.rcParams["font.size"] = 13
# マイナス表示問題解決
plt.rcParams['axes.unicode_minus'] = False
score = pd.read_excel("./StudentsPerformance.xlsx")
score.head(3)
これを利用して数学スコア、読解力スコアをplt.scatterのパラメータに入れます。
plt.scatter(score["수학점수"], score["읽기점수"])
グラフが美しくないので少し装飾してみました。
グラフの色、透明度、 各軸のラベルを入れました。
plt.scatter(score["수학점수"], score["읽기점수"], alpha=0.4, color="green")
plt.xlabel("수학점수")
plt.ylabel("읽기점수")
基本的なグラフが完成したら、numpyを活用して線形回帰分析をしてみましょう。
3. Polynomial
numpyのpolymomialを呼び出し、分析したいx値、y値、何次関数かをパラメータとして入力しましょう。
私たちは数学スコア、読解力スコアを1次関数で線形回帰分析をしてみましょう。
from numpy.polynomial import Polynomial
f = Polynomial.fit(score["수학점수"], score["읽기점수"], 1)このように入力するとpolynomialは予測した線形関数を返します。
したがってfはx値をパラメータとして受け取る関数になります。
以下のように入力して予測値を確認しましょう。
from numpy.polynomial import Polynomial
f = Polynomial.fit(score["수학점수"], score["읽기점수"], 1)
f(40)
数学スコアが40点の学生の読解スコア予測値は40になります。
では、グラフを描いてみましょう。
4. 線形回帰グラフ
資料の中で学生の数学スコアと読解スコアは0から100までの整列された値ではありません。
だからfにパラメータとして数学スコアを入れると、次元が高くなるごとにグラフが混乱します。


まず0から100までの数字を生成し、これを線形関数のx値としてグラフを描く必要があります。
numpyのlinspaceは開始点、終了点、挿入する数字の数をパラメータとして受け取り、値を生成します。
import numpy as np
x = np.linspace(0,100,200)
plt.plot(x,f(x))xの値を確認してみると左のように生成されたことがわかります。
そしてこれでグラフを描くと以下のようになります。


5. グラフ完成
あとは2つのグラフを重ねるだけです。
plt.scatter(score["수학점수"], score["읽기점수"], alpha=0.4, color="green")
plt.xlabel("수학점수")
plt.ylabel("읽기점수")
plt.plot(x, f(x),"r--")
6. 終わりに
今回の記事では、線形回帰分析を通じて2つの値がどのような関係を持つのかをグラフで描いてみました。
次回の記事では、データ視覚化を利用して高校生活記録簿をどう埋めていくかを考えてみようと思います。
댓글을 불러오는 중...