机器学习(1)——Python数据处理与绘图

目录

1 numpy数组使用

1.1 numpy生成数组

1.2 numpy数组属性

1.3 数组的索引和切片

1.4 numpy数组运算

1.5 随机数

1.6 数组副本和视图

1.7 数组重塑

1.8 数组连接与拆分

1.8.1 数组连接

1.8.2 数组拆分

2 scipy包的使用

2.1 scipy包中的模块

2.2 常数模块的使用

2.3 特殊函数模块的使用

2.4 信号处理模块

2.5 空间结构模块

2.6 优化器

2.6 稀疏矩阵

2.7 图结构

3 pandas包的使用

3.1 pandas数组

3.2 数据表

3.3 查看数据

3.4 pandas读取文件

3.5 数据聚合与分组运算

4 matplotlib包的使用

4.1 二维可视化图像

4.2 一张图中的不同曲线 

 4.3 三维曲线图

4.4 其他类型曲线

4.5 三维可视化图像

4.5.1 曲面图绘制

4.5.2 曲线图和散点图绘制 

 4.6 可视化图片(女神)


Python具有强大的数据处理能力,尤以数组处理为主。numpy包是科学计算库,提供N维数组运算及各种数据分析方法;scipy包需要numpy包支持,提供积分、方程组求解等运算;matplotlib包提供数据绘图命令,所绘图像质量较高;pandas包提供机器学习数据格式。

1 numpy数组使用

numpy、scipy、matplotlib这3个包通常一起使用,这种组合可用于替代MATLAB软件的功能,构成一个强大的科学计算环境,有助于我们通过Python学习数据科学或机器学习。

首先安装这3种包:

pip install numpy
pip install scipy
pip install matplotlib

1.1 numpy生成数组

numpy官网:http://www.numpy.org/

创建数组的方式有很多种,如可以通过将已有的元组、列表或range对象使用numpy.array()函数转换为数组的方式来生成数组。

numpy.array()函数的语法格式如下:

numpy.array(object,dtype = None,copy = True,order = None,subok = False,ndmin = 0)
#参数说明如下:
#object:表示数组或嵌套的数列;
#dtype:可选参数,表示数组元素的数据类型;
#copy:可选参数,表示对象是否需要复制;
#order:表示创建数组的样式,C为行方向,F为列方向,A为任意方向(默认);
#subok:表示默认返回一个与基类类型一致的数组;
#ndmin:表示指定生成数组的最小维度。

例1.1.1,使用numpy.array()函数将元组、列表或range对象转换成数组:

import numpy as np #导入numpy模块,并用np代替
a = (1,2,3,4,5)
b = [1,2,3,4,5]
c = [[1,2,3],[4,5,6]]
print(np.array(a)) #将元组转换成数组
print(np.array(b)) #将列表转换成数组
print(np.array(c)) #将列表转换成数组
print(np.array(range(5))) #将range对象转换成数组

运行结果如下:

[1 2 3 4 5]
[1 2 3 4 5]
[[1 2 3]
 [4 5 6]]
[0 1 2 3 4]

我们还可以使用numpy.asarray()函数来创建数组。

numpy.asarray()函数的语法格式如下:

numpy.asarray(a,dtype = None,order = None)
#参数说明如下:
#a:表示数组或嵌套的数列;
#dtype:可选参数,表示数组元素的数据类型;
#order:表示创建数组的样式,C为行方向,F为列方向,A为任意方向(默认)。

例1.1.2,使用numpy.asarray()函数将元组、列表或range对象转换成数组:

import numpy as np #导入numpy模块,并用np代替
a = (1,2,3,4,5)
b = [1,2,3,4,5]
c = [[1,2,3],[4,5,6]]
print(np.asarray(a)) #将元组转换成数组
print(np.asarray(b)) #将列表转换成数组
print(np.asarray(c)) #将列表转换成数组
print(np.asarray(range(5))) #将range对象转换成数组

运行结果如下:

[1 2 3 4 5]
[1 2 3 4 5]
[[1 2 3]
 [4 5 6]]
[0 1 2 3 4]

通过观察例1.1.1和例1.1.2我们发现,numpy.array()函数numpy.asarray()函数好像没有什么区别,下面我们通过一个例子来理解两者之间的区别。

例1.1.3,numpy.array()函数numpy.asarray()函数的不同:

import numpy as np #导入numpy模块,并用np代替
A = np.ones((3,3))
print(A)
B = np.array(A)
print(B)
C = np.asarray(A)
print(C)
A[0] = 0
print('修改后的A:\n',A)
print('修改后的B:\n',B)
print('修改后的C:\n',C)

运行结果如下:

[[1. 1. 1.]
 [1. 1. 1.]
 [1. 1. 1.]]
[[1. 1. 1.]
 [1. 1. 1.]
 [1. 1. 1.]]
[[1. 1. 1.]
 [1. 1. 1.]
 [1. 1. 1.]]
修改后的A:
 [[0. 0. 0.]
 [1. 1. 1.]
 [1. 1. 1.]]
修改后的B:
 [[1. 1. 1.]
 [1. 1. 1.]
 [1. 1. 1.]]
修改后的C:
 [[0. 0. 0.]
 [1. 1. 1.]
 [1. 1. 1.]]

可以发现,当修改了A数组中的第一行元素后,再分别输出A、B、C数组,其中B和C数组的结果并不是完全相同的。这是因为numpy.array()函数和numpy.asarray()函数都可以将结构数据转化为ndarray,但是当数据源是ndarray时,numpy.array()函数仍然会复制出一个副本,占用新的内存,而numpy.asarray()函数不会

还可以通过其他方式生成数组,如numpy.zeros()函数、numpy.ones()函数、numpy.identity()函数、numpy.empty()函数、numpy.linspace()函数等。

numpy.zeros()函数用于生成一个元素全为0的数组

numpy.zeros()函数语法格式如下:

numpy.zeros(shape,dtype = float,order = 'C')

numpy.ones()函数用于生成一个元素全为1的数组

numpy.ones()函数语法格式如下:

numpy.ones(shape,dtype = None,order = 'C')

numpy.empty()函数用于创建一个指定形状(shape)、数据类型(dtype)且未初始化的数组

numpy.empty()函数语法格式如下:

numpy.empty(shape,dtype = float,order = 'C')

以上3种方式中,参数shape指定数组形状,即几行几列的数组;dtype指定数据类型;order指定在计算机内存中存储元素的顺序,C为行优先,F为列优先,默认为C

numpy.identity()函数用于生成一个单位矩阵

numpy.identity()函数语法格式如下:

numpy.identity(n,dtype = None)

其中,n为生成单位矩阵的维数

numpy.linspace()函数用于创建一个一维数组,元素由等差数列构成

numpy.linspace()函数语法格式如下:

numpy.linspace(start,stop,num=50,endpoint=True,retstep=False,dtype = None)
#参数说明如下:
#start:表示数列的第一个值;
#stop:表示数列的最后一个值;
#num:表示生成等步长数列的个数,默认为50;
#endpoint:表示值为True时,数列包含stop,否则不包含,默认为True;
#retstep:表示值为True时,生成数组中显示间距,否则不显示;
#dtype:表示ndarray的数据类型。

例1.1.4,对以上函数的简单应用:

import numpy #导入numpy模块
a = numpy.zeros((3,3)) #生成3行3列元素全为0的矩阵
b = numpy.ones((3,1))  #生成元素全为1的数组
c = numpy.identity(4)  #生成单位矩阵
d = numpy.empty((3,3))  #生成3行3列的空矩阵,元素值随机生成
e = numpy.linspace(0,6,7) #生成一个数组,各个元素在0、6之间等分
print('numpy.zeros((3,3)):\n',a)
print('numpy.ones((3,1)):\n',b)
print('numpy.identity(4):\n',c)
print('numpy.empty((3,3)):\n',d)
print('numpy.linspace(0,6,7):\n',e)

运行结果如下:

numpy.zeros((3,3)):
 [[0. 0. 0.]
 [0. 0. 0.]
 [0. 0. 0.]]
numpy.ones((3,1)):
 [[1.]
 [1.]
 [1.]]
numpy.identity(4):
 [[1. 0. 0. 0.]
 [0. 1. 0. 0.]
 [0. 0. 1. 0.]
 [0. 0. 0. 1.]]
numpy.empty((3,3)):
 [[0.00000000e+000 0.00000000e+000 0.00000000e+000]
 [0.00000000e+000 0.00000000e+000 2.52961611e-321]
 [8.34445137e-308 2.14321575e-312 9.28366228e-312]]
numpy.linspace(0,6,7):
 [0. 1. 2. 3. 4. 5. 6.]

1.2 numpy数组属性

numpy数组属性及说明
属性 说明
ndarray.ndim 矩阵的秩,表维度的数量
ndarray.shape 数组的维度,对于矩阵,n行m列
ndarray.size 数组元素的总个数,相当于.shape中n*m的值
ndarray.dtype ndarray对象的元素类型
ndarray.itemsize ndarray对象中每个元素的大小,以字节为单位
ndarray.flags ndarray对象的内存信息
ndarray.real ndarray对象的实部
ndarray.imag ndarray对象的虚部
ndarray.data 包含实际数组元素的缓冲区,由于一般通过数组的索引获取元素,所以通常不需要使用这个属性

例1.2.1,numpy数组属性的使用:

import numpy as np #导入numpy模块,并用np代替
A = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]])
print('矩阵的秩:',A.ndim) #求矩阵的秩
print('矩阵的行数和列数:',A.shape) #求矩阵的行数和列数
print('矩阵A:',A)
A.shape = (4,3) #ndarray.shape还可以用来调整数组的大小
print('调整后的矩阵A:',A)
print('元素的类型:',A.dtype) #求元素的类型

运行结果如下:

矩阵的秩: 2
矩阵的行数和列数: (3, 4)
矩阵A: [[ 1  2  3  4]
 [ 5  6  7  8]
 [ 9 10 11 12]]
调整后的矩阵A: [[ 1  2  3]
 [ 4  5  6]
 [ 7  8  9]
 [10 11 12]]
元素的类型: int32

1.3 数组的索引和切片

通过对数组的索引和切片操作来实现对数组内容的访问和修改。对于一维数组来说,可以通过从0~n的下标进行索引,通

你可能感兴趣的:(机器学习,机器学习,python,python数据处理与绘图)