查看全课大纲(第 27 / 101 节)
- 1.数据分析基本概念
- 2.学习数据分析的一般路线
- 3.数据分析的流程
- 4.数据类型
- 5.环境部署(1)
- 6.环境部署(2)
- 7.课程介绍
- 8.TXT文件操作
- 9.JSON文件操作
- 10.CSV文件操作
- 11.Excel文件操作
- 12.数据库及SQL常用语法
- 13.数据库基本操作
- 14.数据库多表连接
- 15.实战:欧洲职业足球数据库分析
- 16.爬虫简介
- 17.URL管理模块
- 18.网页下载模块
- 19.网页解析模块(1)
- 20.网页解析模块(2)
- 21.Scrapy简介
- 22.Scrapy使用步骤(1)
- 23.Scrapy使用步骤(2)
- 24.Scrapy使用步骤(3)
- 25.Scrapy使用步骤(4)
- 26.实战:获取国内城市空气质量指数数据
- 27.NumPy和SciPy介绍
- 28.多维数组
- 29.多维数组操作
- 30.NumPy的常用方法
- 31.向量化介绍
- 32.向量化及通用函数
- 33.实战:2016美国大选分析
- 34.数据结构-Series
- 35.数据结构-DataFrame
- 36.数据结构-Index
- 37.Series的索引操作
- 38.DataFrame的索引操作
- 39.索引操作总结
- 40.运算与对齐
- 41.函数应用操作(1) -- map
- 42.函数应用操作 (2) -- apply applymap
- 43.文件读写操作
- 44.排序操作
- 45.数据清洗--处理缺失数据
- 46.数据清洗--处理重复数据
- 47.数据清洗--替换数据
- 48.常用统计方法(1) -- describe quantile
- 49.常用统计方法(2) -- sum mean median count
- 50.常用统计方法(3) -- max min idxmax idxmin
- 51.常用统计方法(4) -- mad var std cumsum
- 52.实战:全球食品数据分析
- 53.层级索引
- 54.分组与聚合介绍
- 55.分组操作(1) -- GroupBy对象及常用聚合操作
- 56.分组操作(2) -- 自定义分组及聚合操作
- 57.透视表介绍
- 58.透视表操作
- 59.数据规整(1) -- 数据合并concat
- 60.数据规整(2) -- 数据连接merge
- 61.数据重构(3) -- 数据重构stack unstack
- 62.实战:互联网电影资料库分析
- 63.探索性数据分析EDA介绍
- 64.EDA的目的
- 65.EDA常用工具
- 66.Matplotlib绘图基本介绍
- 67.Matplotlib画布
- 68.散点图和柱状图的绘制
- 69.直方图的绘制
- 70.矩阵绘图
- 71.子图的使用
- 72.Matplotlib颜色、标记、线型
- 73.Matplotlib坐标刻度、标签、图例、标题
- 74.Seaborn介绍
- 75.数据集分布可视化(1) -- 单变量分布、双变量分布
- 76.数据集分布可视化(2) -- 变量关系可视化
- 77.类别数据可视化 -- 类别散布图、类别内数据分布、类别内统计图
- 78.交互式数据可视化工具Bokeh介绍
- 79.Bokeh绘制散点图、柱状图、盒子图、弦图
- 80.Bokeh绘制常用图形元素
- 81.3D绘图 -- mplot3d
- 82.3D曲线可视化
- 83.3D散点图可视化
- 84.3D柱状图可视化
- 85.Pandas绘图
- 86.实战:Lending Club借贷数据探索性分析及可视化
- 87.机器学习介绍及应用场景
- 88.机器学习建模介绍 (1) -- 分类
- 89.机器学习建模介绍 (2) -- 回归
- 90.机器学习建模介绍 (3) -- 聚类
- 91.机器学习分类
- 92.机器学习工具scikit-learn
- 93.使用scikit-learn的流程
- 94.数据集准备及划分
- 95.模型选择
- 96.数据预处理及特征工程
- 97.过拟合与欠拟合
- 98.模型调参介绍
- 99.模型调参方法
- 100.模型测试及评价
- 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 npndarray的强大之处在于其矢量运算能力。它允许你对整个数组进行数学运算,而无需编写显式的for循环。这种操作不仅代码简洁,而且由于底层由高效的C语言实现,其计算速度极快,内存占用也更少。如果你曾使用过MATLAB,对这种矢量化操作会感到非常熟悉。
此外,NumPy还内置了大量实用的函数,涵盖线性代数、随机数生成、傅里叶变换等常用功能,使其成为数据分析中不可或缺的“省时省力”工具。
SciPy:科学计算的扩展
SciPy建立在NumPy的基础之上,提供了更多、更专业的高阶数学、科学及工程计算函数库。它像是NumPy的一个“增强包”。
import scipy as spSciPy包含的模块非常丰富,例如:
- 线性代数 (
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📝 动手练一练
- 概念辨析:一个
shape为(5, )的数组和一个shape为(5, 1)的数组,在维度和数据结构上有何本质区别?哪个是二维数组?
👉 点击查看参考答案
shape为(5, )的数组是一个一维数组,它包含5个元素,只有一个轴(axis=0)。你可以把它想象成一行数据或一个列表。shape为(5, 1)的数组是一个二维数组,它有5行、1列。它拥有两个轴(axis=0是行方向,axis=1是列方向)。你可以把它想象成一个只有一列的表格。- 因此,
(5, 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 数据库