机器学习开发环境搭建:Python、NumPy、pandas 与 Jupyter 生态实战

手把手搭建机器学习开发环境:Python 虚拟环境、Jupyter 生态、NumPy 数组计算、pandas 数据处理、Matplotlib 可视化与 Scikit-learn 安装,并给出常用命令速查与常见环境坑的解决方案,是零基础开始机器学习的第零课。

引言

开始机器学习的第一道坎,不是算法,而是「环境装不上」。Python 包之间版本冲突、GPU 驱动缺失、Notebook 启动即崩……这些环境问题劝退了大量入门者。实际上,只要掌握「虚拟环境 + 包管理 + Notebook」这三板斧,环境搭建可以在十分钟内稳定复现。

本文是机器学习实战的第零课:从 Python 环境选择讲起,安装并验证 NumPy、pandas、Matplotlib、Scikit-learn 四大核心库,跑通一个「加载数据 → 处理 → 可视化 → 训练模型」的最小闭环,让你从「能跑」到「理解自己在跑什么」。

前置知识:Python 基础语法(变量、函数、类)。若完全没接触过,建议先跑一遍 Python 官方教程的前半部分。关于机器学习的知识结构全景,可先阅读 https://plumephp.com/machine-learning-knowledge-structure/。


目录


1. 环境选型:直接安装 vs 发行版 vs 容器

1.1 三种方案对比

方案优点缺点适合谁
系统 Python + pip轻量、可控包冲突风险有经验者
Conda / Miniconda环境隔离强、二进制包预编译体积大、命令多数据分析主流
Docker 镜像完全可复现学习曲线陡团队协作/部署

1.2 我的建议

个人学习起步用 Miniconda 或系统 Python + venv。两者都能满足需求,关键在于「一个项目一个环境」。


2. Python 与虚拟环境:隔离是美德

2.1 为什么需要虚拟环境

不同项目对库版本要求不同:项目 A 要 scikit-learn 1.3,项目 B 要 1.6。装进同一个全局环境会互相覆盖,最终「这个项目跑不了那个项目也崩」。虚拟环境让每个项目有自己的包目录。

2.2 venv 创建与激活

# 创建虚拟环境(Python 3.10+ 内置 venv)
python3 -m venv ml_env

# 激活(macOS / Linux)
source ml_env/bin/activate

# 激活(Windows PowerShell)
# ml_env\Scripts\activate

# 此时提示符前会出现 (ml_env),包只装在这个环境里

2.3 退出与删除

deactivate          # 退出当前虚拟环境
rm -rf ml_env      # 删除整个环境(重来成本极低)

2.4 pip 升级与源

pip install --upgrade pip
# 国内可配置镜像加速(示例:清华源)
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

3. 核心库安装与版本验证

3.1 一键安装四大件

pip install numpy pandas matplotlib scikit-learn jupyter

3.2 安装后必须验证

import numpy as np
import pandas as pd
import matplotlib
import sklearn

print("NumPy 版本:", np.__version__)
print("pandas 版本:", pd.__version__)
print("Matplotlib 版本:", matplotlib.__version__)
print("scikit-learn 版本:", sklearn.__version__)

3.3 版本冲突时的思路

pip check                       # 检查依赖冲突
pip list --outdated             # 查看可更新包
pip freeze > requirements.txt   # 导出当前环境快照

4. Jupyter Notebook 与 Lab:交互式开发的入口

4.1 启动

jupyter notebook   # 经典版
jupyter lab        # 新一代界面(推荐)

启动后浏览器打开 http://localhost:8888,即可创建 .ipynb Notebook。

4.2 Notebook 的核心操作

操作快捷键说明
运行单元格Shift+Enter执行并进入下一格
新增单元格Esc 后 b在下方插入
切换为 MarkdownEsc 后 m写说明文字
切换为代码Esc 后 y写代码
清空输出Esc 后 O O重新运行

4.3 一个最小 Notebook

单元格1(Markdown): # 房价预测实验
单元格2(代码):     import pandas as pd
单元格3(代码):     df = pd.DataFrame({'area':[50,80,120],'price':[200,320,480]})
单元格4(代码):     df.plot()

Notebook 的价值在于「边写边看结果」,适合探索性分析与教学演示。


5. NumPy:数组计算的基石

5.1 为什么需要 NumPy

Python 列表能做数学运算,但慢、且 + 是拼接不是逐元素相加。NumPy 提供多维数组 ndarray,用 C 底层加速逐元素运算。

5.2 创建与基本运算

import numpy as np

a = np.array([1, 2, 3])
b = np.array([4, 5, 6])

print(a + b)          # [5 7 9]  逐元素相加
print(a * 2)          # [2 4 6]  广播
print(a.dot(b))       # 32       点积

# 多维数组
m = np.zeros((2, 3))  # 2行3列全0
print(m.shape)        # (2, 3)

5.3 布尔索引与切片

data = np.array([1, 5, 3, 9, 7])
mask = data > 4
print(data[mask])     # [5 9 7]  过滤出大于4的元素

print(data[1:4])      # [5 3 9]  切片

5.4 随机数(数据科学常用)

np.random.seed(42)                 # 固定随机种子,保证结果可复现
x = np.random.randn(1000)          # 标准正态分布 1000 个点
print(x.mean(), x.std())           # 约 0 和 1

NumPy 是 pandas 与 Scikit-learn 的地基,多花半小时把「广播」「布尔索引」玩熟,后续效率翻倍。


6. pandas:表格数据处理的第一步

6.1 DataFrame:像 Excel 一样的 Python 对象

import pandas as pd

df = pd.DataFrame({
    '姓名': ['张三', '李四', '王五'],
    '年龄': [25, 32, 28],
    '城市': ['北京', '上海', '深圳'],
})
print(df)

6.2 读取真实数据

df = pd.read_csv('housing.csv')       # 最常用:读 CSV
df = pd.read_excel('data.xlsx')      # 读 Excel(需 openpyxl)
print(df.head())                     # 看前 5 行
print(df.info())                     # 列类型与缺失值概览
print(df.describe())                 # 数值列的统计摘要

6.3 选择与过滤

df['area']                          # 选一列
df[['area', 'price']]               # 选多列
df[df['area'] > 100]                # 按条件过滤行
df.iloc[0:5]                        # 按位置取前5行
df.loc[df['city'] == '北京']         # 按标签/条件取行

6.4 处理缺失值

df.isnull().sum()                   # 每列缺失数量
df = df.dropna()                    # 删掉含缺失的行
df['age'] = df['age'].fillna(df['age'].mean())   # 用均值填充

6.5 groupby 分组聚合

# 按城市分组,计算平均年龄
city_mean = df.groupby('城市')['年龄'].mean()
print(city_mean)

7. Matplotlib 与可视化基础

7.1 散点图:两个数值变量的关系

import matplotlib.pyplot as plt

plt.scatter(df['area'], df['price'])
plt.xlabel('面积 (m²)')
plt.ylabel('价格 (万元)')
plt.title('面积与房价散点图')
plt.show()          # Jupyter 里可直接显示

7.2 直方图:看分布

plt.hist(df['age'], bins=20, edgecolor='black')
plt.title('年龄分布')
plt.show()

7.3 多图并排

fig, axes = plt.subplots(1, 2, figsize=(10, 4))
axes[0].scatter(df['area'], df['price'])
axes[0].set_title('面积 vs 价格')
axes[1].hist(df['age'], bins=15, edgecolor='black')
axes[1].set_title('年龄分布')
plt.tight_layout()
plt.show()

可视化是「理解数据」最廉价的方式。任何数据集,先画三张图:散点看关系、直方看分布、箱线看离群。


8. 最小闭环:从数据到模型的完整脚本

把前面所有组件串成一个 20 行的小项目:造数据、切分、训练线性回归、评估。

import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error

# 1. 造数据:面积 → 房价(带噪声)
np.random.seed(42)
n = 200
area = np.random.uniform(30, 200, n)
price = 2 * area + 50 + np.random.normal(0, 20, n)
df = pd.DataFrame({'area': area, 'price': price})

# 2. 切分训练集/测试集
X = df[['area']]
y = df['price']
X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.2, random_state=42)

# 3. 训练模型
model = LinearRegression()
model.fit(X_train, y_train)

# 4. 预测与评估
y_pred = model.predict(X_test)
mse = mean_squared_error(y_test, y_pred)
print("均方误差 MSE:", round(mse, 2))
print("系数(每㎡价值):", round(model.coef_[0], 2))
print("截距:", round(model.intercept_, 2))
输出示例:
均方误差 MSE: 393.51
系数(每㎡价值): 2.02
截距: 48.76

这 20 行就是机器学习工作流的缩影:准备数据 → 切分 → 训练 → 评估。后面所有专题文章都在放大这套流程的某一步。


9. 环境排错速查与最佳实践

9.1 常见错误速查

报错原因解法
ModuleNotFoundError: No module named 'numpy'库没装或装错环境pip install numpy,确认当前虚拟环境
import 报版本冲突依赖不兼容pip check,必要时重建环境
Notebook 打不开端口占用jupyter notebook --port 8899
df.plot() 无输出Matplotlib 后端问题加 %matplotlib inline
GPU 相关报错CUDA 未配置先 CPU-only 版本起步

9.2 环境管理的黄金法则

# 法则1:每个项目一个虚拟环境
python3 -m venv .venv && source .venv/bin/activate

# 法则2:项目根目录放 requirements.txt
pip freeze > requirements.txt

# 法则3:换机器/同事协作时一键重建
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt

9.3 学习建议

  • 先跑通最小闭环,再啃算法:环境第零课,闭环第一课。
  • 固定随机种子:所有实验 np.random.seed(42),结果可复现。
  • 环境问题先问自己:当前在哪个环境?which python / pip list。

延伸阅读

  • https://plumephp.com/machine-learning-knowledge-structure/ — 机器学习知识结构全景图谱(本专题入口)
  • https://plumephp.com/ml-supervised-regression/ — 线性回归与监督学习实战
  • Python 官方教程 与 pandas 官方入门
  • 进阶参考:[[ai-ml]] 专题的模型评估与 MLOps 文章

继续阅读

探索更多技术文章

浏览归档,发现更多关于系统设计、工具链和工程实践的内容。

全部文章 返回首页

「ml」更多文章

  1. 集成学习实战:Bagging、随机森林、梯度提升与 Stacking
  2. 迁移学习实战:预训练模型、特征提取与微调全流程
  3. 计算机视觉入门实战:图像处理与 CNN 图像分类