您的位置:首页 > 编程语言 > Python开发

[python之数据分析] 基础篇1- Numpy,Scipy,Matplotlib 快速入门攻略

2016-04-10 12:28 941 查看
本文全部来自我(小麦)的《大数据公选》课程讲义,包括三篇python和Numpy等数据分析包的相关教程,excel和SPSS的数据分析教程等等,作者是小麦以及懿文同学,是原创资料。本来是课程内部资料,现在开源出来,仅供大家学习。如要转载,请联系我,并尊重版权。

Python Data Analysis Fundamental Turtorial

Python 基本语法和数据结构

已在另一篇文章介绍

参见我的博文 http://blog.csdn.net/xiaomai_sysu/article/details/51103070

Python的模块——Module

与C/C++的头文件(.h)类似,一个python程序可以显式调用其他模块的函数/类。

目的:

1. 避免臃肿的客户程序,让使用者按需调用模块;

2. 模块化思维,使得模块之间高内聚、低耦合

方法:

文件开始处,使用import语句

例如:

导入整个模块的所有内容:

import MyModule

导入一个模块的某一个函数:

import MyModule.MyFunction

导入一个模块的某一个类:

import MyModule.MyClass

导入以后,就可以使用在其他文件里定义的函数

比如,可以这样直接使用Mymodule.py的文件里的函数MyFunction:

MyModule.MyFunction

当然,除了import语句外,你也可以使用from..import..语句

from MyModule import MyFunction

这种用法比起上面的用法更简便,因为你把命名空间设置成了MyModule

以后再调用这个MyFunction时,只需要直接用MyFunction即可,而不需要用MyModule.MyFunction

python科学数据包Anaconda2

Anaconda2是一键安装式的,内部已经先安装好了包括NumPy, SciPy, Matplotlib等数值计算的包,也包括其他网络扩展包

如果你之前没有使用和安装过python,那么强烈建议你到

https://www.continuum.io/downloads

在Windows版本下,选择32位/64位的python2.7进行下载。下载后双击安装即可,非常简单。

安装后,进入安装目录

Anaconda2\ Scripts\

单击ipython.exe,就可以进入python的命令行模式

(你可以右键-发送快捷方式到桌面,方便以后的运行)

交互式命令行窗口ipython

Ipython是交互式的命令行。

它比默认的python shell 好用得多,支持变量自动补全,自动缩进,支持 bash shell 命令,内置了许多很有用的功能和函数。



最前面有输入提示,In[1]: 表示现在是第一行输入

使用Ipython的最大好处在于,可以用交互式的命令,快速实现一个idea,并进行验证。

高度优化的多维数组的支持Numpy

Numpy一大用途在于,提高数值运算的速度。由于python是动态解释的,所以往往它内置的函数的运行效率并不高。特别是遇到大量迭代/循环的时候,原生的python语言速度往往不尽人意。

于是,NumPy应运而生,它的底层采用的是C语言实现,保证了语句执行的高效性。

NumPy中最基本的数据结构是narray(数组)。正如上面所言,原生的python是没有这个数据结构的,你必须从NumPy这个模块中导入。(import numpy as np)

示例如下:



我们看到,第二行这里的a被赋值成一个numpy的array类型

第三行,输出a的类型 :print type(a)

然后,在第四行,输出a :print a

显示a 是[1 2 3]

如果我们要输出a的第一个元素,可以:



如果我们要改变a的第一个元素,可以输入a[0]=2333



此时a已经被改变,再次输出a,可以看到



同样的方法,我们可以创建另外一个数组b=np.array([1,1,1])



输出C,发现C就是a+b的数值

类似的运算符还有

a+b a-b a*b(这里的是按位乘法,相当于matlab的.)

正如之前提到的,NumPy的速度比原来的Python循环要快得多得多,可以做实验测试

与Matlab不同,Numpy一般不用“矩阵”,而是用多维数组表示矩阵

比如



(注意中括号是嵌套的)

就是一个二维数组,也就是一个矩阵

1 2 3

4 5 6

7 8 9

可以输出看一下效果:



如果你学过线性代数,那么你知道,对于矩阵,可以有矩阵乘法:

假如现在有上面的矩阵d,以及另外一个矩阵e:



那么,可以用下面的方法计算d和e的矩阵乘法:



或者你也可以这样:(这是等价的方法)



但是,你不应该使用d*e,因为d*e是按位乘法,是每个位置对应的乘积

【获取narray片段】

你可以使用下标,比如对于d



你可以使用d[0]获取矩阵(二维数组)的第一行



你也可以用d[0:2]获取矩阵的第一和第二行组成的新矩阵



用d[3]或者d[-1]获取矩阵的最后一行



除了手动创建一个新的数组(多维数组),你也可以用内置函数快速创建:



比如,用np.arange(x)创建从0~x-1的数组



用np.linspace(start,end,jump)来创建一个起于0,终于5,大小为10的线性的数组空间



用np.eye(x)来创建一个大小为x的单位矩阵



可以用np.zeros( (x,y) ) 来创建一个大小为x*y的零矩阵



注意这里是两个括号,里面的(3,5)是一个tuple元组,外面的是调用函数本身需要的括号



你可能注意到,上面的0和1都带个小数点,这是因为它默认是float类型,而不是整数类型,你可以手动设置类型。

注意:以上都只是演示显示,并没有把d[0]这个取出的数组赋值给某个变量,所以是没有保存的。在实际过程中应该保存到某个变量中,如new_array=d[-1]

数值分析方法库Scipy

有了np.array数组,你可以用SciPy提供的大量数值计算的函数方法。

它们全依赖numpy,但是每个之间基本独立。导入Numpy和这些scipy模块的标准方式是:

import numpy as np

from scipy import stats # 其它子模块相同

主scipy命名空间大多包含真正的numpy函数(尝试 scipy.cos 就是 np.cos)。这些仅仅是由于历史原因,通常没有理由在你的代码中使用import scipy

每个函数的使用方法不同,但是都可以很简单地调用和练习,效率也很高

http://reverland.org/python/2012/10/22/scipy/

有所有函数的使用方法实例,可以参考



图形绘制库 Matplotlib

与提供数组的NumPy,提供数值计算函数的Scipy不同,Matplotlib模块是用于绘图的一个模块。

当然,Matplotlib的绘图,依然依赖于NumPy的narray数据结构。

Matplotlib简单绘图事例:

第一步先导入模块



第二步,生成0~5 之间的自变量空间,间隔一共10次



第三部,生成因变量空间 只需令Y=f(x) 即可,例如y=3*x+8



最后,用plt.plot(x,y)即可绘图



这时,图片还在内存中,没有生成,你可以加上横坐标、纵坐标的名字和标题,输入

plt.xlabel('x axis label')
plt.ylabel('y axis label')
plt.title('Function y=3x+8')


其他部分都加入后,输入plt.show(),显示图片



得到下面的图片:(包括了横纵轴的名字、标题)



你也可以再次赋值y1,y2



然后,再次绘图



加上横纵坐标:



最后,输入plt. show ()得到图像:



这里的自变量取值不是非常合适(x范围太小,不够密集)。

你可以重新设计更好的X和Y的取值,并且让图像的X横坐标更加密集,这样你就可以绘出更好看的图像。

到此便告一段落,少侠可以踏上难度更高的旅途了!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息