Python数据分析基础:Jupyter、NumPy与SciPy稀疏矩阵及Matplotlib入门

江屿
江屿
发布时间:2026-10-14| 2人浏览过
原创

本文介绍Python数据分析的核心工具链。首先讲解Jupyter Notebook的基本操作与帮助获取方法;随后深入NumPy数组的创建、索引及形状变换;接着详解SciPy稀疏矩阵(CSR/LIL)在机器学习中的高效存储与格式转换;最后演示Matplotlib在Jupyter中的内联绘图及多种图表类型,为机器学习预处理提供基础支持。

1. Jupyter Notebooks

对于初学者而言,Jupyter Notebook是一款极其高效且友好的Python编辑器,强烈推荐使用。

运行单元格时,可使用快捷键[Ctrl] + [Enter],或点击菜单栏中的运行按钮。

在函数名后输入function(并按下[shift] + [tab]组合键,即可查看该函数或对象的详细帮助文档。

此外,通过执行function?命令同样可以获取相关帮助信息。

2. NumPy 数组

对NumPy数组的操作是Python机器学习(乃至所有科学计算领域)的关键环节。此处简要介绍其核心基础功能。


import numpy as np

# 设置随机种子来获得可重复性
rnd = np.random.RandomState(seed=520)

# 生成随机数组
# Array: shape(3, 5); 
#        value: [0, 1]
X = rnd.uniform(low=0.0, high=1.0, size=(3, 5)) 

print(X)

请注意,NumPy数组采用从0开始的索引机制。


# 元素访问

# 获取单个元素
# (这里是第一行第一列的元素)
print(X[0, 0])

# 获取一行
# (这里是第二行)
print(X[1])

# 获取一列
# (这里是第二列)
print(X[:, 1])

# 数组转置
print(X.T)

# 创建均匀间隔的数字的行向量。
y = np.linspace(0, 12, 5) # 从0开始,到12结束,数量为5
print(y)

# 将行向量转换为列向量
print(y[:, np.newaxis])


# 获得形状或改变数组形状

# 生成随机数组
rnd = np.random.RandomState(seed=520)
X = rnd.uniform(low=0.0, high=1.0, size=(3, 5))

# X的大小(3,5) 
print(X.shape)

# 将 X 大小变为 (5,3)
X_reshaped = X.reshape(5, 3)
print(X_reshaped)

# 使用整数数组的索引(花式索引)
indices = np.array([3, 1, 0])
print(indices)
# 取X的第4,2,1列作为新数组
X[:, indices]

3. SciPy 稀疏数组

尽管日常开发中不常大量使用,但在特定场景下稀疏矩阵极具价值。特别是在涉及文本分析的机器学习任务中,数据往往包含大量零值。存储这些零值效率低下,而仅存储“非零”值的表示方式则更为高效。创建和操作稀疏矩阵的方法如下:


# 创建一个包含大量零的随机数组
rnd = np.random.RandomState(seed=123)

X = rnd.uniform(low=0.0, high=1.0, size=(10, 5))
print(X)

# 将大多数元素设置为零
X[X < 0.7] = 0
print(X)

from scipy import sparse
# 将 X 转换为 CSR(压缩稀疏行)矩阵
X_csr = sparse.csr_matrix(X)
print(X_csr)

# 将稀疏矩阵转换为密集数组
print(X_csr.toarray())

你可能会遇到将稀疏表示转换为密集表示的另一种方法:numpy.todense;toarray返回的是NumPy数组,而todense返回的是NumPy矩阵。本教程将统一使用NumPy数组,因为scikit-learn不支持矩阵对象。

CSR(压缩稀疏行)格式在计算方面非常高效,但不适合动态添加元素。若需频繁添加元素,使用LIL(List-In-List,列表中的列表)格式更为合适:


# 创建一个空的 LIL 矩阵并添加一些项目
X_lil = sparse.lil_matrix((5, 5))

for i, j in np.random.randint(0, 5, (15, 2)):
    X_lil[i, j] = i + j

print(X_lil)
print(type(X_lil))

X_dense = X_lil.toarray()
print(X_dense)
print(type(X_dense))

通常,在构建好LIL矩阵后,将其转换为CSR格式是非常有用的步骤,因为许多scikit-learn算法要求输入为CSR或CSC格式。


X_csr = X_lil.tocsr()
print(X_csr)
print(type(X_csr))

适用于各类问题的可用稀疏格式包括:

  • CSR(压缩稀疏行)
  • CSC(压缩稀疏列)
  • BSR(块稀疏行)
  • COO(坐标格式)
  • DIA(对角线格式)
  • DOK(键的字典格式)
  • LIL(列表中的列表格式)

scipy.sparse子模块还提供了大量稀疏矩阵相关函数,涵盖线性代数、稀疏求解器及图算法等领域。

4. Matplotlib

数据可视化是机器学习的另一重要组成部分。Python中最常用的可视化工具是matplotlib。这是一个功能非常灵活的软件包,此处介绍其基础用法。

由于使用的是Jupyter环境,可以利用IPython内置的“魔术函数”,即设置“matplotlib内联”模式,从而直接在笔记本内部渲染图形。


%matplotlib inline

import matplotlib.pyplot as plt

# 绘制直线
x = np.linspace(0, 10, 100)
plt.plot(x, np.sin(x));

# 散点图
x = np.random.normal(size=500)
y = np.random.normal(size=500)
plt.scatter(x, y);

# 使用 imshow 展示绘图
# - note that origin is at the top-left by default!

x = np.linspace(1, 12, 100)
y = x[:, np.newaxis]

im = y * np.sin(x) * np.cos(y)
print(im.shape)

plt.imshow(im);

# 轮廓图
# - 请注意,此处的原点默认位于左下角!
plt.contour(im);

# 3D 绘图
from mpl_toolkits.mplot3d import Axes3D
ax = plt.axes(projection='3d')
xgrid, ygrid = np.meshgrid(x, y.ravel())
ax.plot_surface(xgrid, ygrid, im, cmap=plt.cm.viridis, cstride=2, rstride=2, linewidth=0);

Matplotlib支持多种绘图类型。快速浏览matplotlib库文档是掌握其用法的高效途径。

总结

本文介绍了Python中Numpy和Matplotlib的基本使用方法。如需了解更多关于Python Numpy和Matplotlib的内容,请搜索本站历史文章或继续阅读后续相关文章,感谢大家的支持!

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。