在上一篇文章中,我们在 Matplotlib 里使用 subplots 画了图。
这次文章中打算利用 numpy 的 polynomial 做线性回归分析。
1. 什么是线性回归分析?
查看维基百科,对线性回归分析有如下说明。
在统计学中,线性回归是一种回归分析方法,用来对因变量 y 与一个或多个自变量 X 之间的线性相关关系进行建模。
-维基百科-
非常简单地说,也可以理解为图上所标示的那些值所具有的平均斜率。
把线性回归显示在图上,可以更清晰地展现原本仅凭肉眼模糊可见的两个值之间的相关关系。

上面的图是可视化了从 kaggle 下载的数据。
其中包含家长受教育程度、种族、学生的成绩等内容,这里对数学–阅读成绩之间的关系进行了图示。
文件可以下载下面附上的,也可以通过链接进入下载。下面的文件已经做了韩文化处理,可以根据自己的需要选择。
2. 画图
先像上面的图那样,用散点图(scatter)画出学生的数学成绩和阅读成绩。
从之前课程中用过的代码完全一样地开始,只需要把读取文件的路径改一下即可。
import pandas as pd
# 모듈 호출 및 한글폰트 설정
import matplotlib.pyplot as plt
import matplotlib
# MacOS에서 폰트설정
# matplotlib.rcParams["font.family"] = "AppleGothic"
# 윈도우에서 폰트설정
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 值以及函数的次数作为参数传入即可。
我们把数学成绩和阅读成绩作为一次函数,做线性回归分析。
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. 完成图形
现在只要把两张图叠加在一起就结束了。
plt.scatter(score["수학점수"], score["읽기점수"], alpha=0.4, color="green")
plt.xlabel("수학점수")
plt.ylabel("읽기점수")
plt.plot(x, f(x),"r--")
6. 小结
这篇文章中,我们通过线性回归分析,用图形展示了两个数值之间具有怎样的关系。
下一篇文章打算思考如何利用数据可视化来填写高中学生综合素质档案。
댓글을 불러오는 중...