查看全课大纲(第 27 / 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和SciPy介绍

约 9 分钟

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

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

在前面的课程中,我们已经学习了如何从本地文件和网络获取数据。获取数据之后,下一步就是数据处理与分析。在Python生态中,Pandas是进行数据处理和分析的强大工具。但在深入学习Pandas之前,我们需要先掌握其底层基础——NumPy。NumPy为Pandas提供了高性能的多维数组计算能力。本节课,我们将介绍NumPy及其扩展SciPy,它们是Python数据科学栈的核心基石。

💡 核心导读

  • NumPy是什么:高性能科学计算和数据分析的基础包,核心是ndarray多维数组对象。
  • NumPy的核心优势:提供矢量运算能力,无需显式循环即可进行快速的矩阵运算,节省内存与时间。
  • SciPy的角色:在NumPy基础上,提供了更丰富的高阶数学、科学及工程计算函数库。
  • 理解ndarray:掌握其三个关键属性——维度个数(ndim)、形状(shape)、数据类型(dtype),是操作数组的基础。
  • 从低维到高维:数据分析通常从一维、二维数据入手,理解其规律后再推广到更高维度。

NumPy与SciPy概览

NumPy:数值计算的基石

NumPy,全称Numerical Python,是Python中进行高性能科学计算和数据分析的基础包。它最核心的贡献是引入了ndarray(N-dimensional array,N维数组)对象,你可以将其理解为矩阵。这个数据结构是后续几乎所有数据科学工具(如Pandas、scikit-learn)的底层基础。

NumPy通常已随Anaconda等科学计算发行版安装。导入时,我们遵循社区惯例,使用别名np:

import numpy as np

ndarray的强大之处在于其矢量运算能力。它允许你对整个数组进行数学运算,而无需编写显式的for循环。这种操作不仅代码简洁,而且由于底层由高效的C语言实现,其计算速度极快,内存占用也更少。如果你曾使用过MATLAB,对这种矢量化操作会感到非常熟悉。

此外,NumPy还内置了大量实用的函数,涵盖线性代数、随机数生成、傅里叶变换等常用功能,使其成为数据分析中不可或缺的“省时省力”工具。

SciPy:科学计算的扩展

SciPy建立在NumPy的基础之上,提供了更多、更专业的高阶数学、科学及工程计算函数库。它像是NumPy的一个“增强包”。

import scipy as sp

SciPy包含的模块非常丰富,例如:

  • 线性代数 (scipy.linalg):提供比NumPy更全面的矩阵分解、求逆等函数。
  • 优化与拟合 (scipy.optimize):用于函数最小值求解、曲线拟合等。
  • 信号处理 (scipy.signal):滤波、频谱分析等。
  • 图像处理 (scipy.ndimage):多维图像处理操作。
  • 稀疏矩阵 (scipy.sparse):高效处理大型稀疏矩阵。

对于数据分析入门而言,NumPy的功能已能满足大部分需求。因此,本课程的重点将放在NumPy上,SciPy的相关功能在需要时会简要提及。

理解NumPy的核心:ndarray数据结构

ndarray(N维数组)是NumPy中最重要的对象。理解它的三个基本属性,是掌握其用法的关键。

1. 维度个数 (ndim)

ndim属性代表数组的维度个数,即我们常说的“几维数组”。

  • 一维数组:可以看作一个列表(List),数据沿单一方向排列。它只有一个维度。
  • 二维数组:最常用的形式,类似于一个表格或矩阵。它有两个维度,通常称为行和列。
  • 三维数组:可以想象成一个数据“盒子”或立方体。它包含三个维度,例如行、列和深度(或通道)。

维度高于三维的数组在数学和计算上是完全可行的,NumPy也能表示和计算,但难以直观可视化。在数据分析中,我们通常从一维、二维数据入手,验证思路和方法,再将其逻辑推广到更高维度的数据中。因此,低维数据是我们理解和构建高维算法的基础。

2. 形状 (shape)

shape属性是一个元组,它描述了数组在各个维度上的大小,即每个维度包含多少个数据元素。

  • 一维数组:shape为(n,),表示该维度上有n个元素。例如,一个包含4个元素的一维数组,其shape为(4,)。
  • 二维数组:shape为(m, n),表示有m行、n列。例如,一个2行3列的数组,shape为(2, 3)。
  • 三维数组:shape为(p, m, n),可以理解为有p个m×n的二维矩阵堆叠而成。

通过shape,我们可以快速计算出数组中元素的总数:将shape元组中的所有数字相乘即可。例如,shape为(4, 3, 2)的三维数组,总元素数为4 * 3 * 2 = 24个。

与shape紧密相关的是轴(axis)的概念。轴可以理解为数组的维度方向,并用从0开始的整数索引。

  • 一维数组:只有axis=0这一个轴。
  • 二维数组:axis=0通常代表行的方向(垂直向下),axis=1代表列的方向(水平向右)。
  • 三维数组:则依次有axis=0, axis=1, axis=2。理解轴的方向对于后续进行跨轴(如求和、求平均)操作至关重要。

3. 数据类型 (dtype)

dtype属性指明了数组中元素的数据类型。NumPy支持丰富的数据类型,如:

  • 整型:int8, int16, int32, int64
  • 浮点型:float16, float32, float64
  • 布尔型:bool
  • 字符串型:str_
  • 等等

一个数组中的所有元素通常具有相同的数据类型,这保证了存储和计算的高效性。例如,一个数组的dtype可能是int32,另一个可能是float64。

通过ndim、shape和dtype这三个属性,我们就能对一个ndarray对象有一个清晰、全面的认识。

让我们通过一个简单的代码示例来直观感受一下:

import numpy as np

# 创建一个一维数组(列表转换)
arr_1d = np.array([1, 2, 3, 4])
print("一维数组:")
print(f"  数组内容: {arr_1d}")
print(f"  ndim (维度): {arr_1d.ndim}")
print(f"  shape (形状): {arr_1d.shape}")
print(f"  dtype (类型): {arr_1d.dtype}")
print()

# 创建一个二维数组(嵌套列表转换)
arr_2d = np.array([[1.1, 2.2, 3.3], [4.4, 5.5, 6.6]])
print("二维数组:")
print(f"  数组内容:\n{arr_2d}")
print(f"  ndim (维度): {arr_2d.ndim}")
print(f"  shape (形状): {arr_2d.shape}")
print(f"  dtype (类型): {arr_2d.dtype}")
print()

# 创建一个三维数组
arr_3d = np.array([[[1, 2], [3, 4], [5, 6]],
                   [[7, 8], [9, 10], [11, 12]]])
print("三维数组 (2个3x2的矩阵):")
print(f"  数组内容:\n{arr_3d}")
print(f"  ndim (维度): {arr_3d.ndim}")
print(f"  shape (形状): {arr_3d.shape}")
print(f"  dtype (类型): {arr_3d.dtype}")
一维数组:
  数组内容: [1 2 3 4]
  ndim (维度): 1
  shape (形状): (4,)
  dtype (类型): int64

二维数组:
  数组内容:
[[1.1 2.2 3.3]
 [4.4 5.5 6.6]]
  ndim (维度): 2
  shape (形状): (2, 3)
  dtype (类型): float64

三维数组 (2个3x2的矩阵):
  数组内容:
[[[ 1  2]
  [ 3  4]
  [ 5  6]]

 [[ 7  8]
  [ 9 10]
  [11 12]]]
  ndim (维度): 3
  shape (形状): (2, 3, 2)
  dtype (类型): int64

📝 动手练一练

  1. 概念辨析:一个shape为(5, )的数组和一个shape为(5, 1)的数组,在维度和数据结构上有何本质区别?哪个是二维数组?
👉 点击查看参考答案
  • shape为(5, )的数组是一个一维数组,它包含5个元素,只有一个轴(axis=0)。你可以把它想象成一行数据或一个列表。
  • shape为(5, 1)的数组是一个二维数组,它有5行、1列。它拥有两个轴(axis=0是行方向,axis=1是列方向)。你可以把它想象成一个只有一列的表格。
  • 因此,(5, 1)是二维数组。这种区别在进行矩阵运算(如乘法)时非常重要。
  1. 动手计算:假设我们有一个三维NumPy数组arr,其shape为(3, 4, 5)。请问: a) 这个数组总共有多少个元素? b) 它的ndim属性值是多少? c) 如果我们想计算在axis=1(第二个维度)上所有元素的和,结果数组的shape会变成什么?
👉 点击查看参考答案
import numpy as np
# 为了验证,我们可以创建一个模拟数组并计算
arr = np.ones((3, 4, 5)) # 用1填充,方便验证
print(f"a) 总元素数: {np.prod(arr.shape)} = {3*4*5}")
print(f"b) ndim: {arr.ndim}")
sum_axis1 = arr.sum(axis=1)
print(f"c) 沿axis=1求和后的shape: {sum_axis1.shape}")
a) 总元素数: 60 = 60
b) ndim: 3
c) 沿axis=1求和后的shape: (3, 5)

解释: a) 总元素数 = 3 * 4 * 5 = 60。 b) shape元组的长度就是维度数,(3,4,5)长度为3,所以ndim=3。 c) 沿axis=1(对应shape中的4)求和,该维度会被“压缩”掉。剩下的维度是axis=0(大小3)和axis=2(大小5),因此结果shape为(3, 5)。

本章小结

本节我们开启了数据处理与分析的核心工具——NumPy的学习之旅。我们了解到NumPy是Python科学计算的基石,其高性能的ndarray多维数组对象和矢量运算能力,为我们处理大规模数据提供了可能。同时,我们也认识了其兄弟库SciPy,它提供了更专业的科学计算函数。

理解ndarray的三个基本属性(ndim, shape, dtype)是操作数组的起点,它们分别描述了数组的维度结构、形状大小和元素类型。从低维数据入手理解规律,再向高维拓展,是学习数据分析的有效路径。

📋 行动清单

  • 在你的Python环境中运行本节示例代码,观察不同维度的数组及其属性。
  • 尝试用np.array()创建几个不同shape和dtype的数组,并打印它们的三个属性。
  • 思考一个你熟悉的数据集(如Excel表格),它对应的是几维数组?它的shape大致是怎样的?

—— 小象教研组

配套资料 · 直接下载

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

  • 本节课件:NumPy和SciPy介绍
    PDF · 399KB
    下载
  • 第4章配套代码包:NumPy 示例与美国大选实战数据
    ZIP · 0.5MB
    下载
  • 全套课件打包(第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 数据库
    下载