本文全部来自我(小麦)的《大数据公选》课程讲义,包括三篇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横坐标更加密集,这样你就可以绘出更好看的图像。
到此便告一段落,少侠可以踏上难度更高的旅途了!