数据分析介绍
数据分析是目前人工智能的基础,而数据分析主要就是掌握几个常见的包:numpy,pandas,matploblib,seaborn,pyechart,前两个是主要的包,必须要掌握,后三个则是进行数据可视化的包,掌握其一即可,我后面讲可视化的话主要是围绕matploblib这个包讲解,有兴趣从零基础开始学习的可以跟着笔记一起学习
numpy使用准备
numpy包下载
numpy这个包要提前下载一下,下载方式:pip install numpy,如果下载速度慢的话大家可以使用科学上网或者是清华源(清华源方式大家百度即可)
numpy这个包主要就是用于科学计算和举证运算
numpy导包
使用的时候第一步就是导包嘛,但numpy导包要注意一点
import numpy as np
普通导包方式就是import numpy,但我们在这里加上了as np,这就相当于给numpy这个包给了一个新的引用名称np,肯定有人好奇,为什么要这样写,因为科学界的人都这样写的,约定俗成嘛,大家也都是这样写的,现在很多的数据分析书里面也是这样介绍的,所以我们也是遵循这个规则
numpy数组
创建numpy数组
首先我们要想一个问题,我们要创建numpy数组肯定要往里面放数据呀,但这个数据我们是用什么样的方式来存储呢,我们必须要用现有的python数据结构出发,python现有的数据结构主要就有列表,元组,字典
-
我们先试试列表
data1 = [1,2,3,4]
arr1 = np.array(data1)
print(arr1)
打印结果:[1 2 3 4]
我们打印出来之后就不是列表了,变成数组了,因为中间没有逗号了
-
接下来我们创建多维数组看看
data2 = [[1,2,3,4],[5,6,7,8]]
arr2 = np.array(data2)
print(arr2)
打印结果:[[1 2 3 4]
[5 6 7 8]]
如果大家自己运行试试的话,我们就会发现他给我们自动分行了,在这里我是手打的,可能不是那么清晰,大家最好是自己运行一下试试,这个它体现的方式是两维四列
numpy数组属性
这两个属性就是dtype和shape,我们一一说明
dtype肯定与类型有关
print(arr1.dtype)
print(arr2.dtype)
两个输出结果:
int32
int32
为什么回事int32呢,这就要说一下python的这个dtype具有一个自动推导机制,你的数字不超过int32的范围,它就推导为int32,如果超过了int32,没超过int64的话,就自动推导为int64
当然了,这个dtype类型也是可以指定的
data1 = [1,2,3,4]
arr1 = np.array(data1,dtype = int64)
print(arr1.dtype)
这时输出结果就变成了int64,这个dtype就是你自己指定的
shape是形状,也就是表示数组每一维度的数量,n行m列这样的形式
数组创建函数
zeros函数
我们继续顾名思义,zeros就是0的意思,接下来我们使用zeros函数创建数组,带着大家感受一下
ones函数
这个函数就是创建值都为1的数组,我们根据上面的如法炮制
empty函数
这个函数就和上面的两个不一样了,这个函数的目的是创建随机的垃圾数值的数组,我们以后做数据分析的话,要提前有一些垃圾数值,我们要是不想自己写的话,就可以使用这个函数,创建一些垃圾数值
- 创建一维数组
print(np.empty(3))
运行结果:[1. 1. 1.]
- 创建多维数组
print(np.empty((3,4)))
运行结果:[[1. 1. 1. 1.]
[1. 1. 1. 1.]
[1. 1. 1. 1.]]
- 大家的疑惑:哎,不是说是创建随机的垃圾数值嘛,怎么输出的结果却和上面ones函数的值一模一样呢,是因为python中也有偷懒机制,如果你之前创建过了,它直接就取出之前内存中的值来使用,我们把之前的内容注释了,然后再运行一下看看结果
print(np.empty((3,4)))
运行结果:[[ 1.48539705e-312 -3.24721943e-109 1.09048209e-311 1.09048209e-311]
[ 1.09048209e-311 2.33419537e-313 1.50661701e-312 1.16566772e+253]
[ 1.09048209e-311 1.16546346e+166 2.27438781e+161 4.11368246e+223]]
这样就是一些我们看不懂的垃圾值了
arange函数
这个函数就类似我们python中使用的range函数,都是创建范围内的值
print(np.arange(10))
运行结果:[0 1 2 3 4 5 6 7 8 9]
print(np.arange(5,15))
运行结果:[ 5 6 7 8 9 10 11 12 13 14]
eye函数和identity函数
这两个函数的作用类似,都是创建正方形的单位矩阵,单位矩阵就是斜对角线都为1的矩阵,中间只要放一个参数就行,这个参数就是n行n列的单位矩阵
print(np.eye(3))
print(np.identity(3))
运行结果:
[[1. 0. 0.]
[0. 1. 0.]
[0. 0. 1.]]
这两个函数的运行结果都是这样的,但我相信在这里就有朋友要问了,我如果非要用这两个函数创建长方形矩阵呢,当然也是可以的,但是结果可能就和你想的有点差别了
print(np.eye(4,2))
为什么这个函数写法不一样了,按照之前的写法,这个函数应该这样写print(np.eye((4,2)))
但这样写会报错,这个需要大家注意一下
按照我们上面的理解,这个函数创建的应该是四行两列的长方形单位矩阵
但实际的运行结果:
[[1. 0.]
[0. 1.]
[0. 0.]
[0. 0.]]
其实后面的那个参数2是截取,就是截取前两列的意思,就不可能存在长方形的单位矩阵这种东西,所以我们在这里只是对print(np.eye(4))这个的结果截取了前两列值而已
like后缀的函数(zeros_like,ones_like,empty_like)
这三个函数分别就是创建形状相同的值全为0,1,垃圾值的数组
data1=[[2,3,4],[1,2,4]]
arr1 = np.array(data1)
print(arr1)
print(np.ones_like(arr1))
print(np.zeros_like(arr1))
print(np.empty_like(arr1))
前三行代码是创建一个两行三列的数组,后三行代码的意思就是和arr1数组创建形状相同的数组
运行结果:
[[1 1 1]
[1 1 1]]
[[0 0 0]
[0 0 0]]
[[0 0 0]
[0 0 0]]
注意:empty_like是创建同样行列的垃圾值,但是如果上面创建过同样类型的值的话,它就会直接调用之前内存中的值