基于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
--实现功能为逻辑 非 与 或