Python数据可视化之美:专业图表绘制指南(全彩)
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

第2章 数据处理基础

2.1 NumPy:数值运算

NumPy是Numerical Python的简称,是高性能计算和数据分析的基础包。ndarray是NumPy的核心功能,其含义为n-dimensional array,即多维数组。数组与列表之间的主要区别为:数组是同类的,即数组的所有元素必须具有相同的类型;相反,列表可以包含任意类型的元素。使用NumPy的函数可以快速创建数组,远比使用基本库的函数节省运算时间。NumPy在使用前需要导入,约定俗成的导入方法为:

2.1.1 数组的创建

数组(ndarray)由实际数据和描述这些数据的元素组成,可以使用*.shape查看数组的形状,使用*.dim查看数组的维数。而向量(vector)即一维数组,也是最常用的数组之一。通过NumPy的函数创建一维向量与二维数组常用的方法如表2-1-1所示。数组可由列表构造,也可以通过*.tolist方法转换列表。

表2-1-1 数组array的创建

NumPy支持的数据类型有:bool(布尔)、int8(-128~127的整数)、int16、int32、int64、uint8(0~255的无符号整数)、uint16、uint32、uint64、float16(5位指数10位尾数的半精度浮点数)、float32、float64等。可以使用*.astype()函数实现对数组数据类型的转换。

2.1.2 数组的索引与变换

Python数组的索引与切片使用中括号“[]”选定下标来实现,同时采用“:”分割起始位置与间隔,用“,”表示不同维度,用“…”表示遍历剩下的维度(见表2-1-2)。使用reshape()函数可以构造一个3行2列的二维数组:

表2-1-2 数组的索引与变换

其中,NumPy的ravel()和flatten()函数所要实现的功能是一致的,都是将多维数组降为一维数组。两者的区别在于返回拷贝(copy)还是返回视图(view),numpy.flatten()返回一份拷贝,对拷贝所做的修改不会影响原始矩阵,而numpy.ravel()返回的是视图,会影响原始矩阵。

数组的排序也尤为重要。NumPy提供了多种排序函数,比如sort(直接返回排序后的数组)、argsot(返回数组排序后的下标)、lexsort(根据键值的字典序排序)、msort(沿着第一个轴排序)、sort_complex(对复数按照先实后虚的顺序排序)等。具体如表2-1-3所示。

表2-1-3 数组的排序

2.1.3 数组的组合

NumPy数组的组合可以分为:水平组合(hstack)、垂直组合(vstack)、深度组合(dstack)、列组合(colume_stack)、行组合(row_stack)等(见表2-1-4)。其中,水平组合就是把所有参加组合的数组拼接起来,各数组行数应该相等,对于二维数组,列组合和水平组合的效果相同。垂直组合就是把所有组合的数据追加在一起,各数组列数应该一样,对于二维数组,行组合和垂直组合的效果一样。

表2-1-4 数组的组合

2.1.4 数组的统计函数

有时候,我们需要对数组进行简单的统计分析,包括数组的均值、中值、方差、标准差、最大值、最小值等。图2-1-1所示为3种不同数据分布的统计直方图分析:均值(红色实线)、中值(蓝色实线)、最大值(桔色圆圈)、最小值(绿色圆圈)。NumPy的简单统计函数如表2-1-5所示。示例数据:ary=np.arange(6),则数组ary为array([0,1,2,3,4,5])。

图2-1-1 不同数据分布的统计直方图分析:均值、中值、最大值、最小值

表2-1-5 简单统计函数