1. NumPy 库
NumPy 是 Numerical Python(数值Python)的简称,是 Python 科学计算的基础包,它为 Python 提供了高性能数组与矩阵运算处理能力
1.1 数组运算
数学上将一维数组称为向量,将二维数组称为矩阵
一维数组
import numpy as np
x = np.array([1, 2, 3])
y = np.array([2, 3, 4])
# 对应元素的加法(元素个数要相同)
print(f"x + y: {x + y}")
# type(x): <class 'numpy.ndarray'>
二维码数组(矩阵)
import numpy as np
array = np.array([[1, 2], [3, 4]])
print(array)
print(f'array.shape: {array.shape}')
print(f"array[0]: {array[0]}, array[1][0]: {array[1][0]}")
打印结果:
[[1 2]
[3 4]]
array.shape: (2, 2)
array[0]: [1 2], array[1][0]: 3
广播机制:
NumPy 中,形状不同的数组之间也可以进行运算, 比如:二维数组 * 一维数组
import numpy as np
A = np.array([[1, 2], [3, 4]])
B = np.array([10, 20])
print(f"A * B: {A * B}")
# 转为一维数组
A1 = A.flatten()
print(f"A.flatten(): {A1}")
1.2 随机数
rand(*dn): 生成一组在半开区间 [0.0, 1.0) 内的浮点数数组
import numpy as np
# 创建一个3x2的随机数矩阵
data = np.random.rand(3, 2)
data = np.random.random((3, 2))
# 创建一个 2x4 的矩阵,元素值为1到6之间的随机整数
randint = np.random.randint(1, 7, size=(2, 4))
1.3 linspace() 函数
# 创建数值序列
# # 在 0~10 之间生成 100 个等间隔点
data = np.linspace(0, 10, 100)
linspace() 用于生成线性等分的数组,即创建一系列均匀分布的数值,这些数值在指定的区间内按照指定的数量进行等分
numpy.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None, axis=0):
start:区间的起始值
stop:区间的终止值(不包括此值,除非 endpoint=True)
num:生成的数组中元素的数量,默认为 50
endpoint:布尔值,表示是否包含 stop,默认为 True
retstep:布尔值,如果为 True,则返回步长 delta 和生成的数组
dtype:输出数组的数据类型。如果未指定,则根据 start 和 stop 自动选择
axis:新轴的位置。仅当 num 于 1 时有效,默认为 0
函数参数类型:
# function_base.pyi
@overload
def linspace(
start: _ArrayLikeFloat_co,
stop: _ArrayLikeFloat_co,
num: SupportsIndex = ...,
endpoint: bool = ...,
retstep: L[False] = ...,
dtype: None = ...,
axis: SupportsIndex = ...,
) -> NDArray[floating[Any]]: ...
_ArrayLikeFloat_co = _DualArrayLike[
"dtype[Union[bool_, integer[Any], floating[Any]]]",
Union[bool, int, float],
]
dtype[]
用于描述 NumPy 数组的数据类型
integer[Any]
表示整数泛型,integer 表示整数类型,Any 是一个占位符,表示任何具体的整数类型(如 int8, int16, int32, int64 等)
bool_
是 NumPy 中的布尔数据类型,通过 numpy.bool_()
访问,bool
是 Python 内置类型
2. pands 库
Pandas 中的预置数据结构:
- Series:1D数组,它与Num Py中的一维数组(array)类似
- Time Series:以时间为索引的Series
- Data Frame:2D的表格型数据结构,Series的容器
- Panel:3D的数组,Data Frame的容器
2.1 DataFrame
DataFrame 是一个二维表格型数据结构,以表格形式存储和操作数据
import pandas as pd
data = {'col1': [1, 2], 'col2': [3, 4]}
df = pd.DataFrame(data)
# 添加新列
df['new_col'] = df['col1'] + df['col2']
# 删除列
df.drop('new_col', axis=1, inplace=True)
# 读取csv 文件
df = pd.read_csv('../examples/tips.csv')
# head() 默认显示前 5 行
df.head()
3. Matplotlib 库
matplotlib 主要用于绘制二维图表,也可以通过 mpl_toolkits.mplot3d 块来绘制三维图表(使用 Axes3D 对象)
3.1 Figure 对象 和 坐标系 Axes
Figure 对象是绘制的所有内容的顶层容器,包含一个或多个 Axes(坐标系)、标题、图例等
创建 Figure 对象:
fig = plt.figure()
or
fig, ax = plt.subplots()
Axes 是实际进行绘图的地方,每个 Axes 都是一个独立的坐标系,具有自己的x轴、y轴
# 创建一个2x2的子图网格
fig, axes = plt.subplots(2, 2)
3.2 创建图表(pyplot)
- 图表类型
- plot(): 折线图
- scatter(): 散点图
- bar(): 条形图
- hist(): 直方图
- pie(): 饼图
- subplots(): 子图
- 样式
- title():设置图表标题。
- xlabel() 和 ylabel():设置 x 轴和 y 轴的标签
- legend():添加图例
- show():显示图表
- savefig():保存图表到文件
折线图
import matplotlib.pyplot as plt
x = [1, 2, 3, 4, 5]
y = [2, 3, 5, 7, 11]
# 创建折线图
plt.plot(x, y)
# 添加标题和标签
plt.title('Simple Line Plot')
plt.xlabel('X-axis')
plt.ylabel('Y-axis')
# 显示图形
plt.show()
子图
import numpy as np
import matplotlib.pyplot as plt
data = np.linspace(0, 10, 100)
sin_data = np.sin(data)
cos_data = np.cos(data)
# 绘制折线图(当数据足够多时,折线图就变为了正弦图)
fig, (ax1, ax2) = plt.subplots(1, 2)
# 在 Axes 对象上绘制数据
ax1.plot(data, sin_data)
ax2.plot(data, cos_data)
# 设置 Figure 的整体标题
fig.suptitle('Multiple Subplots', fontsize=16)
# 自动调整子图间距
plt.tight_layout()
# 打开 Matplotlib 查看器并显示绘制的图表
plt.show()
import numpy as np
import matplotlib.pyplot as plt
data = np.linspace(0, 10, 50)
sin_data = np.sin(data)
cos_data = np.cos(data)
fig, axs = plt.subplots(2, 2)
axs[0, 0].plot(data, sin_data)
axs[0, 0].set_title('Sine Wave')
axs[1, 0].plot(data, cos_data)
axs[1, 0].set_title('Cosine Wave')
fig.suptitle('Multiple Subplots', fontsize=14)
plt.tight_layout()
plt.show()
import matplotlib.pyplot as plt
from random import randint
linear = list(range(1, 21))
wiggly = list(num + randint(-1, 1) for num in linear)
fig, plots = plt.subplots(nrows=1, ncols=3)
ticks = list(range(0, 21, 5))
for plot in plots:
# 设置坐标轴的刻度
plot.set_xticks(ticks)
plot.set_yticks(ticks)
plots[0].scatter(linear, wiggly)
plots[1].plot(linear, wiggly)
# 'o-':设置线条格式,'o'表示在每个数据点处放置一个圆圈标记,'-'表示用实线连接这些点
plots[2].plot(linear, wiggly, 'o-')
plt.show()
3.3 subplots() 函数
subplots() 函数参数如下:
def subplots(
nrows: int = 1, ncols: int = 1, *,
sharex: bool | Literal["none", "all", "row", "col"] = False,
sharey: bool | Literal["none", "all", "row", "col"] = False,
squeeze: bool = True,
width_ratios: Sequence[float] | None = None,
height_ratios: Sequence[float] | None = None,
subplot_kw: dict[str, Any] | None = None,
gridspec_kw: dict[str, Any] | None = None,
**fig_kw
) -> tuple[Figure, Any]:
...
def subplot(*args, **kwargs) -> Axes:
...
nrows: 行数,默认为 1
ncols: 列数,默认为 1
3.4 Axes.plot() 函数
matplotlib 3.10.0 版本的 Axes.plot() 函数
ax.plot(self, *args, scalex=True, scaley=True, data=None, **kwargs)
参数说明:
-
*args
: 可接受一个或多个x、y数据对。通常形式为x, y, [fmt]
, fmt 是可选的格式字符串,用来指定线条的颜色、标记样式和线条样式 -
scalex, scaley
: 控制是否自动调整x轴和y轴的缩放比例,默认是 True -
data
: 可选参数 -
**kwargs
: 允许传递额外的关键字参数来进一步定制你的线条属性,比如颜色、宽度、透明度等
fmt 格式字符串由三部分组成:颜色、标记、线条样式,顺序任意
- 颜色: 如 'b' 表示蓝色, 'r' 表示红色等
- 标记: 如 'o' 圆圈,'s' 正方形等
- 线条样式: 如 '-' 实线,'--' 虚线等
可以任意顺序组合,比如 'ro-' 表示带圆圈标记的红色实线
4. Seaborn
Seaborn 是一个数据可视化库,以 Matplotlib 为基础构建
5. 交互式图表(Plotly)
绘制直方图
鼠标放上去会显示数据,图表可平移和缩放