Python数据分析基础篇--NumPy

大家好,我是小研,一个在研究生路上的苦行僧。今天给大家分享一下Python数据分析的Numpy基础,开启数据分析的基础篇。

NumPy基础

NumPy(Numerical Python的简称)是Python数值计算最重要的基础包。大多数提供科学计算的包都是用NumPy的数组作为构建基础。
Numpy功能之前也介绍过,现在就简单介绍一下

  • ndarray,一个具有矢量算术运算和复杂广播能力的快速且节省空间的多维数组。
  • 用于对整组数据进行快速运算的标准数学函数(无需编写循环)
  • 线性代数、随机数生成以及傅里叶变换功能。
  • 是一个成熟的API,集成了C、C++、Fortran等语言编写的代码。

但是在数据分析方面,NumPy本身并没有提供多么高级的数据分析功能,理解NumPy数组以及面向数组的计算将有助于你更加高效地使用诸如pandas之类的工具。
其中主要的功能:

  • 用于数据整理和清理、子集构造和过滤、转换等快速的矢量化数组运算。
  • 常用的数组算法,如排序、唯一化、集合运算等。
  • 高效的描述统计和数据聚合/摘要运算。
  • 用于异构数据集的合并/连接运算的数据对齐和关系型数据运算。
  • 将条件逻辑表述为数组表达式(而不是带有if-elif-else分支的循环)。
  • 数据的分组运算(聚合、转换、函数应用等)

在数值计算中,NumPy可以高效处理大数组的数据。

  • NumPy是在一个连续的内存块中存储数据,独立于其他Python内置对象。NumPy的C语言编写的算法库可以操作内存,而不必进行类型检查或其它前期工作。比起Python的内置序列,NumPy数组使用的内存更少。
  • NumPy可以在整个数组上执行复杂的计算,而不需要Python的for循环。

下面是具体例子:
我们考察了包含一百万的数组和一个等价的Python列表
我们看下图,各个序列都乘以2
在这里插入图片描述
最后Wall time结果,用numpy 和for差距还是挺明显的,在40倍左右,毕竟使用的内存比较少。

1、数组对象ndarray

NumPy最重要的一个特点就是其N维数组对象(即ndarray),该对象是一个快速而灵活的大数据集容器。-----是存储单一数据类型的多维数组

创建ndarray

创建数组比较简单的方法就是array函数
关于基本功能,创建一维、二维数组、查看数组结构如下图所示
在这里插入图片描述
查看数组类型、个数、每个元素大小的话用dtype、size、itemsize
在这里插入图片描述除np.array之外,还有一些函数也可以新建数组。比如,zeros和ones分别可以创建指定长度或形状的全0或全1数组。empty可以创建一个没有任何具体值的数组。
在这里插入图片描述
arange是Python内置函数range的数组版:
在这里插入图片描述

2、数组数据类型

NumPy基本数据类型与其取值范围
在这里插入图片描述
数组数据类型转换
可以通过ndarray的astype方法明确地将一个数组从一个dtype转换成另一个dtype:
在这里插入图片描述
最后将int32用astype转换成float64,将整数转换成浮点数
如果我们将浮点数转换成整数,情况会怎么样呢?话不多说
在这里插入图片描述
会发现,小数点后面的经过转换为整数后直接删除掉

3、Numpy数组的运算

NumPy用户称其为矢量化(vectorization)。大小相等的数组之间的任何算术运算都会将运算应用到元素级:
在这里插入图片描述
同时也可以看出 数组与标量的运算最后也会是标量值
在这里插入图片描述
同时如果维度大小相等的直接可以进行比较,那么也会生成False、True
在这里插入图片描述
如果维度大小不等,那么做运算叫广播
一维数组的广播机制
在这里插入图片描述
二维数组的广播机制
在这里插入图片描述

4、基本的索引和切片

NumPy数组的索引是一个内容丰富的主题,因为选取数据子集或单个元素的方式有很多。
一维数组索引
在这里插入图片描述
在这里插入图片描述
这是比较基础以及简单的,同时也很好理解的。
多维数组索引
在这里插入图片描述
下面来实践一下
在这里插入图片描述
通过上面可以看出,各索引位置上的元素不再是标量而是一维数组,那么如果想对各个元素进行递归访问,那要怎么做呢?
在这里插入图片描述
可以传入一个以逗号隔开的索引列表来选取单个元素即可
相信大家对于数组也并不陌生, 下图说明了二维数组的索引方式。轴0作为行,轴1作为列。
在这里插入图片描述
切片索引
ndarray的切片语法跟Python列表这样的一维对象差不多
在这里插入图片描述
如果在2维数组中,切片方式还一样吗?
在这里插入图片描述
表达式arr2d[:2]可以被认为是“选取arr2d的前两行”.
可以看出,它是沿着第0轴(即第一个轴)切片的,切片是沿着一个轴向选取元素的。
在这里插入图片描述
表达式arr2d[:2,1:]表示的意思是,选取前两行,并且去掉列表第一个元素,可以看出通过将整数索引和切片混合,可以得到低维度的切片。
在这里插入图片描述
通过上图可以很好的说明根据切片可以得到自己想要的维度以及内容。

如果我们想要用切片进行赋值操作也是比较简单
在这里插入图片描述
通用函数
通用函数(即ufunc)是一种对ndarray中的数据执行元素级运算的函数。
许多ufunc都是简单的元素级变体,如sqrt和exp:
sqrt----平方根 exp —计算各元素的指数ex
在这里插入图片描述
其它具体函数功能看下图在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

利用数组进行数据处理

其实上面都是一些基础内容,下面主要讲一下Numpy在数据分析的一些应用。
数学和统计方法
可以通过数组上的一组数学函数对整个数组或某个轴向的数据进行统计计算
sum、mean以及标准差std等聚合计算(aggregation,通常叫做约简(reduction))既可以当做数组的实例方法调用,也可以当做顶级NumPy函数使用。
在这里插入图片描述
在多维数组中,累加函数(如cumsum)返回的是同样大小的数组,但是会根据每个低维的切片沿着标记轴计算部分聚类:
在这里插入图片描述
表4-5列出了全部的基本数组统计方法。
在这里插入图片描述
在这里插入图片描述
排序
NumPy数组也可以通过sort方法就地排序:
在这里插入图片描述
多维数组可以在任何一个轴向上进行排序,只需将轴编号传给sort即可:
在这里插入图片描述
唯一化(np.unique)
用于找出数组中的唯一值并返回已排序的结果:
在这里插入图片描述
可以跟纯Python代码来对比一下
在这里插入图片描述
另一个函数np.in1d用于测试一个数组中的值在另一个数组中的成员资格,返回一个布尔型数组:在这里插入图片描述
NumPy中的集合函数请参见表4-6。
在这里插入图片描述
数组文件的输入输出
NumPy能够读写磁盘上的文本数据或二进制数据。
np.save和np.load是读写磁盘数组数据的两个主要函数。
在这里插入图片描述
通过np.savez可以将多个数组保存到一个未压缩文件中,将数组以关键字参数的形式传入即可:
在这里插入图片描述
如果要将数据压缩,可以使用numpy.savez_compressed:
在这里插入图片描述
线性代数
线性代数(如矩阵乘法、矩阵分解、行列式以及其他方阵数学等)是任何数组库的重要组成部分。
NumPy提供了一个用于矩阵乘法的dot函数(既是一个数组方法也是numpy命名空间中的一个函数):
在这里插入图片描述
同时x.dot(y)等价于np.dot(x, y)
一个二维数组跟一个大小合适的一维数组的矩阵点积运算之后将会得到一个一维数组:
在这里插入图片描述
下面引入numpy.linalg,有一组标准的矩阵分解运算以及诸如求逆和行列式之类的东西。
在这里插入图片描述
表4-7中列出了一些最常用的线性代数函数。
在这里插入图片描述
伪随机数生成
numpy.random模块对Python内置的random进行了补充,增加了一些用于高效生成多种概率分布的样本值的函数。
下图我们可以用normal来得到一个标准正态分布的4×4样本数组:在这里插入图片描述
而Python内置的random模块则只能一次生成一个样本值。从下面的测试结果中可以看出,如果需要产生大量样本值,numpy.random快了不止一个数量级:
下面就对比一下,可以清晰的看出来numpy.random速度更快
在这里插入图片描述
表4-8列出了numpy.random中的部分函数。
在这里插入图片描述
在这里插入图片描述
最后再用一个示例:随机漫步

import random
position =0 
walk = [position]
steps =1000
for i in range(steps):
	step =1 if random.randint(0,1) else -1
	position += step
	walk.append(position)

在这里插入图片描述

我是看的这个简书《利用Python进行数据分析·第2版》,链接在下面,需要的可以看这个
链接:https://www.jianshu.com/p/a380222a3292

最后,感谢你能看到最后,我们大家一起进步!
每天进步一点点,积少成多,最后总能积累更多的能量,一起加油!

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

研行笔录

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值