“Numpy数据分析与挖掘:高效学习重点技能“

目录

# 开篇

# 补充

zeros & ones

eye

1. numpy数组的创建

1.1 array

1.2 range

1.3 arange

1.4 常见的数据类型

1.5 astype

1.6 random.random() & round

2. numpy数组计算和数组计算

2.1 reshape

2.2 shape

2.3 将一维数组变成多维数组

2.4 指定一维数组成为多维数组

2.5 使用代表24行,仅1列

2.6 将数组变成一维数组

2.7 flatten

2.8 数组和数组计算

2.9 广播原则

2.9.1 数组t5 和数组t6 相加

2.9.2 数组t5 和数组t8 相减

2.10 NumPy 中轴( axis )的概念及其应用

2.11 transpose

2.12 swapaxes

3. numpy读取本地数据

3.1 如何使用 NumPy 读取 CSV 文件

3.2 示例:读取 YouTube 视频数据

3.3 loadtxt

4. numpy中的索引和切片

4.1 行切片

4.1.1 t1[2:]

4.1.2 t1[[2, 8, 10]]

4.1.3 取不连续的多行

4.2 列切片

4.2.1 t1[:, 0]

4.2.2 t1[:, 2:]

4.2.3 t1[:, [0, 2]]

4.2.4 t1[2, 3]

4.2.5 t1[2:5, 1:4]

4.2.6 t1[[0, 2], [0, 1]]

4.2.7 numpy高级索引方式

4.2.8 t1[[0, 2, 2], [0, 1, 3]]

5. numpy中更多的索引方式

5.1 t1[:, 2:4] = 0

5.2 t1 < 15000

5.3 t1[t1 < 15000] = 10000

5.4 numpy中的三元运算符

5.4.1 np.where(t1 < 15000, 0, 10)

5.5 numpy中的clip裁剪

5.5.1 clip

6. numpy数据的拼接

6.1 vstack & hstack

6.2 数组的行列交换

6.3 将两组数据拼接在一起进行科学计算

7. numoy中的随机方法

7.1 argmax

7.2 获取最小值的位置

7.3 np.zeros((3, 4))

7.4 np.ones((3, 4))

7.5 eye

7.6 案例

7.6.1 获取最大值的位置

7.6.2 获取最小值的位置

7.7 numpy生成随机数

7.8 生成二维均匀分布的随机数组

7.9 生成二维标准正态分布随机数组

7.10 生成二维整数随机数组

7.11 生成二维均匀分布的随机数组

7.12 生成二维正态分布随机数组

7.13 设置随机数种子

8. numpy中的nan和inf

8.1 np.nan 和np.inf

8.2 count_nonzero & isnan

9. numpy常用统计方法

9.1 sum

9.2 nan与任何值计算都是nan

9.3 numpy中的nan的注意点

9.4 axis 参数

9.5 sum 求和

9.6 mean 均值

9.7 median 中值

9.8 max 最大值

9.9 min 最小值

9.10 ptp 极值范围

9.11 std 标准差

10. numpy中填充nan和youtube数据的练习

10.1 需求:统计行均值时,出现nan,如何处理nan的值?

10.1.1 模拟nan数据

10.1.2 实现

10.1.3 分析

10.2 需求:绘制出youybe的数据,制出评论数量的直方图

10.2.1 数据获取

10.2.2 直方图


# 开篇

参考:

  1. numpy:用来处理数值型的数据;

  2. pandas:用来处理数值,以及字符串,字典、列表等数据的;

# 补充

zeros & ones

np.zeros((t2.shape[0], 1)) & ones_data = np.ones((t2.shape[0], 1)) :构造全为0的数据,构造全为1的数据:

  • zeros_data = np.zeros((t2.shape[0], 1)) # 创建一个3行1列的数组,全为0
  • ones_data = np.ones((t2.shape[0], 1)) # 创建一个3行1列的数组,全为1
t2 = np.arange(12, 24).reshape(3, 4)
print(t2)
print("*" * 100)
zeros_data = np.zeros((t2.shape[0], 1))  # 创建一个3行1列的数组,全为0
print(zeros_data)
print("*" * 100)
ones_data = np.ones((t2.shape[0], 1))  # 创建一个3行1列的数组,全为1
print(ones_data)

eye

np.eye(3) # 创建一个3行3列的对角矩阵:

t2 = np.eye(3)  # 创建一个3行3列的对角矩阵
print(t2)

1. numpy数组的创建

1.1 array

np.array([1,2,3]) :创建numpy数组

import numpy as np

t1 = np.array([1, 2, 3])
print(t1)
print(type(t1))

1.2 range

range(10) :生成0-9的数组

# 默认生成0到9,十个数字
t2 = np.array(range(10))
print(t2)

1.3 arange

np.arange(4, 10, 2) :取4-10区间,步长为2

t3 = np.arange(4, 10, 2)
print(t3)

np.array(range(1, 4), dtype=float) :指定返回的类型为浮点数

t4 = np.array(range(1, 4), dtype=float)
print(t4)
print(t4.dtype)

1.4 常见的数据类型

类型 类型代码 说明
int8, uint8 i1, u1 有符号和无符号的8位(1个字节)整数
int16, uint16 i2, u2 有符号和无符号的16位(2个字节)整数
int32, uint32 i4, u4 有符号和无符号的32位(4个字节)整数
int64, uint64 i8, u8 有符号和无符号的64位(8个字节)整数
float16 f2 半精度浮点数
float32 f4或f 标准的单精度浮点数。与C的float兼容
float64 f8或d 标准的双精度浮点数。与C的double和Python的float对象兼容
float128 f16或g 扩展精度浮点数
complex64, complex128 c8, c16 分别用两个32位、64位或128位浮点数表示的复数
complex256 c32
bool ? 存储True和False值的布尔类型

1.5 astype

np.astype("int8") :调整数据类型

# numpy中的bool类型
t5 = np.array([1, 1, 0, 1, 0, 1], dtype=bool)
print(t5)
print(t5.dtype)

# 调整数据类型
t6 = t5.astype("int8")
print(t6)
print(t6.dtype)

1.6 random.random() & round

random.random() & np.round(t7, 2) :随机生成小数 & 保留后两位小数

# 随机生成10个小数
t7 = np.array([random.random() for i in range(10)])
print(t7)
print(t7.dtype)

# 执行后两位小数
t8 = np.round(t7, 2)
print("*" * 100)
print(t8)

2. numpy数组计算和数组计算

2.1 reshape

np.arange(100, 124).reshape(4, 6) :默认生成100, 124区间数字,形成一个4行6列的数组

t6 = np.arange(100, 124).reshape(4, 6)
print(t6)

2.2 shape

np.shape :返回数组的元组

t1 = np.arange(12)
print(t1)
print(t1.shape)  # (12,) 用元组返回数组的行数
print("*" * 100)

t2 = np.array([[1, 2, 3], [4, 5, 6]])
print(t2)
print(t2.shape)  # (2, 3) 用元组返回数组的行数2,返回3数组的列数
print("*" * 100)

t3 = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])
print(t3)
print(t3.shape)  # (2, 2, 2) 第一个2代表数组有两个块,每块有2行,每行有2列

2.3 将一维数组变成多维数组

np.reshape(3, 4) :将一维数组变成多维数组

t4 = np.arange(12)
print(t4)
print("*" * 100)
print(t4.reshape((3, 4)))  # 将t4一维数组变成3行4列的数组
print("*" * 100)
print(t4.reshape((3, 5)))  # 3行5列的数组,报错

2.4 指定一维数组成为多维数组

np.arange(24).reshape((2, 3, 4)) :指定一维数组成为多维数组

# 指定一维数组成为多维数组
t5 = np.arange(24).reshape((2, 3, 4))  # 2个块,每块3行,每行4列
print(t5)

注:有返回值,但是不会对自身数据进行修改;

可以使用:变量 = 变量 方式赋值;

# 指定一维数组成为多维数组
t5 = np.arange(24).reshape((2, 3, 4))  # 2个块,每块3行,每行4列
print(t5)
print("*" * 100)
print(t5.reshape((4, 6)))
print("*" * 100)
print(t5)  # 改变数组形状,不会改变数组内容

2.5 使用代表24行,仅1列

np.reshape(24, 1) :使用代表24行,仅有1列

注意:np.reshape(x, xx) 前面参数代表行,后面参数代表列;

t5 = np.arange(24)
print(t5.reshape(24, 1))  # 24行1列

2.6 将数组变成一维数组

np.reshape((t5.shape[0] * t5.shape[1],)) :将数组变成一维数组

t5.shape[0] 代表行;

t5.shape[1] 代表列;

相乘就是一个首元素等于24元组;

t5 = np.arange(24).reshape((4, 6))
print(t5)
print("*" * 100)
t6 = t5.reshape((t5.shape[0] * t5.shape[1],))  # 将数组变成一维数组
print(t6)

2.7 flatten

np.flatten() :快速的帮我们把数组变成一维数组;

t5 = np.arange(24).reshape((4, 6))
print(t5)
print("*" * 100)
print(t5.flatten())  # 将数组变成一维数组

2.8 数组和数组计算

np+2 :2加到数组中每个元素上

就是当numpy用于与树脂进行计算的时候,这个计算会被用于每一个数字;

t5 = np.arange(24).reshape((4, 6))
print(t5)
print("*" * 100)
print(t5 + 2)  # 2加到数组中每个元素上
print("*" * 100)
print(t5 / 2)  # 2除到数组中每个元素上
print("*" * 100)
print(t5 / 0)  # 0除到数组中每个元素上

2.9 广播原则

问题:

  • 数组形状为 (3, 3, 3) 能否与形状为 (3, 2) 的数组进行计算?不可以
  • 数组形状为 (3, 3, 2) 能否与形状为 (3, 2) 的数组进行计算?可以

关键点:

  • 维度对齐:可以将维度指的是 shape 所对应的数字个数。
  • 例子:每列的数据减去每列的平均值的结果。

理解:

  • 广播机制:NumPy 的广播机制允许形状不同的数组进行某些操作,但要求在维度和形状上能够相互兼容。一般情况下,计算中维度要么完全匹配,要么其中一个数组的维度为 1,以便进行广播。

举例:

  • 形状为 (3, 3, 3) 的数组与形状为 (3, 2) 的数组进行操作时,必须要满足特定的维度对齐规则。
  • 在这个例子中,可以考虑每列的数据减去每列的平均值的操作,即通过对齐和广播,使得形状不同的数组能够进行兼容操作。

总结:

  • 检查数组的形状是否兼容,利用广播机制处理不同形状的数组。
  • 实际操作时,需要考虑每个维度是否可以通过扩展或对齐使得操作合法。
2.9.1 数组t5 和数组t6 相加
t5 = np.arange(24).reshape((4, 6))
t6 = np.arange(100, 124).reshape((4, 6))
print(t5)
print("*" * 100)
print(t6)
print("*" * 100)
print(t5 + t6)  # 两个数组相加

2.9.2 数组t5 和数组t8 相减

在数组运算中,不同的列,但是相同的行,是可以进行运算的;

t5 = np.arange(24).reshape((4, 6))
print(t5)
print("*" * 100)
t8 = np.arange(4).reshape(4, 1)
print(t8)
print("*" * 100)
print(t5 - t8)  # 两个数组相减, 会在每一列上都减去相同维度的数组

t5 = np.arange(24).reshape((4, 6))
print(t5)
print("*" * 100)
t9 = np.arange(10)
print(t9)
print("*" * 100)
print(t5 - t9)  # 在数组元素对应不上的时候,是无法进行运算

在元素对应不上的时候,是无法进行运算;

2.10 NumPy 中轴( axis )的概念及其应用

轴(axis)

在 NumPy 中,轴可以理解为方向,使用 0, 1, 2, ... 数字表示:

  • 对于一维数组,只有一个 0 轴。
  • 对于二维数组(如 shape=(2,2)),有 0 轴和 1 轴。
  • 对于三维数组(如 shape=(2,2,3)),有 0, 1, 2 轴。

计算应用

有了轴的概念后,计算会更加方便。例如:

  • 计算一个二维数组的平均值,必须指定是计算哪个方向上的数字的平均值。

实例问题

在前面的知识中,轴在哪里?

import numpy as np
np.arange(0, 10).reshape((2, 5))
  • reshape 中,2 表示 0 轴长度(包含数据的条数),5 表示 1 轴长度(包含数据的条数)。因此,数组变成 2x5,共 10 个数据。

关键点总结

  • 轴的编号:在 NumPy 中,从 0 开始编号,0 轴表示第一个维度,以此类推。
  • 应用场景:在进行计算(如求和、平均等)时,需要明确指定计算的轴。
  • 多维数组:多维数组中的轴编号根据数组的维度递增。

2.11 transpose

np.transpose(t2) :数组转置

行列转置,将行转置为列;

t2 = np.arange(12).reshape(3, 4)
print(t2)
print("*" * 100)
t3 = np.transpose(t2)  # 转置
print(t3)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值