![Python数据可视化之美:专业图表绘制指南(全彩)](https://wfqqreader-1252317822.image.myqcloud.com/cover/380/31186380/b_31186380.jpg)
第2章 数据处理基础
2.1 NumPy:数值运算
NumPy是Numerical Python的简称,是高性能计算和数据分析的基础包。ndarray是NumPy的核心功能,其含义为n-dimensional array,即多维数组。数组与列表之间的主要区别为:数组是同类的,即数组的所有元素必须具有相同的类型;相反,列表可以包含任意类型的元素。使用NumPy的函数可以快速创建数组,远比使用基本库的函数节省运算时间。NumPy在使用前需要导入,约定俗成的导入方法为:
![](https://epubservercos.yuewen.com/FF0186/16896237904364306/epubprivate/OEBPS/Images/38370_28_1.jpg?sign=1739139744-lKdyN6DjrfjKQfgB3yRvleBwuSUkeor7-0-0e890c7344b803090048cadc0daa206b)
2.1.1 数组的创建
数组(ndarray)由实际数据和描述这些数据的元素组成,可以使用*.shape查看数组的形状,使用*.dim查看数组的维数。而向量(vector)即一维数组,也是最常用的数组之一。通过NumPy的函数创建一维向量与二维数组常用的方法如表2-1-1所示。数组可由列表构造,也可以通过*.tolist方法转换列表。
表2-1-1 数组array的创建
![](https://epubservercos.yuewen.com/FF0186/16896237904364306/epubprivate/OEBPS/Images/38370_28_2.jpg?sign=1739139744-UI4VhFtMURVpXyOKnxAU6lJmeopDTrv7-0-09673751a07224bc307178d1397bce20)
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列的二维数组:
![](https://epubservercos.yuewen.com/FF0186/16896237904364306/epubprivate/OEBPS/Images/38370_29_1.jpg?sign=1739139744-Za7cu3ukbuVCaVlWUHyKKlT4gc0OKISp-0-f61c9195994eba23197d636b8423863e)
表2-1-2 数组的索引与变换
![](https://epubservercos.yuewen.com/FF0186/16896237904364306/epubprivate/OEBPS/Images/38370_29_2.jpg?sign=1739139744-dLJYZdn5cCmsBPRJCu6u7tvCGOd2g8bS-0-98c7e0bcf91eb85152e5c46b7a4ce9c8)
其中,NumPy的ravel()和flatten()函数所要实现的功能是一致的,都是将多维数组降为一维数组。两者的区别在于返回拷贝(copy)还是返回视图(view),numpy.flatten()返回一份拷贝,对拷贝所做的修改不会影响原始矩阵,而numpy.ravel()返回的是视图,会影响原始矩阵。
数组的排序也尤为重要。NumPy提供了多种排序函数,比如sort(直接返回排序后的数组)、argsot(返回数组排序后的下标)、lexsort(根据键值的字典序排序)、msort(沿着第一个轴排序)、sort_complex(对复数按照先实后虚的顺序排序)等。具体如表2-1-3所示。
表2-1-3 数组的排序
![](https://epubservercos.yuewen.com/FF0186/16896237904364306/epubprivate/OEBPS/Images/38370_30_1.jpg?sign=1739139744-7s5UahZ6ywpFmVD4tobhMjqYeZXYVrKG-0-4d097d8a614cc56f52b7312664692f4b)
2.1.3 数组的组合
NumPy数组的组合可以分为:水平组合(hstack)、垂直组合(vstack)、深度组合(dstack)、列组合(colume_stack)、行组合(row_stack)等(见表2-1-4)。其中,水平组合就是把所有参加组合的数组拼接起来,各数组行数应该相等,对于二维数组,列组合和水平组合的效果相同。垂直组合就是把所有组合的数据追加在一起,各数组列数应该一样,对于二维数组,行组合和垂直组合的效果一样。
表2-1-4 数组的组合
![](https://epubservercos.yuewen.com/FF0186/16896237904364306/epubprivate/OEBPS/Images/38370_30_2.jpg?sign=1739139744-8YCtk8BpOb9YDMuL8Q8XgQ3vJKU2oCN8-0-8e1df75503ed6d3a03fe41bd5b3d46d9)
2.1.4 数组的统计函数
有时候,我们需要对数组进行简单的统计分析,包括数组的均值、中值、方差、标准差、最大值、最小值等。图2-1-1所示为3种不同数据分布的统计直方图分析:均值(红色实线)、中值(蓝色实线)、最大值(桔色圆圈)、最小值(绿色圆圈)。NumPy的简单统计函数如表2-1-5所示。示例数据:ary=np.arange(6),则数组ary为array([0,1,2,3,4,5])。
![](https://epubservercos.yuewen.com/FF0186/16896237904364306/epubprivate/OEBPS/Images/38370_31_2.jpg?sign=1739139744-vA0O11qCxN0VOV0kNQuV9FUJuur8zHBF-0-06b76292daee9ca1e01be2b6ed41dc76)
图2-1-1 不同数据分布的统计直方图分析:均值、中值、最大值、最小值
表2-1-5 简单统计函数
![](https://epubservercos.yuewen.com/FF0186/16896237904364306/epubprivate/OEBPS/Images/38370_31_3.jpg?sign=1739139744-neYQdwsyc9oFgB3Zx6gItHfuGoYkPFPN-0-bfba3a7b291d8f323bda275a3f1a57c2)