在机器学习领域,这四个Python库构成了数据处理和可视化的核心工具链。它们各司其职又紧密协作,形成了完整的数据处理流水线:
1. Numpy:科学计算基石
核心功能:多维数组操作与数值计算
import numpy as np
# 创建数组
arr = np.array([[1, 2, 3], [4, 5, 6]])
# 数学运算
sines = np.sin(arr) # 每个元素求正弦
matrix = arr @ arr.T # 矩阵乘法
# 高级索引
sliced = arr[:, 1:3] # 所有行的第1-2列
关键特性:
- 广播机制:自动扩展不同形状数组的运算
- 矢量化操作:避免低效的Python循环
- 内存优化:连续内存存储,高效访问
2. Pandas:数据分析神器
核心数据结构:
Series
:带标签的一维数组DataFrame
:二维表格型数据结构
import pandas as pd
# 创建DataFrame
data = {'姓名': ['张三', '李四'], '年龄': [25, 30], '城市': ['北京', '上海']}
df = pd.DataFrame(data)
# 数据操作
df['年薪'] = [150000, 180000] # 添加新列
mean_age = df['年龄'].mean() # 计算平均年龄
beijing_people = df[df['城市'] == '北京'] # 条件筛选
核心功能:
- 数据清洗:
dropna()
、fillna()
- 数据聚合:
groupby()
、pivot_table()
- 时间序列:
resample()
、rolling()
- 数据合并:
merge()
、concat()
3. PIL/Pillow:图像处理专家
核心功能:图像加载、处理和转换
from PIL import Image
# 图像加载与处理
img = Image.open('photo.jpg')
gray_img = img.convert('L') # 转灰度图
cropped = img.crop((100, 100, 400, 400)) # 裁剪
resized = img.resize((224, 224)) # 调整大小
# 图像增强
from PIL import ImageEnhance
enhancer = ImageEnhance.Contrast(img)
high_contrast = enhancer.enhance(2.0) # 增加对比度
关键操作:
- 格式转换:
save('output.png')
- 通道分离:
split()
- 滤镜应用:
filter()
- 像素级操作:
point()
4. Matplotlib:可视化引擎
核心功能:创建专业级图表
import matplotlib.pyplot as plt
# 创建图表
fig, axs = plt.subplots(2, 1, figsize=(10, 8)) # 2行1列的子图
# 折线图
axs[0].plot([1, 2, 3, 4], [1, 4, 2, 3], 'ro-')
axs[0].set_title('销售趋势')
# 直方图
axs[1].hist(np.random.randn(1000), bins=30, alpha=0.5)
axs[1].set_xlabel('数值分布')
# 图像显示
plt.imshow(np.array(img))
plt.colorbar()
plt.savefig('combined.png')
图表类型:
- 基础图表:折线图、柱状图、散点图
- 统计图表:直方图、箱线图、热力图
- 三维可视化:
mplot3d
工具包 - 交互式图表:结合
widgets
实现动态交互
四剑客协作实战:图像分类数据处理
import numpy as np
import pandas as pd
from PIL import Image
import matplotlib.pyplot as plt
# 1. 用Pandas读取标注数据
labels_df = pd.read_csv('image_labels.csv')
# 2. 用PIL加载并预处理图像
def preprocess_image(path):
img = Image.open(path)
img = img.resize((128, 128))
return np.array(img) / 255.0
# 3. 创建图像数据集
image_data = np.array([preprocess_image(path) for path in labels_df['filepath']])
# 4. 数据可视化
fig, axes = plt.subplots(3, 3, figsize=(10, 10))
for i, ax in enumerate(axes.flat):
ax.imshow(image_data[i])
ax.set_title(labels_df.iloc[i]['label'])
ax.axis('off')
plt.savefig('sample_images.png')
四剑客能力矩阵
库 | 核心能力 | 机器学习应用场景 |
---|---|---|
Numpy | 多维数组运算 | 特征工程、模型输入数据 |
Pandas | 表格数据处理 | 数据清洗、特征提取 |
PIL | 图像加载与预处理 | 计算机视觉数据准备 |
Matplotlib | 数据可视化 | 结果分析、模型评估 |
高效使用技巧
内存优化:
# 使用Numpy内存视图避免复制 large_array = np.ones((10000, 10000)) view = large_array[100:200, 100:200]
向量化操作:
# 替代循环的向量化计算 df['age_group'] = np.where(df['age'] < 30, 'Young', np.where(df['age'] < 50, 'Middle', 'Senior'))
批处理图像:
from torchvision.transforms import Compose, Resize, ToTensor transform = Compose([Resize((256, 256)), ToTensor()])
交互可视化:
%matplotlib widget # Jupyter中启用交互模式 plt.ion() # 交互模式
现代替代方案
传统库 | 现代替代 | 优势 |
---|---|---|
PIL | OpenCV | 更快的图像处理速度 |
Matplotlib | Plotly/Seaborn | 更美观的统计图表 |
Numpy | CuPy | GPU加速计算 |
Pandas | Dask/Vaex | 大数据集处理能力 |
掌握这四大核心库,你就拥有了解决90%机器学习数据问题的能力。它们构成了从数据加载、预处理、分析到可视化的完整工作流,是每位机器学习工程师必备的工具箱。