内容正文:
任务9.2 数据可视化库matplotlib的使用
解析中国夏奥之旅
【任务描述】
2022年冬奥会在北京的举行,这让小T有了回顾中国奥运之旅的想法。他收集了中国参加的历年夏季奥运会奖牌,并希望以图形化的界面呈现奖牌数据,从而去发现中国体育健儿在奥运会上成长、变强的历程。
9.2 数据可视化库matplotlib的使用——解析中国夏奥之旅
9.2 数据可视化库matplotlib的使用——解析中国夏奥之旅
图表Matplotlib库:
图表种类?
怎么绘制?
【任务分析】
用matplotlib库实现数据可视化,从中国体育健儿历年金牌获取数折线图、最近一届夏季奥运会各国金牌数量占比饼图、历年各类奖牌数柱状图来分析中国体育健儿的夏季奥运之旅,思路如下:
(1)创建画布,在一块画布上显示这三种图表。
(2)根据数据画出折线图、饼图,柱状图。
(3)保存并显示图表。
9.2 数据可视化库matplotlib的使用——解析中国夏奥之旅
9.2.1 NumPy运算
9.2.2 Matplotlib常见操作
9.2.3 Matplotlib绘制常见图表
9.2.4 任务实现——解析中国夏奥之旅
9.2 数据可视化库matplotlib的使用——解析中国夏奥之旅
9.2.1 NumPy运算
9.2.1 NumPy运算
NumPy是高性能科学计算和数据分析的扩展库,作为多维数据处理工具,可用于存储和处理大型矩阵。
Python中提供了list数据类型,可以作为数组使用。列表中的元素可以是任何对象,因此列表中保存的是对象的指针,对于数值运算来说,这种结构显然不够高效。Python还有一个array模块,可以直接保存数值,和其他编程语言的一维数组类似,但不支持多维数组,也没有函数运算。NumPy正好弥补了这些缺陷。
pip install numpy
在Python中引入NumPy库,可使用如下代码:
import numpy as np
1.创建数组
NumPy提供了array()函数创建一维或者多维数组,即ndarray对象,其基本语法格式如下:
object:表示想要创建的数组。
dtype:可选参数,表示数组所需的数据类型,若不给定则选择保存数组对象所需的最小类型,默认为None。
ndmin:整型,指定生成数组应该具有的最小维数,默认为None。
np.array(object,dtype,ndmin)
9.2.1 NumPy运算
【例9-7】创建一维或多维数组。
9.2.1 NumPy运算
import numpy as np
array1=np.array([1, 2, 3, 4]) #创建一维数组
array2=np.array([[1, 3, 4, 5],[2, 7, 8, 9]]) # 创建二维数组
array3=np.array([[[1, 3, 4, 5],[6, 7, 8, 9]],[[2, 3, 4, 5],[6, 7, 8, 9]], [[3, 3, 4, 5],[6, 7, 8, 9]]])#创建三维数组
print("一维数组:
",array1)
print("二维数组:
",array2)
print("三维数组:
",array3)
一维数组:
[1 2 3 4]
二维数组:
[[1 3 4 5]
[2 7 8 9]]
三维数组:
[[[1 3 4 5]
[6 7 8 9]]
[[2 3 4 5]
[6 7 8 9]]
[[3 3 4 5]
[6 7 8 9]]]
9.2.1 NumPy运算
函数 说明
np.onces(shape,dtype) 创建shape形状下全部元素为1的数组。shape接收整型或者元组数据,数据类型为dtype,下同
np.eye(shape,dtype) 创建shape形状下对角线元素为1、其他为0的数组
np.zeros((shape,dtype)) 创建shape形状下全部元素为1的数组
np.arrange(起始值,终值,步长) 创建一维数组,在起始值和终值之间间隔步长的所有元素
np.random.random(m,n) 生成m行n列的随机浮点数,浮点数范围为(0,1)
np.random.rand(m,n) 返回m行n列、服从0~1均匀分布的随机样本值。随机样本取值范围是[0,1),不包括1
np.random.randn(m,n) 返回m行n列、服从0~1正态分布的随机样本值。随机样本取值范围是[0,1),不包括1
np.random.randint(low,high,size=[m,n]) 返回m行n列随机整型数组,整数取值范围为[low, high)。如果没有写参数high的值,则返回[0,low)的值
表9-5 NumPy常用函数
【例9-8】利用函数创建数组。
9.2.1 NumPy运算
import numpy as np
print("onces创建的数组:
",np.ones((2,3)))
print("eye创建的数组:
",np.eye(2,3))
print("zeros创建的数组:
",np.zeros((2,3)))
print("rand创建的数组:
",np.random.rand(2,3))
print("randint创建的数组:
",np.random.randint(5,10,size=[2,3]))
onces创建的数组:
[[1. 1. 1.]
[1. 1. 1.]]
eye创建的数组:
[[1. 0. 0.]
[0. 1. 0.]]
zeros创建的数组:
[[0. 0. 0.]
[0. 0. 0.]]
rand创建的数组:
[[0.99139623 0.53916405 0.01325806]
[0.44222241 0.94499632 0.24608376]]
randint创建的数组:
[[6 5 8]
[7 7 9]]
2.数组属性
在创建数组之后,可以通过数组属性来了解数组,比如数组的维数、数组的尺寸等。数组主要属性如表9-6所示。
9.2.1 NumPy运算
属性 返回数据类型 说明
ndim int 数组的维数
shape tuple 数组的尺寸,对于n行m列的矩阵,形状为(n,m)
size int 数组元素的总数,等于数组shape的乘积
dtype data-type 数组中元素的类型
itemsize int 数组的每个元素的大小(以字节为单位)
表9-6 数组的主要属性及其说明
【例9-9】查看数组的属性。
9.2.1 NumPy运算
# 接例【9-7】
print('array1维度:',array1.ndim)
print('array1数据类型:',array1.dtype)
print('array1形状:',array1.shape)
print('array1元素个数:',array1.size)
print('array2维度:',array2.ndim)
print('array2数据类型:',array2.dtype)
print('array2形状:',array2.shape)
print('array2元素个数:',array2.size)
print('array3维度:',array3.ndim)
array1维度: 1
array1数据类型: int32
array1形状: (4,)
array1元素个数: 4
array2维度: 2
array2数据类型: int32
array2形状: (2, 4)
array2元素个数: 8
array3维度: 3
array3数据类型: int32
array3形状: (3, 2, 4)
array3元素个数: 24
NumPy扩充了原生Python的数据类型,这些数据类型由一个类型名(如float、int)和元素位长的数字组成。在默认情况下,64位Windows操作系统输出的结果为int32,64位Linux或Mac OS操作系统输出的结果为int64。
在NumPy中,所有数组元素的数据类型都是一致的,用dtype属性来查看数组的类型。常见的数据类型如表9-7所示。
9.2.1 NumPy运算
9.2.1 NumPy运算
表9-7 NumPy数组数据类型
类型 说明
bool 用一位存储的布尔类型(值为True或者False)
int16unit16 有符号的16位整数(-32768~32767)无符号的16位整数(0~65535)
int32unit32 有符号的32位整数()无符号的32位整数
int64unit64 有符号的64位整数无符号的64位整数
float16 半精度浮点数(16位),其中1位表示正负号,5位表示指数,10位表示尾数
float32 半精度浮点数(32位),其中1位表示正负号,8位表示指数,23位表示尾数
float64 半精度浮点数(64位),其中1位表示正负号,11位表示指数,52位表示尾数
complex64 复数,分别用两个32位表示实部和虚部
complex128 复数,分别用两个64位表示实部和虚部
3.数组访问
NumPy因提供高效率的数组运算著称,主要原因是它具有索引的易用性。一维数组的访问、切片均与列表list类似,不再赘述,这里着重介绍多维数组的访问,其基本语法格式如下:
m1:m2也可换做由直接索引值组成的元组,如(1,3,5),表示切片索引为1、3、5的数组。
array[m1:m2,n1:n2...] #切片数组索引各维度为[m1,m2),[n1,n2)的数组。
9.2.1 NumPy运算
【例9-10】数组的访问。
9.2.1 NumPy运算
import numpy as np
array3=np.array([[[1, 3, 4, 5],[6, 7, 8, 9]],[[2, 3, 4, 5],[6, 7, 8, 9]], [[3, 3, 4, 5],[6, 7, 8, 9]]])#创建三维数组
print(array3[0:1,0:2,0:2])
print(array3[0:1,0:2,(0,1,2)])
[[[1 3]
[6 7]]]
[[[1 3 4]
[6 7 8]]]
程序中的array3[0:1,0:2,0:2]表示切片得到的array3中各维度索引分别为0,(0,1),(0,1)的数组,array3[0:1,0:2,(0,1,2)]表示切片得到array3中各维度索引分别为0,(0,1),(0,1,2)的数组。
边学边练:
创建一个3*2*4的三维数组,并进行如下操作:
(1)输出其维数、元素个数。
(2)切片,三个维度对应索引分别为1,(0,1)(0,1)的数组。
9.2.1 NumPy运算
$$