本人小白一枚,最近在精读《利用Python进行数据分析》虽然书中的代码实现是python2版本的,但准备手工把其中的代码用Python3敲一遍。
零、 Numpy简介
Numpy(Numerical Python的简称)是高性能科学计算和数据分析的基础包。其部分功能如下:
ndarray,一个具有矢量算术运算和复杂广播能力的快速且节省空间的多维数组。
用于对整组数据进行快速运算的标准数学函数(无需编写循环)。
用于读写磁盘数据的工具以及用于操作内存映射文件的工具。
线性代数、随机数生成以及傅里叶变换功能。
用于集成由C、C++、Fortran等语言编写的代码的工具。
一、NumPy的ndarray:一种多维数组对象
每个数组都有一个shape(一个表示各维度大小的元组)和一个dtype(一个用于说明数组数据类型的对象)
1、创建ndarray
除np.array之外,还有一些函数也可以新建数组。比如,zeros和ones分别可以创建指定长度或形状的全0或全1数组。empty可以创建一个没有任何具体值的数组。要用这些方法创建多维数组,只需传入一个表示形状的元组即可:
第一个参数表示数组的维度
注意:认为np.empty会返回全0数组的想法是不安全的。很多情况下(如前所示),它返回的都是一些未初始化的垃圾值。arange是Python内置函数range的数组版:
2、ndarray的数据类型
dtype(数据类型)是一个特殊的对象,它含有ndarray将一块内存解释为特定数据类型所需的信息。
dtype是NumPy如此强大和灵活的原因之一。多数情况下,它们直接映射到相应的机器表示,这使得“读写磁盘上的二进制数据流”以及“集成低级语言代码(如C、Fortran)”等工作变得更加简单。数值型dtype的命名方式相同:一个类型名(如float或int),后面跟一个用于表示各元素位长的数字。标准的双精度浮点值(即Python中的float对象)需要占用8字节(即64位)。因此,该类型在NumPy中就记作float64。下图列示了NumPy所支持的全部数据类型。
注意:记不住这些NumPy的dtype也没关系,新手更是如此。通常只需要知道你所处理的数据的大致类型是浮点数、复数、整数、布尔值、字符串,还是普通的Python对象即可。当你需要控制数据在内存和磁盘中的存储方式时(尤其是对大数据集),那就得了解如何控制存储类型。
数据类型
可以通过ndarray的astype方法显式地转换其dtype。
注意:浮点数(比如float64和float32)只能表示近似的分数值。在复杂计算中,由于可能会积累一些浮点错误,因此比较操作只能在一定小数位以内有效。
3、数组和标量之间的运算
数组很重要,因为它使你不用编写循环即可对数据执行批量运算。这通常就叫做矢量化(vectorization)。大小相等的数组之间的任何算术运算都会将运算应用到元素级。
4、基本的索引和切片
从表面上看,它们跟Python列表的功能差不多,跟列表最重要的区别在于,数组切片是原始数组的视图。这意味着数据不会被复制,视图上的任何修改都会直接反映到源数组上:
5、切片索引
ndarray的切片语法跟Python列表这样的一维对象差不多,
可以一次性传入多个切片,就像传入多个索引那样。
6、布尔型索引
通过布尔型数组设置值是一种经常用到的手段。为了将data中的所有负值都设置为0,我们可以这样:
7、花式索引
指的是利用整数数组进行索引,以特定的顺序选取子行。
如果想要选出的是矩形区域,有两种方法,一种是data[[1,3]][:,[1,3]],相当于先在轴0做一次索引,然后再在轴1做一次索引。另一种是用np.ix函数将两个一维数组转化成选取矩形的索引器:data[np.ix([1,3],[1,3])]。
用np.ix_函数,它可以将两个一维整数数组转换为一个用于选取方形区域的索引器。
8、数组转置和轴对换
转置(transpose)是重塑的一种特殊形式,它返回的是源数据的视图(不会进行任何复制操作)。数组不仅有transpose方法,还有一个特殊的T属性。
二、通用函数:快速的元素级数组函数
通用函数(即ufunc)是一种对ndarray中的数据执行元素级运算的函数。你可以将其看做简单函数(接受一个或多个标量值,并产生一个或多个标量值)的矢量化包装器。
一元函数:
二元函数:
2.1 利用数组进行数据处理
用数组表达式代替循环的做法,通常被称为矢量化。
2.2 将条件逻辑表述为数组运算
numpy.where函数是三元表达式x if condition else y的矢量化版本。
如:
假设我们想要根据cond中的值选取xarr和yarr的值:当cond中的值为True时,选取xarr的值,否则从yarr中选取。列表推导式的写法应该如下所示:
使用np.where
2.3 数学和统计方法
可以通过数组上的一组数学函数对整个数组或某个轴向的数据进行统计计算。sum、mean以及标准差std等聚合计算(aggregation,通常叫做约简(reduction))既可以当做数组的实例方法调用,也可以当做顶级NumPy函数使用:
2.4 用于布尔型数组的方法
布尔值会被强制转换为1(True)和0(False)。因此,sum经常被用来对布尔型数组中的True值计数:
2.5 排序
跟Python内置的列表类型一样,NumPy数组也可以通过sort方法就地排序:
2.6 唯一化
2.7 用于数组的文件输入输出
Numpy能够读写磁盘上的文本数据或二进制数据。
2.8 线性代数
领取专属 10元无门槛券
私享最新 技术干货