NumPy、SciPy、Matplotlib,Python下机器学习三大利器。上一篇讲了NumPy基础操作,这节讲讲SciPy和Matplotlib。目前接触到的东西不多,以后再遇到些比较常用的再更新。

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()

[笔记]SciPy、Matplotlib基础操作的更多相关文章

  1. (2.2)学习笔记之mysql基础操作(登录及账户权限设置)

    本系列学习笔记主要讲如下几个方面: 本文笔记[三:mysql登录][四:账户权限设置][五:mysql数据库安全配置] 三.mysql登录 常用登录方式如下: 四.账户权限设置 (4.1)查看用户表, ...

  2. (2.3)学习笔记之mysql基础操作(表/库操作)

    本系列学习笔记主要讲如下几个方面: 本文笔记[六:表操作--线上可以直接删除表吗?] 附加:库操作 [1]创建制定字符集的数据库 需求描述: 在创建DB的时候指定字符集. 操作过程: 1.使用crea ...

  3. Git 学习笔记--1.Git基础操作

    取得项目的Git仓库 有两种方式取得Git项目仓库.第一种是在现存的目录下,通过导入所有文件来创建新的Git仓库.第二种是从已有的Git仓库克隆出一个新的镜像仓库. 在工作目录中初始化新仓库  要对现 ...

  4. 11-numpy笔记-莫烦基础操作1

    代码 import numpy as np array = np.array([[1,2,5],[3,4,6]]) print('-1-') print('数组维度', array.ndim) pri ...

  5. Java基础复习笔记系列 七 IO操作

    Java基础复习笔记系列之 IO操作 我们说的出入,都是站在程序的角度来说的.FileInputStream是读入数据.?????? 1.流是什么东西? 这章的理解的关键是:形象思维.一个管道插入了一 ...

  6. 笔记-flask基础操作

    笔记-flask基础操作 1.      前言 本文为flask基础学习及操作笔记,主要内容为flask基础操作及相关代码. 2.      开发环境配置 2.1.    编译环境准备 安装相关Lib ...

  7. 笔记-mysql-管理及基础操作

    笔记-mysql使用-管理及基础操作 1.      简介 mysql是一个免费的关系型数据库,不过好像被oracle收购了.... 希望它继续免费. 1.1.    相关术语 数据库,表,列,行,冗 ...

  8. 小白学 Python 数据分析(17):Matplotlib(二)基础操作

    人生苦短,我用 Python 前文传送门: 小白学 Python 数据分析(1):数据分析基础 小白学 Python 数据分析(2):Pandas (一)概述 小白学 Python 数据分析(3):P ...

  9. disruptor笔记之三:环形队列的基础操作(不用Disruptor类)

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

随机推荐

  1. rgba()和opacity的使用

    rgba()表示 红 绿 蓝 alpha ,W3C指在原有的rgb颜色模型之后增加了 “alpha”参数,“可以让制定的颜色透明化”(rgb()上扩展的,其只可以设置颜色,而不能使设置的颜色透明化) ...

  2. Linux中的grep命令

    grep - print lines matching a pattern 参数: -a 将binary文件以text文件的方式查找 -i 忽略大小写 --color=zuto 加颜色匹配字符串 -v ...

  3. 这是对position讲解最通俗易懂的版本了。

    position 为了制作更多复杂的布局,我们需要讨论下 position 属性.它有一大堆的值,名字还都特抽象,别提有多难记了.让我们先一个个的过一遍,不过你最好还是把这页放到书签里. static ...

  4. python文件读写出现乱码总结

    1.错误的打开方式 #coding=utf-8f = open("test.txt",'w+')f.write('Mars is slim,isn\'he? \n 火星教')pri ...

  5. Tcl与Design Compiler (六)——基本的时序路径约束

    本文属于原创手打(有参考文献),如果有错,欢迎留言更正:此外,转载请标明出处 http://www.cnblogs.com/IClearner/  ,作者:IC_learner 时序约束可以很复杂,这 ...

  6. bash变量

    bash中的变量的种类 根据变量的生效范围等标准 本地变量:生效范围为当前shell进程:对当前shell之外的其它shell进程,包括当前shell的子shell进程均无效: 环境变量:生效范围为当 ...

  7. Android安全开发之启动私有组件漏洞浅谈

    0x00 私有组件浅谈 android应用中,如果某个组件对外导出,那么这个组件就是一个攻击面.很有可能就存在很多问题,因为攻击者可以以各种方式对该组件进行测试攻击.但是开发者不一定所有的安全问题都能 ...

  8. 构造器和多态(Chapter8.3)

    构造器不具有多态性(它们是static方法,只不过该static声明是隐式的),但还是非常有必要理解构造器怎样通过多态在复杂的层次结构中运作,这一理解将有助于大家避免一些令人不快的困扰. 在main中 ...

  9. Struts2基础学习(七)—值栈和OGNL

    目录: 一.值栈 二.OGNL表达式 一.值栈(ValueStack) 1.定义      ValueStack贯穿整个Acton的生命周期,每个Action类的对象实例都拥有一个ValueStack ...

  10. Mysql清理二进制日志的技巧

    1:二进制日志 二进制日志记录了所有的DDL(数据定义语言)语句和DML(数据操作语言)语句,但是不记录包括数据查询的语句.语句以"事件"的形式保存,它描述了数据的更改过程,此日志 ...