查看全课大纲(第 30 / 101 节)
  1. 1.数据分析基本概念
  2. 2.学习数据分析的一般路线
  3. 3.数据分析的流程
  4. 4.数据类型
  5. 5.环境部署(1)
  6. 6.环境部署(2)
  7. 7.课程介绍
  8. 8.TXT文件操作
  9. 9.JSON文件操作
  10. 10.CSV文件操作
  11. 11.Excel文件操作
  12. 12.数据库及SQL常用语法
  13. 13.数据库基本操作
  14. 14.数据库多表连接
  15. 15.实战:欧洲职业足球数据库分析
  16. 16.爬虫简介
  17. 17.URL管理模块
  18. 18.网页下载模块
  19. 19.网页解析模块(1)
  20. 20.网页解析模块(2)
  21. 21.Scrapy简介
  22. 22.Scrapy使用步骤(1)
  23. 23.Scrapy使用步骤(2)
  24. 24.Scrapy使用步骤(3)
  25. 25.Scrapy使用步骤(4)
  26. 26.实战:获取国内城市空气质量指数数据
  27. 27.NumPy和SciPy介绍
  28. 28.多维数组
  29. 29.多维数组操作
  30. 30.NumPy的常用方法
  31. 31.向量化介绍
  32. 32.向量化及通用函数
  33. 33.实战:2016美国大选分析
  34. 34.数据结构-Series
  35. 35.数据结构-DataFrame
  36. 36.数据结构-Index
  37. 37.Series的索引操作
  38. 38.DataFrame的索引操作
  39. 39.索引操作总结
  40. 40.运算与对齐
  41. 41.函数应用操作(1) -- map
  42. 42.函数应用操作 (2) -- apply applymap
  43. 43.文件读写操作
  44. 44.排序操作
  45. 45.数据清洗--处理缺失数据
  46. 46.数据清洗--处理重复数据
  47. 47.数据清洗--替换数据
  48. 48.常用统计方法(1) -- describe quantile
  49. 49.常用统计方法(2) -- sum mean median count
  50. 50.常用统计方法(3) -- max min idxmax idxmin
  51. 51.常用统计方法(4) -- mad var std cumsum
  52. 52.实战:全球食品数据分析
  53. 53.层级索引
  54. 54.分组与聚合介绍
  55. 55.分组操作(1) -- GroupBy对象及常用聚合操作
  56. 56.分组操作(2) -- 自定义分组及聚合操作
  57. 57.透视表介绍
  58. 58.透视表操作
  59. 59.数据规整(1) -- 数据合并concat
  60. 60.数据规整(2) -- 数据连接merge
  61. 61.数据重构(3) -- 数据重构stack unstack
  62. 62.实战:互联网电影资料库分析
  63. 63.探索性数据分析EDA介绍
  64. 64.EDA的目的
  65. 65.EDA常用工具
  66. 66.Matplotlib绘图基本介绍
  67. 67.Matplotlib画布
  68. 68.散点图和柱状图的绘制
  69. 69.直方图的绘制
  70. 70.矩阵绘图
  71. 71.子图的使用
  72. 72.Matplotlib颜色、标记、线型
  73. 73.Matplotlib坐标刻度、标签、图例、标题
  74. 74.Seaborn介绍
  75. 75.数据集分布可视化(1) -- 单变量分布、双变量分布
  76. 76.数据集分布可视化(2) -- 变量关系可视化
  77. 77.类别数据可视化 -- 类别散布图、类别内数据分布、类别内统计图
  78. 78.交互式数据可视化工具Bokeh介绍
  79. 79.Bokeh绘制散点图、柱状图、盒子图、弦图
  80. 80.Bokeh绘制常用图形元素
  81. 81.3D绘图 -- mplot3d
  82. 82.3D曲线可视化
  83. 83.3D散点图可视化
  84. 84.3D柱状图可视化
  85. 85.Pandas绘图
  86. 86.实战:Lending Club借贷数据探索性分析及可视化
  87. 87.机器学习介绍及应用场景
  88. 88.机器学习建模介绍 (1) -- 分类
  89. 89.机器学习建模介绍 (2) -- 回归
  90. 90.机器学习建模介绍 (3) -- 聚类
  91. 91.机器学习分类
  92. 92.机器学习工具scikit-learn
  93. 93.使用scikit-learn的流程
  94. 94.数据集准备及划分
  95. 95.模型选择
  96. 96.数据预处理及特征工程
  97. 97.过拟合与欠拟合
  98. 98.模型调参介绍
  99. 99.模型调参方法
  100. 100.模型测试及评价
  101. 101.实战:通过移动设备行为数据预测性别和年龄

NumPy的常用方法

约 8 分钟

📺 正在播放小象学院官方高清录播(支持倍速与清晰度调节)

小象实战讲义 · Python数据分析实战

在掌握了 NumPy 数组的构造和数据获取之后,我们自然要问:如何对这些数据进行统计分析?本节将系统介绍 NumPy 提供的一系列常用统计方法,如求和、均值、最值、标准差等。更重要的是,你将学会在多维数组中如何指定统计的维度(轴),这是数据分析中处理表格数据的关键技能。

💡 核心导读

  • 基础统计函数:掌握 np.sum(), np.mean(), np.max(), np.std() 等函数的基本用法。
  • 索引与累计算:理解 np.argmax()(求最大值索引)与 np.max() 的区别,以及 np.cumsum()(累加和)的运算逻辑。
  • 条件判断与去重:使用 np.any() 和 np.all() 进行条件判断,用 np.unique() 获取数组中的唯一值。
  • 轴(axis)的概念:这是本节的核心难点。明确在多维数组中,通过指定 axis 参数(0代表行方向,1代表列方向),可以控制统计运算的维度。

常用统计方法一览

NumPy 为数据分析提供了丰富的统计函数,它们大多可以直接通过 np.函数名() 的形式调用。根据功能,我们可以将其分为以下几类:

  1. 集中趋势与离散程度:

    • np.mean(): 求算术平均值。
    • np.sum(): 求和。
    • np.max() / np.min(): 求最大值 / 最小值。
    • np.std(): 求标准差。
    • np.var(): 求方差。
  2. 索引与位置:

    • np.argmax(): 返回最大值所在的位置(索引)。
    • np.argmin(): 返回最小值所在的位置(索引)。

    注意:np.max() 返回的是最大值本身,而 np.argmax() 返回的是这个最大值在数组中的“位置编号”。对于一维数组,这就是下标;对于多维数组,它返回的是将数组展平(flatten)后的线性索引,除非指定了 axis 参数。

  3. 累积计算:

    • np.cumsum(): 计算累加和。第 i 个元素是原数组前 i 个元素的总和。
    • np.cumprod(): 计算累乘积。
  4. 逻辑判断:

    • np.all(): 判断是否所有元素都满足给定条件。
    • np.any(): 判断是否至少有一个元素满足给定条件。
  5. 数据去重:

    • np.unique(): 返回数组中的唯一值,并默认进行排序。

一个关键概念:对于多维数组,以上大多数函数默认会在全部数据上进行统计,得到一个标量结果。但更多时候,我们需要沿着特定的维度(行或列)进行统计,这时就需要用到 axis(轴)参数。

理解轴(axis):统计的维度

axis 参数决定了统计运算沿着哪个方向进行。对于二维数组(可视为表格):

  • axis=0: 沿着行的方向(垂直向下)进行运算。可以理解为 “跨行,按列计算”,结果中的每个值对应原数组的一列。
  • axis=1: 沿着列的方向(水平向右)进行运算。可以理解为 “跨列,按行计算”,结果中的每个值对应原数组的一行。

如果不指定 axis,则函数在所有元素上计算,返回一个单一结果。

让我们通过代码来直观感受。

import numpy as np

# 创建一个 5行2列 的二维数组,数据为 0 到 9
data = np.arange(10).reshape(5, 2)
print("原始数组 data:")
print(data)
原始数组 data:
[[0 1]
 [2 3]
 [4 5]
 [6 7]
 [8 9]]

均值与求和:演示轴的作用

import numpy as np

data = np.arange(10).reshape(5, 2)

print("1. 整体均值 (不指定axis):", np.mean(data))
print("2. 按列求均值 (axis=0):", np.mean(data, axis=0))
print("3. 按行求均值 (axis=1):", np.mean(data, axis=1))
1. 整体均值 (不指定axis): 4.5
2. 按列求均值 (axis=0): [4. 5.]
3. 按行求均值 (axis=1): [0.5 2.5 4.5 6.5 8.5]

结果解读:

  • 4.5:所有10个数字 (0+1+…+9)/10 的结果。
  • [4., 5.]:axis=0 按列计算。第一列均值为 (0+2+4+6+8)/5=4.0;第二列均值为 (1+3+5+7+9)/5=5.0。
  • [0.5, 2.5, 4.5, 6.5, 8.5]:axis=1 按行计算。分别是每行两个数字的均值:(0,1)->0.5, (2,3)->2.5, 以此类推。

求和 np.sum() 的规则与均值完全相同。

最大值、标准差与方差

import numpy as np

data = np.arange(10).reshape(5, 2)

print("整体最大值:", np.max(data))
print("每列最大值 (axis=0):", np.max(data, axis=0))
print("每行最大值 (axis=1):", np.max(data, axis=1))

print("\n整体标准差:", np.std(data))
print("整体方差:", np.var(data))
整体最大值: 9
每列最大值 (axis=0): [8 9]
每行最大值 (axis=1): [1 3 5 7 9]

整体标准差: 2.8722813232690143
整体方差: 8.25

最大值索引 (argmax) 与累加和 (cumsum)

np.argmax() 返回的是索引(位置),而不是值本身。

import numpy as np

data = np.arange(10).reshape(5, 2)

print("1. 整体最大值的索引 (展平后的位置):", np.argmax(data))
print("2. 每列最大值所在的**行**索引 (axis=0):", np.argmax(data, axis=0))
print("3. 每行最大值所在的**列**索引 (axis=1):", np.argmax(data, axis=1))
1. 整体最大值的索引 (展平后的位置): 9
2. 每列最大值所在的**行**索引 (axis=0): [4 4]
3. 每行最大值所在的**列**索引 (axis=1): [1 1 1 1 1]

结果解读:

  • 索引 9:将 data 展平为 [0,1,2,3,4,5,6,7,8,9],最大值 9 在第9个位置(从0开始计数)。
  • [4 4]:axis=0 按列找最大值的位置(即行号)。第一列最大值 8 在第4行,第二列最大值 9 也在第4行。
  • [1 1 1 1 1]:axis=1 按行找最大值的位置(即列号)。每一行的第二个数(列索引1)都比第一个数大。

np.cumsum() 计算累加和,同样支持 axis 参数。

import numpy as np

data = np.arange(10).reshape(5, 2)

print("整体累加和 (展平后计算):")
print(np.cumsum(data))
print("\n按列累加 (axis=0):")
print(np.cumsum(data, axis=0))
print("\n按行累加 (axis=1):")
print(np.cumsum(data, axis=1))
整体累加和 (展平后计算):
[ 0  1  3  6 10 15 21 28 36 45]

按列累加 (axis=0):
[[ 0  1]
 [ 2  4]
 [ 6  9]
 [12 16]
 [20 25]]

按行累加 (axis=1):
[[ 0  1]
 [ 2  5]
 [ 4  9]
 [ 6 13]
 [ 8 17]]

结果解读(按行累加):以第一行 [0, 1] 为例,累加过程是:第一个元素 0,第二个元素是 0+1=1。

逻辑判断与唯一值

np.any() 和 np.all() 常用于基于条件的快速判断。

import numpy as np

data = np.arange(10).reshape(5, 2)

# 判断数组中是否有元素大于5
print("是否有元素 > 5?", np.any(data > 5))
# 判断数组中是否所有元素都大于5
print("是否所有元素 > 5?", np.all(data > 5))
是否有元素 > 5? True
是否所有元素 > 5? False

np.unique() 用于获取数组中的唯一值,并默认排序。

import numpy as np

# 创建一个包含重复值的数组
arr_with_duplicates = np.array([[1, 2, 1], [2, 3, 4]])
print("原始数组:")
print(arr_with_duplicates)
print("\n唯一值 (已排序):", np.unique(arr_with_duplicates))
原始数组:
[[1 2 1]
 [2 3 4]]

唯一值 (已排序): [1 2 3 4]

📝 动手练一练

  1. 概念辨析:np.max(data, axis=0) 和 np.argmax(data, axis=0) 返回的结果有什么本质区别?请用一句话说明。
  2. 动手计算:假设有一个数组 arr = np.array([[10, 20], [30, 40]])。请在不运行代码的情况下,手动推算以下表达式的结果:
    • np.sum(arr, axis=0)
    • np.cumsum(arr, axis=1)
    • np.any(arr > 25)
👉 点击查看参考答案
  1. np.max(data, axis=0) 返回的是每一列的最大值(具体数值),而 np.argmax(data, axis=0) 返回的是每一列的最大值所在的行索引(位置编号)。
  2. 手动推算结果:
    • np.sum(arr, axis=0):按列求和。第一列 10+30=40,第二列 20+40=60。结果为 [40, 60]。
    • np.cumsum(arr, axis=1):按行累加。第一行:[10, 10+20=30];第二行:[30, 30+40=70]。结果为 [[10, 30], [30, 70]]。
    • np.any(arr > 25):检查是否有元素大于25。数组中有30和40,所以结果为 True。

本章小结

本节我们深入学习了 NumPy 的核心统计方法。你不仅需要记住 mean, sum, max, std 这些函数名,更要理解在多维数据分析中 “轴(axis)” 的核心作用。指定 axis=0 或 axis=1 意味着完全不同的计算逻辑和结果形态,这是将 NumPy 应用于真实表格数据处理的基石。

📋 行动清单

  • 在 Python 环境中,对任意创建一个 3x4 的二维数组,分别用 axis=0 和 axis=1 计算其 sum, mean, max,并验证你的理解。
  • 尝试使用 np.argmin() 和 np.cumprod() 函数,观察它们的结果。
  • 思考:对于一个三维数组,axis=0, axis=1, axis=2 分别代表沿着哪个维度计算?(可以尝试用 np.ones((2,3,4)) 创建数组并测试)

—— 小象教研组

配套资料 · 直接下载

课件、代码、数据集等配套资料全部免费,点击即可直接下载,无需分享或解锁。

  • 本节课件:NumPy的常用方法
    PDF · 186KB
    下载
  • 全套课件打包(第1-5章)
    ZIP · 12.8MB
    下载
  • 全套课件打包(第6-8章)
    ZIP · 15MB
    下载
  • 实战数据集:AppleStore 应用商城分析
    ZIP · 329KB
    下载
  • 实战数据集:女性服装电商分析
    ZIP · 2.8MB
    下载
  • Python 数据分析环境搭建指南
    PDF · 2MB
    下载
  • Scrapy 安装教程
    PDF · 12.7MB
    下载
  • 附加实战项目:AppleStore 应用商城数据分析
    ZIP · 0.3MB · ipynb + CSV 数据
    下载
  • 附加实战项目:银行电话营销数据分析
    ZIP · 0.4MB · ipynb + CSV 数据
    下载
  • 附加实战项目:女性服装电商评论数据分析
    ZIP · 2.7MB · ipynb + CSV 数据
    下载
  • 附加实战项目:美国化学学会杂志数据分析
    ZIP · 34.2MB · ipynb + SQLite 数据库
    下载