python—数据分析(认识numpy、NumPy最重要的一个特点就是其N维数组对象(ndarray)、切片和基本的索引、通用函数:快速的元素级数组函数、利用数组进行数据处理等等。。。)

本文介绍了Python数据分析库NumPy的基础知识,包括ndarray对象、数据类型、数组运算、索引切片、通用函数、线性代数、随机数生成等。NumPy的高效内存管理和矢量化运算使得处理大数据集变得快速便捷。通过实例展示了如何使用NumPy进行数据处理、文件输入输出以及模拟随机漫步,揭示了NumPy在数据分析中的强大功能。
摘要由CSDN通过智能技术生成

学习目标:

python学习三十一—简单的数据分析


学习内容:

1、认识numpy
2、NumPy最重要的一个特点就是其N维数组对象(ndarray)
3、切片和基本的索引
4、通用函数:快速的元素级数组函数
5、利用数组进行数据处理
6、用于数组的文件输入输出
7、线性代数
8、伪随机数生成
9、随机漫步


1、认识numpy

  • NumPy:(Numerical Python的简称)是Python数值计算最重要的基础包
  • NumPy的部分功能如下:

a、 ndarray,一个具有矢量算术运算和复杂广播能力的快速且节省空间的多维数组。
b、用于对整组数据进行快速运算的标准数学函数(无需编写循环)。
c、用于读写磁盘数据的工具以及用于操作内存映射文件的工具。
d、线性代数、随机数生成以及傅里叶变换功能。
e、用于集成由C、C++、Fortran等语言编写的代码的A C API

  • NumPy之于数值计算特别重要的原因之一,是因为它可以高效处理大数组的数据。这是因为:

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

1、考查100万整数的数组,numpy与python的处理能力

  • 基于NumPy的算法要比纯Python快10到100倍(甚至更快),并且使用的内存更少

在这里插入图片描述


2、NumPy最重要的一个特点就是其N维数组对象(ndarray )— 对象是一个快速而灵活的大数据集容器

1、 ndarray是一个通用的同构数据多维容器,其中的所有元素必须是相同类型的。每个数组都有一个shape(表示各维度大小的元组)和一个dtype(用于说明数组数据类型的对象)

  • 利用这种数组对整块数据执行一些数学运算,其语法跟标量元素之间的运算一样
  • 引入NumPy,然后生成一个包含随机数据的小数组进行数学运算:

在这里插入图片描述

2、创建ndarray
在这里插入图片描述

  • 创建数组最简单的办法就是使用array函数,接受一切序列型的对象(包括其他数组),然后产生一个新的含有传入数据的NumPy数组
  • 列表转换为一维数组:
    在这里插入图片描述
  • 嵌套列表创建二维数组:

NumPy数组arr2的两个维度的shape是从data2引入的

在这里插入图片描述

  • 除非特别说明(稍后将会详细介绍),np.array会尝试为新建的这个数组推断出一个较为合适的数据类型
    在这里插入图片描述
  • np.array之外,zeros和ones分别可以创建指定长度或形状的全0或全1数组,empty可以创建一个没有任何具体值的数组,arange是Python内置函数range的数组版
    在这里插入图片描述

3、ndarray的数据类型

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

调用astype总会创建一个新的数组(一个数据的备份),即使新的dtype与旧的dtype相同
在这里插入图片描述

  • 指定数组的类型
    在这里插入图片描述
  • 转换数组的数据类型
    整数转换
    在这里插入图片描述
    浮点数转换
    注意:浮点数转换成整数,则小数部分将会被截取删除
    在这里插入图片描述全是数字的字符串转数字在这里插入图片描述
    dtype的特殊属性带来的作用
    在这里插入图片描述简洁代码表示dtype
    在这里插入图片描述

4、Numpy数组的运算

  • 数组很重要,它使你不用编写循环即可对数据执行批量运算。NumPy用户称其为矢量化(vectorization),大小相等的数组之间的任何算术运算都会将运算应用到元素级

在这里插入图片描述

  • 数组与标量的算术运算会将标量值传播到各个元素
    在这里插入图片描述
  • 大小相同的数组之间的比较会生成布尔值数组
    在这里插入图片描述

3、基本的索引和切片

NumPy数组的索引是一个内容丰富的主题,因为选取数据子集或单个元素的方式有很多

1、一维数组的索引
在这里插入图片描述

2、切片

  • 将一个标量值赋值给一个切片时(如arr[5:8]=12),该值会自动传播(“广播”)到整个选区。跟列表最重要的区别在于,数组切片是原始数组的视图。意味着数据不会被复制,视图上的任何修改都会直接反映到源数组上

想要得到ndarray切片的一份副本而非视图,就需要明确地进行复制操作,eg:arr[5:8].copy()

  • [ : ]给切片[5 :8]所有元素赋值,并且广播到原数组上
    在这里插入图片描述

3、二维数组的索引
在这里插入图片描述

  • 在多维数组中,省略了后面的索引,返回对象会是一个维度低一点的ndarray(它含有高一级维度上的所有数据)
    在这里插入图片描述

4、切片索引
在这里插入图片描述

  • ndarray的切片语法跟Python列表一维对象差不多
    在这里插入图片描述
  • 对arr2d切片处理
    在这里插入图片描述

注:只有冒号表示取整个轴
在这里插入图片描述

  • 对切片表达式的赋值操作也会被扩散到整个选区
    在这里插入图片描述

5、布尔型索引

  • 由一个存储名字的数组利用numpy.random的randn函数生成一些正态分布的随机数据

注意:Python关键字and和or在布尔型数组中无效。要使用&与|

在这里插入图片描述
在这里插入图片描述

  • 布尔型数组设置值—一维布尔数组设置整行或列的值
    在这里插入图片描述

6、花式索引

  • 花式索引(Fancy indexing)是一个NumPy术语,是利用整数数组进行索引
    在这里插入图片描述
  • 传入多个索引数组,会返回一个一维数组

选出的是元素(1,0)、(5,3)、(7,1)和(2,2)
在这里插入图片描述
无论数组是多少维的,花式索引总是一维的

  • 花式索引选取矩阵数组

在这里插入图片描述

7、数组转置和轴对换

  • 转置是重塑的一种特殊形式,返回的是源数据的视图(不会进行任何复制操作)
  • 数组的T属性
    在这里插入图片描述
  • 在计算数组的内积时,会用到T属性
    在这里插入图片描述
  • 高维数组,transpose需要得到一个由轴编号组成的元组才能对这些轴进行转置
    在这里插入图片描述
  • 对应T属性,还有ndarray的swapaxes方法需要接受一对轴编号
    在这里插入图片描述

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

在这里插入图片描述
在这里插入图片描述

1、通用函数(即ufunc)是一种对ndarray中的数据执行元素级运算的函数

可以将其看做简单函数(接受一个或多个标量值,并产生一个或多个标量值)的矢量化包装器

在这里插入图片描述

  • 2个数组(因此也叫二元(binary)ufunc),并返回一个结果数组
    在这里插入图片描述
    在这里插入图片描述

5、利用数组进行数据处理

NumPy数组可以将许多种数据处理任务表述为简洁的数组表达式(否则需要编写循环),用数组表达式代替循环的做法,通常被称为矢量化

  • 一般来说,矢量化数组运算要比等价的纯Python方式快上一两个数量级(甚至更多),尤其是各种数值计算

1、np.meshgrid函数接受两个一维数组,并产生两个二维矩阵(对应于两个数组中所有的(x,y)对)
在这里插入图片描述

  • 利用matplotlib函数创建二维数组的可视化
    在这里插入图片描述

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

1、根据cond中的值选取xarr和yarr的值:当cond中的值为True时,选取xarr的值,否则从yarr中选取
在这里插入图片描述

  • 用纯python表达
    在这里插入图片描述
  • 用np.where方法

where通常用于根据另一个数组而产生一个新的数组

在这里插入图片描述

  • 一个随机数据组成的矩阵,用where将正值替换为2,负值替换为-2
    在这里插入图片描述
  • 标量与数组联合,可以使用np.where方法,将arr中的正值替换为2
    在这里插入图片描述

5-3、数学和统计方法

  • 通过数组上的一组数学函数对整个数组或某个轴向的数据进行统计计算
    在这里插入图片描述

1、对正态分布的随机数据做聚类统计
在这里插入图片描述

  • mean和sum这类的函数接受一个axis选项参数,用于计算该轴向上的统计值,结果是一个少一维的数组
    在这里插入图片描述
  • cumsum和cumprod之类的方法则不聚合,而是产生一个由中间结果组成的数组
    在这里插入图片描述
  • 累加函数(如cumsum),根据每个低维切片聚合计算
    在这里插入图片描述

5-4、用于布尔型数组的方法

  • 布尔值会被强制转换为1(True)和0(False),sum经常被用来对布尔型数组中的True值计数
    在这里插入图片描述

5-5、排序

1、NumPy数组可以通过sort方法就地排序
在这里插入图片描述


5-6、唯一化以及其它的集合逻辑

在这里插入图片描述

  • NumPy提供了一些针对一维ndarray的基本集合运算
    在这里插入图片描述

6、用于数组的文件输入输出

  • NumPy能够读写磁盘上的文本数据或二进制数据

1、np.save和np.load是读写磁盘数组数据的两个主要函数
在这里插入图片描述


7、线性代数

在这里插入图片描述

1、线性代数(如矩阵乘法、矩阵分解、行列式以及其他方阵数学等)是任何数组库的重要组成部分
在这里插入图片描述

2、 numpy.linalg中有一组标准的矩阵分解运算以及诸如求逆和行列式之类的东西

表达式X.T.dot(X)计算X和它的转置X.T的点积

在这里插入图片描述


8、伪随机数生成

  • numpy.random模块对Python内置的random进行了补充,增加了一些用于高效生成多种概率分布的样本值的函数
    在这里插入图片描述

1、伪随机数都是通过算法基于随机数生成器种子,在确定性的条件下生成,可以用NumPy的np.random.seed更改随机数生成种子
在这里插入图片描述


9、随机漫步

  • 通过模拟随机漫步来说明如何运用数组运算

1、简单的随机漫步的例子:从0开始,步长1和-1出现的概率相等

  • 通过内置的random模块以纯Python的方式实现1000步的随机漫步
    在这里插入图片描述
  • np.random模块一次性随机产生1000个“掷硬币”结果(即两个数中任选一个),将其分别设置为1或-1,然后计算累计和
    在这里插入图片描述
  • 随机漫步需要多久才能距离初始0点至少10步远(任一方向均可)。np.abs(walk)>=10可以得到一个布尔型数组,它表示的是距离是否达到或超过10,想要知道的是第一个10或-10的索引。可以用argmax,它返回的是该布尔型数组第一个最大值的索引(True就是最大值)
    在这里插入图片描述

9-1 一次模拟多个随机漫步

  • 模拟多个随机漫步过程(比如5000个),给numpy.random的函数传入一个二元元组就可以产生一个二维数组,可以一次性计算5000个随机漫步过程(一行一个)的累计和
    在这里插入图片描述
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值