处理完的数据我们就可以把它展现出来。但是如果手头没有直接拿来就能使用的结果,我们可以先用随机数模拟一点。
import numpy
# 生成范围在 0.0 到 5.0 之间的随机浮点数10个
x = numpy.random.uniform(0.0, 5.0, 10)
print(x)
# [4.71911758 3.51758145 4.00144059 4.04035762 4.99214707 2.53268937 1.06186187 1.70871858 4.73407898 4.69061557]
# 生成平均值为 5.0,标准差为 1.0 的正态分布值10个
y = numpy.random.normal(5.0, 1.0, 10)
print(y)
# [5.21703555 5.47035968 6.5951709 5.72315995 4.84156537 6.46406312 5.64666414 5.10236542 4.71906989 2.24136699]
既然每次都是随机生成的,上面打印出来的结果也没啥意思。但,我们就拿它作图吧。
Matplotlib
是数据可视化最常用的模块之一。而对于要交互的图表来说,pyecharts
绝对是个好东西。在这里我们只介绍Matplotlib
的用法,想要了解pyecharts
的使用可以查看相关文档。
import matplotlib.pyplot as plt
# 直方图 5 栏
plt.hist(x, 5)
plt.show()
# 结果1
# 散点图
plt.scatter(x, y)
plt.show()
# 结果2
# 折线图
plt.plot(x, y)
plt.show()
# 结果3
这个结果我就不截图了,你自己运行一下就知道了。我们看到图之后就可以根据自己的理解添加一些辅助线,比如趋势线。
回归就是利用现有数据进行建模,然后预测。主要研究的是变量之间的定量关系。
import matplotlib.pyplot as plt
from scipy import stats
x = [5,7,8,7,2,17,2,9,4,11,12,9,6]
y = [99,86,87,88,111,86,103,87,94,78,77,85,86]
# stats的linregress()方法根据传入的x,y列表,返回线性回归的一些重要键值
# slope/斜率 intercept/截距 r/相关性 p/显著性 std_err/标准错误值
slope, intercept, r, p, std_err = stats.linregress(x, y)
# 通过斜率和截距构建线性公式
def mymodel(x):
return slope * x + intercept
# 函数map(mymodel, x)将mymodel运用于x列表的每个元素,并返回一个Map对象。
some_map = map(mymodel, x)
print(some_map)
# <map object at 0x174FE8F8>
line_y = list(some_map)
print(line_y)
# [94.3495217071376, 90.84694628403237, 89.09565857247976, 90.84694628403237, 99.60338484179543, 73.33406916850626, 99.60338484179543, 87.34437086092716, 96.1008094186902, 83.84179543782193, 82.09050772626932, 87.34437086092716, 92.59823399558499]
# 这是跟x = [5,7,8,7,2,17,2,9,4,11,12,9,6]一一对应的y值。
line_x = x
plt.scatter(x, y)
plt.plot(line_x, line_y)
plt.show()
# 线性回归的拟合度
print(r)
# -0.7585915243761551
# 一般我们认为r**2接近1拟合比较好
print(r**2)
# 0.5754611008553386
# 线性回归利用构建的线性公式mymodel()进行预测
speed = mymodel(10)
print(speed)
# 85.59308314937454
import numpy
import matplotlib.pyplot as plt
x = [1,2,3,5,6,7,8,9,10,12,13,14,15,16,18,19,21,22]
y = [100,90,80,60,60,55,60,65,70,70,75,76,78,79,90,99,99,100]
# numpy的polyfit()方法可以返回一个包含每项次数的数组,多项式的次数为3
some_array = numpy.polyfit(x, y, 3)
print(some_array)
# [-3.03208795e-02 1.34333191e+00 -1.55383039e+01 1.13768037e+02]
# numpy的polyfit()方法可以根据传入的数组返回一个公式,如poly1d([1, 2, 3])=>1*x**2+2*x+3
mymodel = numpy.poly1d(some_array)
print(mymodel)
# 3 2
# -0.03032 x + 1.343 x - 15.54 x + 113.8
# 即-0.03032 x**3 + 1.343 x**2 - 15.54 x + 113.8
# 生成范围在 1 到 22 之间均分的100个点,点多一点线会平滑一点
line_x = numpy.linspace(1, 22, 100)
line_y = mymodel(line_x)
plt.scatter(x, y)
plt.plot(line_x, line_y)
plt.show()
# 多项式回归的拟合度
# 我们利用机器学习```scikit-learn```库中```metrics```模块的```r2_score()```方法对回归模型进行评估。
from sklearn.metrics import r2_score
# r2_score(真实的y值, 真实的x值根据模型获得的理论y值)
r2 = r2_score(y, mymodel(x))
print(r2)
# 0.9432150416451026
# 多项式回归利用polyfit()方法返回的模型进行预测
speed = mymodel(17)
print(speed)
# 88.87331269698005
好了。差不多了。你应该全都学会了吧。