大数跨境
0
0

Python数据分析(三)NumPy

Python数据分析(三)NumPy 数据分析不是个事儿
2019-04-02
0
导读:十周入门数据分析(二十一)

此文是《10周入门数据分析》系列的第21篇

想了解学习路线,可以先阅读“10周计划”

前两篇讲了Python的基础,今天开始进入Python数据分析工具的教程。

Python数据分析绝对绕不过的四个包是numpy、scipy、pandas还有matplotlib

numPy是Python数值计算最重要的基础包,大多数提供科学计算的包都是用numPy的数组作为构建基础。专门用来处理矩阵,它的运算效率比列表更高效。

scipy是基于numpy的科学计算包,包括统计、线性代数等工具。

pandas是基于numpy的数据分析工具,能够快速的处理结构化数据的大量数据结构和函数。

matplotlib 是最流行的用于绘制数据图表的 Python 库。

本文先分享NumPy包。


NumPy 的 ndarray:多维数组对象

numpy的数据结构是n维的数组对象,叫做ndarray。可以用这种数组对整块数据执行一些数学运算,其语法跟标量元素之间的运算一样。

创建并操作多维数组:


ndarray对象中所有元素必须是相同类型的,每个数组都有一个shapedtype

  • shape :表示各维度大小的元组

  • dtype :说明数组数据类型的对象


创建 ndarray:一种多维数组对象

创建数组最简单的办法就是使用 array 函数,它接受一切序列型对象(包括其它数组),然后产生一个新的NumPy数组(含有原来的数据)。

np.array会尝试为新建的这个数组推断出一个较为合适的数据类型,这个数据类型保存在一个特殊的dtype对象中。

zeros 和 ones 也分别可以创建指定大小的全 0 或全 1 数组,empty 可以创建一个没有任何具体值的数组(它返回的都是一些未初始化的垃圾值):


arange是 Python 内置函数range的数组版,np.arange返回间隔均匀的一些值。


ndarray 的数据类型

dtype(数据类型)是一个特殊的对象,它含有 ndarray 将一块内存解释为特定数据类型所需的信息。

需要知道你所处理的数据的大致类型是浮点数复数整数布尔值字符串,还是普通的 python 对象。当需要控制数据在内存和磁盘中的存储方式时,就得了解如何控制存储类型。

可通过ndarrayastype方法显示地转换其dtype

若将浮点数转换成整数,则小数部分将会被截断。

若某字符串数组表示的全是数字,可用astype将其转换为数值形式:

这里没写 np.float64 只写了 float,但是NumPy会将 Python 类型映射到等价的dtype上。

数组的dtype的另一个用法


int_array变成了和calibers一样的浮点型数组

用简洁类型的代码表示dtype

u4(unit32):无符号的 32 位(4个字节)整型。

调用astype无论如何都会创建出一个新的数组(原始数据的一份拷贝)。

浮点数只能表示近似的分数值,在复杂计算中可能会积累一些浮点错误,因此比较操作只在一定小数位以内有效。


数组和标量之间的运算

数组:可对数据执行批量运算(不用编写循环即可)。这通常叫做矢量化(vectorization)。

  • 大小相等的数组之间,它们之间任何的算术运算都会应用到元素级(每个元素都做这个运算了),数组与标量的算术运算也是。

  • 不同大小的数组之间的运算叫做广播(broadcasting)

基本的索引和切片

数据不会被复制,任何修改都直接改了原数组。

如果仅是要一份副本,则用 .copy()

对二维数组单个元素的索引:

这两种方式等价。

arr2d[2],则输出的是一维数组[7,8,9]。

2*2*3的数组(2组2行3列):


切片索引


布尔型索引

需要先引入:from numpy.random import randn

或将代码改成:data = np.random.randn(7, 4)

布尔型数组的长度必须跟被索引的轴长度一致。每个名字对应 data 数组一行。

对条件进行否定的两种方式:



组合应用多个布尔条件,可使用&|等布尔算术运算符:

通过布尔型索引选取数组中的数组,将总是创建数据的副本,即使返回一模一样的数组也是一样。

通过布尔型数组设置值:

通过一维布尔数组设置整行或列的值:


花式索引

指利用整数数组进行索引。

np.empty((8,4))

Return a new array of given shape and type, without initializing entries.


for i in range(8):

arr[i] =

Return an object that produces a sequence of integers from start (inclusive)

to stop (exclusive) by step.



为了以特定顺序选取行的子集,只需传入一个用于指定顺序的整数列表或 ndarray,使用负数索引会从末尾开始选取行(最后一行是 -1)。

一次传入多个索引组,返回一个一维数组:


取整列的两种方法,相当于给列排了顺序:

花式索引跟切片不一样,总是将数据复制到新数组中。


数组转置和轴对换

转置返回的是源数据的视图,不进行任何复制操作。数组有 transpose 方法,还有一个 T 属性来完成转置:


高维数组
Transpose 要一个轴编号:


arr是 2 组 2 行 4 列的数组,transpose的参数表示shape的形状,对于这个例子来说,即2[0]2[1]4[2]transpose(1,0,2)转置后变为2[1]2[0]4[2],看起来仍是 2 组 2 行 4 列的形状,但数组内的元素经过转换后索引已经改变,也要遵循(1,0,2)的顺序。如转置前的数组arr[0,1,0]索引值为 4,转置后的数组arr'[1,0,0],索引值才为 4。其它同理。

ndarray 的 swapaxes 方法接受一对轴编号且返回源数据的视图:


转置后的数组arr.T为 4[2] 组 2[1] 行 2[0] 列数组,swapaxes(1,2)就是将第二个维度(中括号内数字)和第三个维度交换,即转换为 2 组 4 行 2 列。


通用函数:快速的元素级数组函数

通用函数(即 ufunc)是一种对ndarray中的数据执行元素级运算的函数,就是一些简单函数。


利用数组进行数据处理

用数组表达式代替循环的做法,通常被称为矢量化。NumPy 数组将多种数据处理任务表述为数组表达式。



np.meshgrid函数接受两个一维数组,并产生两个二维矩阵(对应于两个数组中所有的(x, y)对。


将条件逻辑表述为数组运算

np.wherea函数是三元表达式x if condition else y的矢量化版本。


np.where的第二个和第三个参数不必是数组,传递给where的数组大小可以不相等,甚至可以是标量值。在数据分析工作中,where通常用于根据另一个数组而产生一个新的数组。


用where表述出更复杂的逻辑:(where的嵌套)


用于布尔型数组的方法

有两个方法anyall


排序

多维数组可以在任何一个轴向上进行排序,只需将轴编号传给sort

顶级方法np.sort返回的数组已排序的副本,就地排序则会修改数组。


唯一化以及其他的集合逻辑


np.unique找出数组中的唯一值并返回已排序的结果。


np.in1d用于测试一个数组的值在另一个数组的情况。


随机数生成

numpy.random模块多了用于高效生产多种概率分布的样本值的函数(用来生成大量样本值)。

到这里,numpy的基础就讲解的差不多了,明后天将讲解pandas和matplotlib。更深入的应用,后面也会分享实际应用这些包得数据分析,欢迎关注!





往期内容

学习计划 | 10周入门数据分析

第一周(思维篇1):如何炼就数据分析的思维?

第一周(思维篇2)数据分析惯用的5种思维方法

第二周(Excel进阶):数据分析必掌握的43个Excel函数

第二周(Excel分析):如何用Excel做一次数据分析

第三周(数据库SQL):写给新人的数据库入门指南

第三周(SQL语句):零基础快速学习SQL,2天足矣

第四周(统计学):数据分析必掌握的统计学知识

第四周(统计学):不可不知的描述性统计

第四周(统计学):概率分布,先懂这6个

第四周(统计学):抽样之前,先假设检验

第五周(数据分析软件应用):数据分析工具怎么选?10大谏言

第五周(数据分析软件应用):这可能是今年最值得推荐的数据分析工具

第六周(数据可视化):10分钟做一个高端数据可视化,看完你也会!

第六周(数据可视化):掌握这22个布局和配色技巧,90%的人都能做出酷炫可视化!

第七周(分析模型):分析师需要掌握的25个商业模型(一)

第七周(分析模型):分析师需要掌握的25个商业模型(二)

第七周(分析模型):手把手教你搭建RFM客户价值分析模型

第八周(Python):Python数据分析(一)分析环境&数据结构

第八周(Python):Python数据分析(二)函数基础


最后,觉得文章有价值,右下角点“好看”并转发朋友圈,你们的支持是我更文的动力!



【声明】内容源于网络
0
0
数据分析不是个事儿
分享数据人的干货!
内容 1307
粉丝 0
数据分析不是个事儿 分享数据人的干货!
总阅读59
粉丝0
内容1.3k