[笔记]SciPy、Matplotlib基础操作
2017-02-02 20:45
393 查看
NumPy、SciPy、Matplotlib,Python下机器学习三大利器。上一篇讲了NumPy基础操作,这节讲讲SciPy和Matplotlib。目前接触到的东西不多,以后再遇到些比较常用的再更新。
scipy是基于numpy的扩充,所以安装时要先安装numpy再安装scipy。scipy的命名空间包含numpy,所以只需import scipy即可,numpy不用import。(所以以下有些东西可能是numpy里的我没分清楚,反正一并写了吧。)
首先从文件导入数据,使用genfromtxt函数。文件是《Python语言构建机器学习系统(第二版)》里提供的数据:web_traffic.tsv。读取后把x与y分开。而且里面有几个nan数据,得事先踢掉:
然后我们想可视化这些数据,以图表给出,那就用到matplotlib了:
最后
然后我们用二次函数作为模型,并使得函数最好的适应数据。
polyfit函数直接帮我们找到了这个使得方差最小的直线的参数,参数存在f1p里面。里面那个参数2就代表产生二次函数,3代笔3次函数,50就是50次函数。我们print fp,得到:
full=True使得这个函数返回更多的东西,返回一些额外的后台信息,比如误差(error),就存在那个residuals里:
poly1d将参数转换成可识别的函数格式,可以把它当做普通python的函数用。注意是poly“1”d,是1不是l。不知道有没有poly2d。
linspace函数产生一次函数从x=0到x=x[-1]区间内的函数的值,作为一维矩阵存储。1000那个数字代表产生几个值,数字越大产生的值越多。当然对于一次函数,值为2其实就够了。
值为1000时:
值为5时:
就只计算了5个值,明显弧度不行了。
然后以下plot函数就是把得到的二次函数放到figure上的。legend产生左上角那个d=2标示。
同理可得其他次数的最佳适应的函数。以下写了个小小的成品,计算了一次、二次、五十三次函数:
scipy是基于numpy的扩充,所以安装时要先安装numpy再安装scipy。scipy的命名空间包含numpy,所以只需import scipy即可,numpy不用import。(所以以下有些东西可能是numpy里的我没分清楚,反正一并写了吧。)
import scipy as sp import matplotlib.pyplot as plt
首先从文件导入数据,使用genfromtxt函数。文件是《Python语言构建机器学习系统(第二版)》里提供的数据:web_traffic.tsv。读取后把x与y分开。而且里面有几个nan数据,得事先踢掉:
data = sp.genfromtxt("web_traffic.tsv",delimiter="\t") x = data[:,0] y = data[:,1] x = x[~sp.isnan(y)] y = y[~sp.isnan(y)]
然后我们想可视化这些数据,以图表给出,那就用到matplotlib了:
plt.scatter(x, y, s=6) # 在图标上产生散点,s代表绘制的点的粗细 plt.title("Web traffic") # 标题 plt.xlabel("Time") # x轴标签 plt.ylabel("Hits/hour") # y轴标签 plt.xticks([w*7*24 for w in range(10)], ["week %i" % w for w in range(10)]) # 更改x轴的默认刻度显示,以一星期为一个刻度,range中数字10表示x刻度最多显示到第10周 plt.autoscale(tight=True) plt.grid(True,linestyle='-',color='0.75')
最后
plt.show()以显示窗口。
然后我们用二次函数作为模型,并使得函数最好的适应数据。
fp,residuals,rank,sv,rcond = sp.polyfit(x,y,2,full=True)
polyfit函数直接帮我们找到了这个使得方差最小的直线的参数,参数存在f1p里面。里面那个参数2就代表产生二次函数,3代笔3次函数,50就是50次函数。我们print fp,得到:
[ 1.05322215e-02 -5.26545650e+00 1.97476082e+03]
full=True使得这个函数返回更多的东西,返回一些额外的后台信息,比如误差(error),就存在那个residuals里:
[ 1.79983508e+08]
poly1d将参数转换成可识别的函数格式,可以把它当做普通python的函数用。注意是poly“1”d,是1不是l。不知道有没有poly2d。
f = sp.poly1d(fp)
linspace函数产生一次函数从x=0到x=x[-1]区间内的函数的值,作为一维矩阵存储。1000那个数字代表产生几个值,数字越大产生的值越多。当然对于一次函数,值为2其实就够了。
fx = sp.linspace(0,x[-1],1000)
值为1000时:
值为5时:
就只计算了5个值,明显弧度不行了。
然后以下plot函数就是把得到的二次函数放到figure上的。legend产生左上角那个d=2标示。
plt.plot(fx,f(fx),linewidth=2) plt.legend(["d=%i" % f.order],loc="upper left")
同理可得其他次数的最佳适应的函数。以下写了个小小的成品,计算了一次、二次、五十三次函数:
import scipy as sp import matplotlib.pyplot as plt
data = sp.genfromtxt("web_traffic.tsv",delimiter="\t") x = data[:,0] y = data[:,1] x = x[~sp.isnan(y)] y = y[~sp.isnan(y)]
plt.scatter(x, y, s=6)
plt.title("Web traffic")
plt.xlabel("Time")
plt.ylabel("Hits/hour")
plt.xticks([w*7*24 for w in range(10)],
["week %i" % w for w in range(10)])
plt.autoscale(tight=True)
plt.grid(True,linestyle='-',color='0.75')
f1p,residuals,rank,sv,rcond = sp.polyfit(x,y,1,full=True)
f1 = sp.poly1d(f1p)
f1x = sp.linspace(0,x[-1],1000)
plt.plot(f1x,f1(f1x),linewidth=2)
plt.legend(["d=%i" % f1.order],loc="upper left")
f2p = sp.polyfit(x,y,2)
f2 = sp.poly1d(f2p)
f2x = sp.linspace(0,x[-1],1000)
plt.plot(f2x,f2(f2x),linewidth=2)
plt.legend(["d=%i" % f2.order],loc="upper left")
f3p = sp.polyfit(x,y,53)
f3 = sp.poly1d(f3p)
f3x = sp.linspace(0,x[-1],1000)
plt.plot(f3x,f3(f3x),linewidth=2)
plt.legend(["d=%i" % f3.order],loc="upper left")
plt.show()
相关文章推荐
- Python笔记——Python基础、numpy基础、SciPy、Matplotlib
- windows64位Python3.5.2基础上,安装numpy、matplotlib、scipy(whl文件)安装tensorflow及sklearn包
- Python笔记-NumPy,SciPy,IPython,Matplotlib
- Python-学习笔记(三)——开发环境搭建(numpy,scipy,matplotlib)
- Python学习笔记:Matplotlib绘图基础
- matplotlib绘图基础--笔记
- 笔记-Python库-matplotlib, numpy, scipy, pandas
- Matplotlib 入门(一):基础操作
- PyQt5+OpenCV+Matplotlib 基础操作教程代码
- numpy、scipy、matplotlib基础介绍
- Python中numpy,scipy,matplotlib,opencv的配置过程
- 【python】python path,macports,easy-install,numpy,scipy,ipython,matplotlib,集成工具
- Python中安装numpy,scipy,matplotlib安装方法
- numpy,scipy,matplotlib配置教程
- centos6.4 下安装numpy、scipy、matplotlib
- Ubuntu-Python2.7安装 scipy,numpy,matplotlib
- 动手实践:在Windows上安装NumPy、Matplotlib、SciPy和IPython
- Ubuntu-Python2.7安装 scipy,numpy,matplotlib
- centos6.3搭建numpy,scipy,matplotlib,OpenCV,mlpy的实录
- matplotlib画图基础,华氏温度到摄氏温度的转换