数据分析三件套Numpy

简单说明:
Numpy:Python科学计算的核心库,提供高性能的多维数组对象和大量的函数,影响深度学习(pyTorch,TensorFlow).
matplotlib:用于绘图和数据可视化的基础包
Pandas:用于数据处理
*数据分析环境:*Anaconda+Jupyter notebook
直接在下面网址下载需要的环境进行安装即可
Anaconda下载
在命令行输入:jupyter notebook显示如下内容表示安装成功
在这里插入图片描述
在这里插入图片描述
Jupyter 是基于网页进行交互式开发的程序,可以展示全过程计算,开发,文档编写,运行代码,结果展示等
环境搭建好之后开始我们第一个知识点Numoy的知识理论内容

Numpy知识点

官方介绍:NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。
官方给的功能:

  1. 一个强大的N维数组对象 ndarray
  2. 广播功能函数
  3. 整合 C/C++/Fortran 代码的工具
  4. 线性代数、傅里叶变换、随机数生成等功能

numpy ndarray对象
numpy创建了一个n维数组对象ndarray,这是一个相同类型元素的数组集合,每个数组元素占有大小相同的内存块。ndarray采用了索引机制,将数组中的每个元素映射到内存块上,按照一定的布局进行排序。在这里插入图片描述
创建ndarray: Numpy通过内置函数array()可以创建ndarray对象
语法格式:
numpy.array(object, dtype = None, copy = True, order = None,subok=False,ndmin = 0)

序号 参数 描述说明
1 object 表示一个数组序列。
2 dtype 可选参数,通过它可以更改数组的数据类型。
3 copy 可选参数,表示数组能否被复制,默认是 True。
4 ndmin 用于指定数组的维度。
5 subok 可选参数,类型为bool值,默认False。为True,使用object的内部数据类型;False:使用object数组的数据类型。

  • object
import numpy as np
np.array([1,2,3]) 
np.array((1,2,3))
np.array(range(1,4))
#生成器
np.array([i**2 for i in range(10)])
#array()函数,括号内可以是列表、元祖、数组、迭代对象,生成器等,元素类型也可以不一样
  • dtype 设置数据类型
np.array([1,2,3],dtype='uint8')
  • copy 设置数组可不可以被复制
#默认是可以复制,复制之后的id和原来的不是一个
np.array([1,2,3],copy=True)
  • ndmin 设置数组的维度
np.array([1,2,3],ndmin=3)

在这里插入图片描述

  • subok 是否要保持原来的类型
#创建矩阵
#既要复制一份副本,又要保持原类型
a = np.mat([1,2,3,4])
a_copy = np.array(a,subok=True)

*注意复制数组:只要是不使用=都不是指向同一个数据的引用,三种数据复制方式

  1. a = np.array(b)
  2. a = b.copy
  3. a = b

arange()生成区间数组

numpy.arange(start, stop, step, dtype)

参数说明
序号 参数 描述说明
1 start 起始值,默认为0
2 stop 终止值(不包含)
3 step 步长,默认为1
4 dtype 返回ndarray的数据类型,如果没有提供,则会使用输入数据的类型。

#创建一个0-9的数字,注意可以使用浮点数
np.array(10)
#可以指定数据类型
np,array(10,dtype='float')
#指定起始,终止,步长
np.array(2,5,2)
np.array(20,step=2)

linspace() 创建等差数列
返回在间隔[开始,停止]上计算的num个均匀间隔的样本。
np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)

参数说明

序号 参数 描述说明
1 start 必填项,序列的起始值,
2 stop 必填项,序列的终止值,如果endpoint为true,该值包含于数列中
3 num 要生成的等步长的样本数量,默认为50
4 endpoint 该值为 true 时,数列中包含stop值,反之不包含,默认是True。
5 retstep 如果为 True 时,生成的数组中会显示间距,反之不显示。
6 dtype ndarray 的数据类型

#起点1,终点5,样本数量5个
np.linspace(1,5,5)
#起点1,终点5,不包含5,显示步长,此时默认数据为50
np.linspace(1,5,endpoint=False,retstep=True)

等比数列logspace() 返回在间隔[开始,停止]上计算的num个均匀间隔的样本。
np.logspace(start, stop, num=50, endpoint=True, base=10.0, dtype=None)

参数说明

序号 参数 描述说明
1 start 必填项,序列的起始值,
2 stop 必填项,序列的终止值,如果endpoint为true,该值包含于数列中
3 num 要生成的等步长的样本数量,默认为50
4 endpoint 该值为 true 时,数列中包含stop值,反之不包含,默认是True。
5 base 对数 log 的底数
6 dtype ndarray 的数据类型

#开始基数的0次幂 终止10次幂 基数为2 显示10个数,不包含尾数(另一种理解方式:将0-10分割成10个数,然后分别计算基数次幂)
np.logspace(0,10,10,,endpoint = False,base = 2)

全零数列zeros():创建指定大小的数组,数组元素以 0 来填充
numpy.zeros(shape, dtype = float, order = ‘C’)

参数说明

序号 参数 描述说明
1 shape 数组形状
2 dtype 数据类型,可选

#一维的5个0,默认数据类型为5个0
np.zeros(5)
#设置数据类型为int,5行5列
np.zeros((5,5),dtype='int')
#zeros_like返回具有与给定数组相同的形状和类型的零数组
ar1 = np.array([[1,2,3],[4,5,6]])
np.zeros_like(ar1)

结果
array([[0, 0, 0],
       [0, 0, 0]])

全1数量ones()(同全零数列)

NumPy 数组属性
NumPy 的数组中比较重要 ndarray 对象属性有:

属性 说明
ndarray.ndim 秩,即轴的数量或维度的数量
ndarray.shape 数组的维度,对于矩阵,n 行 m 列
ndarray.size 数组元素的总个数,相当于 .shape 中 n*m 的值
ndarray.dtype ndarray 对象的元素类型
ndarray.itemsize ndarray 对象中每个元素的大小,以字节为单位

调整维度 reshape:可以调整维度

a = np.array([1,2,3,4])
a.reshape((2,2))
结果是:
array([[1, 2],
       [3, 4]])

调整维度 resize

# a 为2行2列
a=np.array([
        [0,1],
        [2,3]
    ])
# 一a为原数组创建2行3列的新数组
b_2_3 = np.resize(a,(2,10))
b_2_3

切片索引和统计函数

ndarray对象的内容可以通过索引或切片来访问和修改,与 Python 中 list 的切片操作一样。
一维数组

冒号 : 的解释:如果只放置一个参数,

如 [2],将返回与该索引相对应的单个元素。
如果为 [2:],表示从该索引开始以后的所有项都将被提取。
如果使用了两个参数,如 [2:7],那么则提取两个索引(不包括停止索引)之间的项。

#创建0-9的连续数字
import numpy as np
a = np.arange(0,10)
#截取2到7,间隔为2
a[2:7:2]
#上面这种情况可以直接是:np.arange(2,7,2)直接得出结果

二维数组
和一维数组的取数方法基本一致,示例如下:

#创建一个4行5列的二维数组
a = np.arange(20).reshape((4,5))
print(a)
结果是:
[[ 0  1  2  3  4]
 [ 5  6  7  8  9]
 [10 11 12 13 14]
 [15 16 17 18 19]]
#查看维数(秩)
a.ndim
#二维数组下若为一个数字,则表示某一行数字(一维)
#展示[5,6,7,8,9]可以以使用
a[1]
#展示二维数组下某个具体的值,先取一维的某行再取某个具体的值
a[3][2] #结果是=17
a[1:] #取得第2行到最后一行

#!!下面这种情况可以这样理解:先取所有的数据,然后再取某行的数据
a[:][0:2]

在行的位置可以使用…省略

a[...,2] #会取得第三列数据
a[...,2:] #会取得第三列之后的所有数据

索引的高级操作

  • 整数数组索引
#创建4行5列的数据
a = np.arange(20).reshape(4,5)
b = a[[1,2,3],
	 [1,0,2]
]
#结果是b的数据是取得(1,1)(2,0)(3,2)的数据
  • 布尔数组索引
    当输出的结果需要经过布尔运算(如比较运算)时,此时会使用到另一种高级索引方式,即布尔数组索引
    筛选出指定区间内数据
    & 和
    | 或
#创建一个2行3列的数据
a = np.array([[2,3,5],[2,6,5]])
#取数组中的大于3的数据
a[a>3]
#取出数组中的大于2小于6的数据
a[a>2 & a < 6]

广播机制
广播机制是针对不同的形状数组进行计算而设计的一种运算方式。
核心运算规则:

两个数组右对齐以后,对应维度里的数值要么相等,要么有一个为1,要么缺失取大值。 除此之外就会报错。像下面的两个数组就不能做运算。

统计函数

  • 求平均值mean()
data = np.arange(20).reshape((4,5))
data.mean()

结果:
[[ 0  1  2  3  4]
 [ 5  6  7  8  9]
 [10 11 12 13 14]
 [15 16 17 18 19]]
9.5

#如果想计算某个方向(某个轴)的平均值可以使用axis,上->下axis=0,左->右axis=1
data.mean(axis=0) #结果是array([ 7.5,  8.5,  9.5, 10.5, 11.5])

中位数np.median()

data = np.array([1,2,3,4,5])
np.median(data)
结果是:3

标准差ndarray.std()

data = np.array([95,85,75,65,55,45])
data.std()
结果是17.07825127659933

方差ndarray.var()
标准差的平方是方差

data = np.array([95,85,75,65,55,45])
data.var()
结果是:291.6666666666667

求最大值ndarray.max()/ndarray.min()

data = np.array([1,2,3,4,5])
data.max()
结果是:5
#同理也可以求某个方向上的最大值/最小值axis=0或者1即可

求和 ndarray.sum()

data = np.array([1,2,3,4,5])
data.sum()
结果是:15
#同理也可以求某个方向上的和axis=0或者1即可

加权平均值 numpy.average()

即将各数值乘以相应的权数,然后加总求和得到总体值,再除以总的单位数

numpy.average(a, axis=None, weights=None, returned=False)
计算方程式:
avg = sum(a * weights) / sum(weights)

数据类型
在这里插入图片描述

操作文件:loadtxt读取txt文本、、csv文件

loadtxt(fname, dtype=<type ‘float’>, comments=‘#’, delimiter=None, converters=None, skiprows=0, usecols=None, unpack=False, ndmin=0,encoding=‘bytes’)

参数:

fname:指定文件名称或字符串。支持压缩文件,包括gz、bz格式。

dtype:数据类型。 默认float。

comments:字符串或字符串组成的列表。表示注释字符集开始的标志,默认为#。

delimiter:字符串。分隔符。

converters:字典。将特定列的数据转换为字典中对应的函数的浮点型数据。例如将空值转换为0,默认为空。

skiprows:跳过特定行数据。例如跳过前1行(可能是标题或注释)。默认为0。

usecols:元组。用来指定要读取数据的列,第一列为0。例如(1, 3, 5),默认为空。

unpack:布尔型。指定是否转置数组,如果为真则转置,默认为False。

ndmin:整数型。指定返回的数组至少包含特定维度的数组。值域为0、1、2,默认为0。

encoding:编码, 确认文件是gbk还是utf-8 格式

返回:从文件中读取的数组。

#numpy读取.csv文件中的内容
import numpy as np
#使用loadtxt方法,数据类型是i4,分隔符是,
data = np.loadtxt('test.csv',dtype=np.int32,delimiter=',')
print(data,data.shape)
#此时就可以展示文件数据中的内容

可以自定义数据类型

#文件中的内容可以自己定义数据格式
data_title = np.dtype([('name','str'),('age','uint8'),('gender','U1')])
data = np.loadtxt('info.csv',dtype=data_title ,delimiter=',',skiprows=1, encoding='utf-8')
#此时就可以通过索引名称取数据,获取信息内容的age,可以求得平均值,最大值,最小值等
ages = data['age']
ages.max()
ages.min()
ages.mean()

随机函数:产生特定分布的随机数,如正态分布等

  • numpy.random.rand(d0,d1,…,dn)

     	rand函数根据给定维度生成[0,1)之间的数据,包含0,不包含1
     	dn表示每个维度
     	返回值为指定维度的array
    
#随机产生一个2行4列的二位数字0-1之间
np.random.rand(2,4)

	 ([[0.63029277, 0.79480643, 0.53937797, 0.65152899],
       [0.305966  , 0.5356668 , 0.06207485, 0.3839093 ]])
  • numpy.random.randint(low, high=None, size=None, dtype=’l’)

     返回随机整数,范围区间为[low,high),包含low,不包含high
     参数:low为最小值,high为最大值,size为数组维度大小,dtype为数据类型,默认的数据类型是np.int
     high没有填写时,默认生成随机数的范围是[0,low)
    
#随机产生5-20之间的3行4列二维数组
np.random.randint(5,21,(3,4))

	  [[ 7, 19, 10, 19],
       [12,  5, 12, 18],
       [10, 16,  9, 12]]
  • numpy.random.sample(size=None)
    返回半开区间内的随机浮点数[0.0,1.0]。
#范围一个2块3行4列的三维数组[0.0,1.0]之间
np.random.sample((2,3,4))

	  [[[0.173972  , 0.600794  , 0.65167046, 0.24024349],
        [0.03844569, 0.52958462, 0.74761613, 0.74137381],
        [0.54508302, 0.680926  , 0.07978446, 0.81980104]],

       [[0.36661542, 0.05358651, 0.22395614, 0.54512484],
        [0.74150273, 0.85390898, 0.94689098, 0.04491626],
        [0.74536013, 0.4472514 , 0.76745321, 0.39144286]]]

随机种子np.random.seed():使用随机数种子每次产生的数据都是一样的,可以进行预测内容

#设置随机数种子为2
np.random.seed(2)
np.random.rand2(2,2)

每次的运行结果都是一样的
	  [[-0.41675785, -0.05626683],
       [-2.1361961 ,  1.64027081]]

正态分布:numpy.random.normal(loc=0.0, scale=1.0, size=None)
作用:返回一个由size指定形状的数组,数组中的值服从 μ=loc,σ=scale 的正态分布。

参数:

loc : float型或者float型的类数组对象,指定均值 μ
scale : float型或者float型的类数组对象,指定标准差 σ
size : int型或者int型的元组,指定了数组的形状。如果不提供size,且loc和scale为标量(不是类数组对象),则返回一个服从该分布的随机数。
# 标准正态分布,3行2列
a = np.random.normal(0, 1, (3, 2))

numpy.resize()
numpy.resize(arr, shape)

numpy.resize() 返回指定形状的新数组。

numpy.resize(arr,shape) 和ndarray.resize(shape, refcheck=False)区别:

numpy.resize(arr,shape),有返回值,返回复制内容.如果维度不够,会使用原数组数据补齐
ndarray.resize(shape, refcheck=False),修改原数组,不会返回数据,如果维度不够,会使用0补齐

a = np.array([[1,2,3],
			  [4,5,6]])
b = np.resize(a,(3,3))
a.resize(3,3)

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

 b:[[1 2 3]
 [4 5 6]
 [1 2 3]]

numpy.append():
在数组的末尾添加值,默认返回一个一维数组。

numpy.append(arr, values, axis=None)
参数说明:

arr:输入的数组;
values:向 arr 数组中添加的值,需要和 arr 数组的形状保持一致;
axis:默认为 None,返回的是一维数组;当 axis =0 时,追加的值会被添加到行,而列数保持不变,若 axis=1 则与其恰好相反。

a = np.array([[1,2,3],
			  [4,5,6]])
a = np.append(a,[[7,8,9]],axis=0)
np.append(a, [[5,5,5],[7,8,9]],axis = 1)
[[1, 2, 3],
 [4, 5, 6],
 [7, 8, 9]]

[[1 2 3 5 5 5]
 [4 5 6 7 8 9]]

numpy.insert():表示沿指定的轴,在给定索引值的前一个位置插入相应的值,如果没有提供轴,则输入数组被展开为一维数组。

numpy.insert(arr, obj, values, axis)

参数说明:

arr:要输入的数组
obj:表示索引值,在该索引值之前插入 values 值;
values:要插入的值;
axis:指定的轴,如果未提供,则输入数组会被展开为一维数组。

a = np.array([[1,2,3],
			  [4,5,6]])
np.insert(a,1,[7,8,9],axis=0)

[[1, 2, 3],
 [7, 8, 9],
 [4, 5, 6]]

numpy.delete():
该方法表示从输入数组中删除指定的子数组,并返回一个新数组。它与 insert() 函数相似,若不提供 axis 参数,则输入数组被展开为一维数组。 numpy.delete(arr, obj, axis) 参数说明:

arr:要输入的数组;
obj:整数或者整数数组,表示要被删除数组元素或者子数组;
axis:沿着哪条轴删除子数组。

a = np.array([[1,2,3],
			  [4,5,6]])
np.delete(a,1,axis=0)

[[1 2 3]]

numpy.argwhere():该函数返回数组中非 0 元素的索引,若是多维数组则返回行、列索引组成的索引坐标。

a = np.array([[1,2,3],
			  [4,5,6]])
print(np.argwhere(a > 2))
数组中大于2的数字下标按照行进行列举
[[0 2]
 [1 0]
 [1 1]
 [1 2]]

numpy.unique()

用于删除数组中重复的元素,其语法格式如下: numpy.unique(arr, return_index, return_inverse, return_counts)

参数说明:

arr:输入数组,若是多维数组则以一维数组形式展开;
return_index:如果为 True,则返回新数组元素在原数组中的位置(索引);
return_inverse:如果为 True,则返回原数组元素在新数组中的位置(索引);
return_counts:如果为 True,则返回去重后的数组元素在原数组中出现的次数。

a = np.array([[1,2,3],
			  [4,5,6]])
np.unique(a,return_inverse=True)

(array([1, 2, 3, 4, 5, 6]), array([0, 1, 2, 3, 4, 5], dtype=int64))

numpy.sort():
对输入数组执行排序,并返回一个数组副本。 numpy.sort(a, axis, kind, order)

参数说明:

a:要排序的数组;
axis:沿着指定轴进行排序,如果没有指定 axis,默认在最后一个轴上排序,若 axis=0 表示按列排序,axis=1 表示按行排序;
kind:默认为 quicksort(快速排序);
order:若数组设置了字段,则 order 表示要排序的字段。

a = np.array([[1,5,3],[3.9,7]
])
np.sort(a)
np.sort(a,axis=1)

[[1, 3, 5],
 [3, 7, 9]]

[[1, 3, 5],
 [3, 7, 9]]

numpy.argsort():argsort() 沿着指定的轴,对输入数组的元素值进行排序,并返回排序后的元素索引数组。示例如下:

a = np.array([90, 29, 89, 12]) 
np.argsort()

[3 1 2 0]
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值