基于python的数据分析三剑客

实验一、数据处理之Numpy

一、实验目的

1. 了解numpy库的基本功能

2. 掌握Numpy库的对数组的操作与运算

二、实验工具:

1. Anaconda

2. Numpy

三、Numpy简介

Numpy 的英文全称为 Numerical Python,指Python 面向数值计算的第三方库。Numpy 的特点在于,针对 Python 内建的数组类型做了扩充,支持更高维度的数组和矩阵运算,以及更丰富的数学函数。Numpy 是 Scipy.org 中最重要的库之一,它同时也被 Pandas,Matplotlib 等我们熟知的第三方库作为核心计算库。
NumPy(Numeric Python)提供了许多高级的数值编程工具,如:矩阵数据类型、矢量处理,以及精密的运算库。专为进行严格的数字处理而产生。多为很多大型金融公司使用,以及核心的科学计算组织如:Lawrence Livermore,NASA用其处理一些本来使用C++,Fortran或Matlab等所做的任务。
Numpy包括了:1、一个强大的N维数组对象Array;2、比较成熟的(广播)函数库;3、用于整合C/C++和Fortran代码的工具包;4、实用的线性代数、傅里叶变换和随机数生成函数。Numpy和稀疏矩阵运算包scipy配合使用更加方便。

四、实验内容

1. 数组的创建(创建全0数组,全1数组,随机数数组)

>>>np.zeros((2,3))#全0数组
array([[0.,0.,0.],
[0.,0.,0.])
>>>np.ones((2,3))#全1数组
array([[1,1,1.],
[1.,1.,1.]])
>>>np.random.random((2,3))# 生成[0,1)之间的随机浮点数 
array([[ 0.84731148,  0.8222318 ,  0.85799278],       [ 0.59371558,  0.92330741,  0.04518351]])
 >>> np.random.randint(0,10,(3,2))# 生成[0,10)之间的随机整数 array([[2, 4],[8, 3],[8, 5]])

2. 数组的属性(查看数组的维度,数组元素的个数)

>>> a = np.array([[1,2,3],[4,5,6]]) 
>>> a.shape               # 数组的维度 (2, 3) 
>>> a.size                # 数组元素个数 6

3. 数组的维度操作(将数组的行变列,返回最后一个元素,返回第2到第4个元素,返回逆序的数组)

>>> a = np.array([[1,2,3],[4,5,6]]) 
>>> a.T # 数组行变列,类似于transpose() array([[1, 4],[2, 5],[3, 6]]) 


a = np.arange(9) 
>>> a[-1] # 最后一个元素 8 
>>> a[2:4]# 返回第2到第5个元素 
array([2, 3]) 
>>> a[::-1]# 返回逆序的数组 array([8, 7, 6, 5, 4, 3, 2, 1, 0])

4. 数组的合并(数组的水平合并,垂直合并,深度合并)

>>> a = np.arange(9).reshape(3,3) 
>>> b = np.arange(9,18).reshape(3,3) 
 np.hstack((a,b))# 水平合并 
array([[0,1,2,9,10,11],[3,4,5,12,13,14],[6,7,8,15,16,17]]) 
>>> np.vstack((a,b))# 垂直合并 
array([[0,1,2],[3,4,5],[ 6,7,8],[9,10,11],[12,13,14],[15,16,17]]) 
>>> np.dstack((a,b))# 深度合并 
array([[[0,9],[1,10],[2,11]],[[3,12],        [4,13],[5,14]],[[6,15],[7,16],[8,17]]])

5. 数组的拆分(数组的水平拆分,垂直拆分,深度拆分)

>>>a=np ,arange(9) ,reshape(3,3)
>>>np ,hsplit(a,3)#水平拆分,返回list
[array(([0],
[3] ,
[6]]),array([1],
[4] ,
[7]]),array([[2] ,
[5] ,
[8]])]
>>>np ,vsplit(a,3)#垂直拆分,返回list
[array([[0,1,2]]),array([[3,4,5]]),array([6,7,8]])]
>>>a=np ,arange(27) ,reshape(3,3,3)
>>np ,dsplit(a,3)#深度拆分,返回list
[array([0],[3],[6],[9],[12],[15]]
[[18],[21],[24]]]),array([[[1],
[4],[71]],[[10],[13],[16]],[[19],[22],[25]]]), array([[[2],[5],[8]],[[11],[14],[17]],[[20],[23],[26]]])] 





6. 数组运算(与常的四则运算,与数组的四则运算,判断数组是否相等)

>>>a=np.arange(4,dtype=np.float32).reshape(2,2) 
>>>b=np.arange(4,8,dtype=np.float32).reshape(2,2)
>>> a+2 #数组和常数可以进行四则运算 
array([[2.,3.],[4.,5.]],dtype=float32) 
>>> a/b# 数组和数组可以进行四则运算array([[0.,0.2],[ 0.33333334,  0.42857143]], dtype=float32)
>>> (a == b).all()# 判断数组是否相等
False 

7. 数组的常用函数(数组所有元素的和、积、平均值、最大值、最小值、元素替换、方差、标准差)

>>> a = np.array([3,2,4]) 
>>> a.sum()# 所有元素的和 
9 
>>> a.prod()# 所有元素的乘积 
24 
>>> a.mean()# 所有元素的算数平均值 
3.0 
>>> a.max()# 所有元素的最大值 
4 
>>> a.min()# 所有元素的最小值 
2 
>>> a.clip(3,4)# 小于3的元素替换为3,大于4的元素替换为4 
array([3, 3, 4])
>>> a.var()# 计算方差(元素与均值之差的平方的均值) 
0.66666666666666663 
>>> a.std()# 计算标准差(方差的算术平方根) 0.81649658092772603 

五、实验总结(写出本次实验的收获,遇到的问题等)

本次实验了解数组的基本操作,对于许多方法进一步掌握,更加便于后期的数据挖掘和分析的学习,除了数组的基本操作,,也加深了对于矩阵的一些了解。实验过程中遇到许多问题:
对象值的比较
任何相同类型的对象都可以比较,格式为:a == b,在python2.3之前类型不具有布尔值,返回值为1 0;2.3版本之后返回只为 True False

对象身份的比较

obj1 is obj2 --obj 与obj2是同一个对象 return True False

obj1 is not obj2 --obj 与obj2是同一个对象 return True False

布尔类型--python中的与、或、非

布尔类型的优先级依次为:not>and>or
--实现功能为逻辑 非 与 或

推荐阅读更多精彩内容