跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
PythonAI算法

Python 数据科学工具链入门:NumPy、Pandas 与 Matplotlib 实战

Python 数据科学基础教程,涵盖环境搭建、NumPy 数组运算、Pandas 数据处理及 Matplotlib 可视化。通过泰坦尼克号数据集演示完整分析流程,包括缺失值处理、特征工程及图表绘制。适合初学者建立数据分析工作流,为机器学习项目奠定基础。

板砖工程师发布于 2026/3/27更新于 2026/6/1427 浏览
Python 数据科学工具链入门:NumPy、Pandas 与 Matplotlib 实战

Python 数据科学工具链入门:NumPy、Pandas 与 Matplotlib 实战

'工欲善其事,必先利其器。'在机器学习的世界里,你的'器'就是 Python 数据科学工具链。

为什么工具链如此重要?

想象你要做一道菜。即使背熟了所有食谱,如果厨房里只有生锈的刀、没校准的秤、漏底的锅,依然做不出好菜。

机器学习也是如此。算法是'菜谱',而 NumPy、Pandas、Matplotlib 就是你的'刀、秤、锅'——它们构成了现代数据科学工作的基础设施。

很多初学者一上来就急着学'神经网络''梯度提升',却连如何读取一个 CSV 文件都磕磕绊绊。结果是:想法很丰满,代码跑不动。

本文的目标很明确:

  • 让你在短时间内掌握三大核心库的基础用法;
  • 能独立完成 数据加载 → 清洗 → 探索 → 可视化 的完整流程;
  • 为后续所有机器学习项目打下坚实工具基础。

不需要你成为专家,但要让你不再被工具卡住。

环境准备:5 分钟搭建你的'数据厨房'

推荐方式:使用 Anaconda(最省心)
  1. 访问 https://www.anaconda.com/products/distribution
  2. 下载对应你操作系统的安装包(Windows / macOS / Linux)
  3. 安装时勾选 'Add to PATH'(Windows 用户注意)
  4. 安装完成后,打开 Anaconda Prompt(Windows)或终端(macOS/Linux)

💡 Anaconda 自带 Python、NumPy、Pandas、Matplotlib、Jupyter 等几乎所有你需要的库,避免依赖冲突。

验证安装

在终端中输入:

python --version

应显示 Python 3.9+。

然后启动 Jupyter Notebook(推荐交互式开发环境):

jupyter notebook

浏览器会自动打开一个文件管理界面——这就是你的'数据实验室'。

🔧 替代方案:如果你已用 pip 管理 Python,可手动安装:

pip install numpy pandas matplotlib seaborn jupyter

NumPy:高效数值计算的基石

为什么需要 NumPy?

Python 原生的 list 虽然灵活,但在科学计算中存在两大问题:

  1. 速度慢:每个元素都是 Python 对象,内存开销大;
  2. 不支持向量化运算:无法直接对整个数组做加减乘除。

而 NumPy(Numerical Python) 提供了:

  • ndarray:高效的多维数组对象;
  • 广播机制(Broadcasting):自动对不同形状的数组进行运算;
  • C 语言底层实现:比纯 Python 快 10–100 倍。

📌 记住:几乎所有数据科学库(Pandas、scikit-learn、TensorFlow)都基于 NumPy 构建。

1. 创建数组
import numpy as np

# 从列表创建
arr = np.array([1, 2, 3, 4])
print(arr)  # [1 2 3 4]

# 创建全零/全一数组
zeros = np.zeros(5)          # [0. 0. 0. 0. 0.]
ones = np.ones((2, 3))       # 2x3 全 1 矩阵

# 创建等差数列
linspace = np.linspace(0, 10, 5)  # [0.  2.5  5.  7.5 10. ]

# 创建随机数组
rand = np.random.rand(3, 2)  # 3x2,值在 [0,1) 之间
2. 数组属性与形状操作
arr = np.array([[1, 2, 3], [4, 5, 6]])

print("形状:", arr.shape)      # (2, 3)
print("维度:", arr.ndim)        # 2
print("元素总数:", arr.size)    # 6
print("数据类型:", arr.dtype)   # int64

# 改变形状(不改变数据)
reshaped = arr.reshape(3, 2)
print(reshaped)
# [[1 2]
#  [3 4]
#  [5 6]]

# 展平为一维
flat = arr.flatten()           # [1 2 3 4 5 6]
3. 向量化运算(无需 for 循环!)
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])

# 元素级加法
print(a + b)                   # [5 7 9]

# 元素级乘法
print(a * b)                   # [ 4 10 18]

# 平方
print(a ** 2)                  # [1 4 9]

# 三角函数
print(np.sin(a))               # [0.8415 0.9093 0.1411]

# 条件筛选
print(a[a > 1])                # [2 3]

✅ 关键优势:这些操作在 C 层面并行执行,速度极快。

4. 常用数学函数
arr = np.array([1, 2, 3, 4, 5])

print("均值:", np.mean(arr))     # 3.0
print("标准差:", np.std(arr))    # 1.414...
print("最大值:", np.max(arr))     # 5
print("索引最大值:", np.argmax(arr))  # 4
print("求和:", np.sum(arr))       # 15

💡 这些函数将贯穿你未来的模型评估、特征工程等环节。

Pandas:让数据处理像 Excel 一样直观

如果说 NumPy 是'引擎',那么 Pandas 就是'驾驶舱'——它提供了更贴近人类思维的数据结构。

核心数据结构
结构维度类比
Series1D带标签的一列数据(如 Excel 的一列)
DataFrame2D表格(如 Excel 工作表)
1. 创建 DataFrame
import pandas as pd

# 从字典创建
data = {
    'name': ['Alice', 'Bob', 'Charlie'],
    'age': [25, 30, 35],
    'city': ['NYC', 'LA', 'Chicago']
}
df = pd.DataFrame(data)
print(df)

输出:

    name  age     city
0  Alice   25      NYC
1    Bob   30       LA
2 Charlie   35  Chicago
2. 读取真实数据(CSV/Excel)

我们将使用经典的 泰坦尼克号乘客数据集(titanic.csv),可从 Kaggle 下载,或使用 seaborn 内置版本:

# 方法 1:从 seaborn 加载(推荐初学者)
import seaborn as sns
titanic = sns.load_dataset('titanic')

# 方法 2:从本地 CSV 读取
# titanic = pd.read_csv('titanic.csv')

print("前 5 行:")
print(titanic.head())
print("\n基本信息:")
print(titanic.info())

典型输出:

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 891 entries, 0 to 890
Data columns (total 15 columns):
 #   Column   Non-Null Count  Dtype  
---  ------   --------------  -----  
 0   survived 891 non-null    int64  
 1   pclass   891 non-null    int64  
 2   sex      891 non-null    object 
 3   age      714 non-null    float64
 ...

🔍 注意:age 和 embarked 有缺失值(Non-Null Count < 891)——这是真实数据的常态!

3. 基础探索:了解你的数据
# 查看维度
print("形状:", titanic.shape)            # (891, 15)

# 统计摘要(仅数值列)
print(titanic.describe())

# 查看分类变量分布
print(titanic['sex'].value_counts())
# male    577
# female  314

# 检查缺失值
print(titanic.isnull().sum())
# age         177
# embarked      2
# deck        688 ← 大量缺失,可能需删除
4. 数据筛选与索引
# 单列(返回 Series)
ages = titanic['age']

# 多列(返回 DataFrame)
subset = titanic[['name', 'age', 'fare']]

# 条件筛选
survived_females = titanic[(titanic['survived'] == 1) & (titanic['sex'] == 'female')]

# 使用 .loc(基于标签)
first_row = titanic.loc[0, ['name', 'age']]

# 使用 .iloc(基于位置)
first_three = titanic.iloc[:3, :5]  # 前 3 行,前 5 列

⚠️ 注意:& 代替 and,| 代替 or,且条件要用括号包围。

5. 处理缺失值(数据清洗第一步)
# 方案 1:删除含缺失的行(谨慎使用!)
titanic_clean1 = titanic.dropna()

# 方案 2:用均值填充年龄
titanic['age'].fillna(titanic['age'].mean(), inplace=True)

# 方案 3:用众数填充登船港口
mode_embarked = titanic['embarked'].mode()[0]
titanic['embarked'].fillna(mode_embarked, inplace=True)

# 验证
print(titanic[['age', 'embarked']].isnull().sum())  # 应为 0

✅ 最佳实践:记录你做了什么处理,因为这直接影响模型效果。

6. 特征工程初探(为 ML 做准备)
# 创建新特征:家庭规模 = 兄弟姐妹 + 父母子女 + 自己
titanic['family_size'] = titanic['sibsp'] + titanic['parch'] + 1

# 分箱:将年龄分为儿童/成人/老人
titanic['age_group'] = pd.cut(
    titanic['age'], 
    bins=[0, 18, 65, 100], 
    labels=['Child', 'Adult', 'Senior']
)

# 编码分类变量(字符串 → 数字)
titanic['sex_encoded'] = titanic['sex'].map({'male': 0, 'female': 1})

# 查看结果
print(titanic[['age', 'age_group', 'sex', 'sex_encoded']].head())

🌟 这些操作正是后续机器学习中'特征工程'的核心内容。

Matplotlib 与 Seaborn:用图表讲好数据故事

'一图胜千言'——在数据科学中,可视化是理解、沟通、发现的关键。

1. Matplotlib:基础绘图库
import matplotlib.pyplot as plt

# 设置中文字体(避免乱码)
plt.rcParams['font.sans-serif'] = ['SimHei']  # Windows
# plt.rcParams['font.family'] = 'Arial Unicode MS'  # macOS

# 示例 1:直方图(年龄分布)
plt.figure(figsize=(8, 5))
plt.hist(titanic['age'], bins=20, color='skyblue', edgecolor='black')
plt.title('泰坦尼克号乘客年龄分布')
plt.xlabel('年龄')
plt.ylabel('人数')
plt.grid(axis='y', linestyle='--', alpha=0.7)
plt.show()
2. Seaborn:统计可视化利器(基于 Matplotlib)

Seaborn 提供更高层次的接口,一行代码即可生成精美图表。

import seaborn as sns

# 示例 2:生存率 vs 性别(柱状图)
plt.figure(figsize=(6, 4))
sns.barplot(x='sex', y='survived', data=titanic)
plt.title('不同性别的生存率')
plt.ylabel('生存概率')
plt.show()

输出将清晰显示:女性生存率远高于男性(约 74% vs 19%)。

3. 散点图:探索变量关系
# 年龄 vs 票价,颜色表示是否生存
plt.figure(figsize=(8, 6))
sns.scatterplot(
    x='age', 
    y='fare', 
    hue='survived', 
    data=titanic, 
    alpha=0.7
)
plt.title('年龄与票价的关系(按生存状态着色)')
plt.show()
4. 热力图:查看相关性
# 选择数值列
numeric_cols = titanic.select_dtypes(include=['number']).columns
corr_matrix = titanic[numeric_cols].corr()

# 绘制热力图
plt.figure(figsize=(10, 8))
sns.heatmap(corr_matrix, annot=True, cmap='coolwarm', center=0)
plt.title('数值特征相关性热力图')
plt.show()

🔍 你会发现 pclass(舱位等级)与 fare(票价)高度负相关(-0.55)——头等舱票价高,等级数字小(1=头等)。

端到端实战:从原始数据到洞察

现在,我们将整合三大工具,完成一个微型分析项目。

目标:分析泰坦尼克号乘客的生存影响因素
步骤 1:加载与清洗
import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt

# 加载数据
df = sns.load_dataset('titanic')

# 基础清洗
df['age'].fillna(df['age'].median(), inplace=True)
df.drop(columns=['deck', 'embark_town'], inplace=True)  # 删除高缺失列
df.dropna(subset=['embarked'], inplace=True)
步骤 2:创建新特征
df['family_size'] = df['sibsp'] + df['parch'] + 1
df['is_alone'] = (df['family_size'] == 1).astype(int)
步骤 3:可视化关键发现
fig, axes = plt.subplots(2, 2, figsize=(14, 10))

# 1. 舱位等级 vs 生存率
sns.barplot(x='pclass', y='survived', data=df, ax=axes[0, 0])
axes[0, 0].set_title('舱位等级与生存率')

# 2. 是否独自旅行 vs 生存率
sns.barplot(x='is_alone', y='survived', data=df, ax=axes[0, 1])
axes[0, 1].set_title('独自旅行与生存率')
axes[0, 1].set_xticklabels(['否', '是'])

# 3. 年龄分布(按生存状态)
df[df['survived'] == 1]['age'].hist(alpha=0.7, label='生存', ax=axes[1, 0])
df[df['survived'] == 0]['age'].hist(alpha=0.7, label='遇难', ax=axes[1, 0])
axes[1, 0].set_title('年龄分布对比')
axes[1, 0].legend()

# 4. 票价分布(对数尺度)
df.boxplot(column='fare', by='survived', ax=axes[1, 1])
axes[1, 1].set_yscale('log')
axes[1, 1].set_title('票价分布(对数尺度)')

plt.tight_layout()
plt.show()
关键洞察:
  1. 头等舱(pclass=1)生存率最高;
  2. 结伴旅行者生存率更高;
  3. 儿童(<10 岁)生存率明显提升;
  4. 高票价乘客更可能生存(可能与舱位相关)。

🎯 这些洞察可直接用于后续的机器学习建模——例如,pclass、is_alone、age 都是强预测特征。

常见陷阱与最佳实践

1. 不要滥用 inplace=True

虽然 df.dropna(inplace=True) 看似方便,但它会直接修改原数据,难以回溯。建议:

df_clean = df.dropna()  # 显式创建新对象
2. 避免链式索引(Chained Indexing)

错误写法:

df[df['age'] > 30]['fare'] = 100  # 可能报 SettingWithCopyWarning

正确写法:

df.loc[df['age'] > 30, 'fare'] = 100
3. 可视化前先检查数据分布
  • 对长尾分布(如票价)使用对数尺度;
  • 对分类变量确保类别不多(否则图表混乱);
  • 添加标题、坐标轴标签、图例——否则别人看不懂。
4. 保持代码可复现
  • 设置随机种子:np.random.seed(42)
  • 记录 Pandas/NumPy 版本(不同版本行为可能不同)

下一步:为机器学习做准备

通过本文,你已经掌握了:

  • 用 NumPy 高效处理数值;
  • 用 Pandas 清洗、转换、探索表格数据;
  • 用 Matplotlib/Seaborn 可视化发现规律。

接下来,可以深入探讨:

  • 数据质量的五大维度(完整性、一致性、准确性等);
  • 更高级的缺失值处理策略(插值、模型预测填充);
  • 异常值检测与处理;
  • 特征缩放(标准化、归一化)的必要性。

这些内容将直接决定你未来模型的上限。

动手实践建议

  1. 运行本文所有代码,不要只看;
  2. 尝试用 Pandas 分析你自己的数据(如运动记录、账单、课程成绩);
  3. 在 Kaggle 上下载一个新数据集(如 House Prices),重复本文流程;
  4. 将 Notebook 版本化管理,便于后续迭代。

记住:工具的价值不在'知道',而在'用过'。你敲下的每一行代码,都在为未来的智能系统铺路。

目录

  1. Python 数据科学工具链入门:NumPy、Pandas 与 Matplotlib 实战
  2. 为什么工具链如此重要?
  3. 环境准备:5 分钟搭建你的“数据厨房”
  4. 推荐方式:使用 Anaconda(最省心)
  5. 验证安装
  6. NumPy:高效数值计算的基石
  7. 为什么需要 NumPy?
  8. 1. 创建数组
  9. 从列表创建
  10. 创建全零/全一数组
  11. 创建等差数列
  12. 创建随机数组
  13. 2. 数组属性与形状操作
  14. 改变形状(不改变数据)
  15. [[1 2]
  16. [3 4]
  17. [5 6]]
  18. 展平为一维
  19. 3. 向量化运算(无需 for 循环!)
  20. 元素级加法
  21. 元素级乘法
  22. 平方
  23. 三角函数
  24. 条件筛选
  25. 4. 常用数学函数
  26. Pandas:让数据处理像 Excel 一样直观
  27. 核心数据结构
  28. 1. 创建 DataFrame
  29. 从字典创建
  30. 2. 读取真实数据(CSV/Excel)
  31. 方法 1:从 seaborn 加载(推荐初学者)
  32. 方法 2:从本地 CSV 读取
  33. titanic = pd.read_csv('titanic.csv')
  34. Column Non-Null Count Dtype
  35. 3. 基础探索:了解你的数据
  36. 查看维度
  37. 统计摘要(仅数值列)
  38. 查看分类变量分布
  39. male 577
  40. female 314
  41. 检查缺失值
  42. age 177
  43. embarked 2
  44. deck 688 ← 大量缺失,可能需删除
  45. 4. 数据筛选与索引
  46. 单列(返回 Series)
  47. 多列(返回 DataFrame)
  48. 条件筛选
  49. 使用 .loc(基于标签)
  50. 使用 .iloc(基于位置)
  51. 5. 处理缺失值(数据清洗第一步)
  52. 方案 1:删除含缺失的行(谨慎使用!)
  53. 方案 2:用均值填充年龄
  54. 方案 3:用众数填充登船港口
  55. 验证
  56. 6. 特征工程初探(为 ML 做准备)
  57. 创建新特征:家庭规模 = 兄弟姐妹 + 父母子女 + 自己
  58. 分箱:将年龄分为儿童/成人/老人
  59. 编码分类变量(字符串 → 数字)
  60. 查看结果
  61. Matplotlib 与 Seaborn:用图表讲好数据故事
  62. 1. Matplotlib:基础绘图库
  63. 设置中文字体(避免乱码)
  64. plt.rcParams['font.family'] = 'Arial Unicode MS' # macOS
  65. 示例 1:直方图(年龄分布)
  66. 2. Seaborn:统计可视化利器(基于 Matplotlib)
  67. 示例 2:生存率 vs 性别(柱状图)
  68. 3. 散点图:探索变量关系
  69. 年龄 vs 票价,颜色表示是否生存
  70. 4. 热力图:查看相关性
  71. 选择数值列
  72. 绘制热力图
  73. 端到端实战:从原始数据到洞察
  74. 目标:分析泰坦尼克号乘客的生存影响因素
  75. 步骤 1:加载与清洗
  76. 加载数据
  77. 基础清洗
  78. 步骤 2:创建新特征
  79. 步骤 3:可视化关键发现
  80. 1. 舱位等级 vs 生存率
  81. 2. 是否独自旅行 vs 生存率
  82. 3. 年龄分布(按生存状态)
  83. 4. 票价分布(对数尺度)
  84. 关键洞察:
  85. 常见陷阱与最佳实践
  86. 1. 不要滥用 inplace=True
  87. 2. 避免链式索引(Chained Indexing)
  88. 3. 可视化前先检查数据分布
  89. 4. 保持代码可复现
  90. 下一步:为机器学习做准备
  91. 动手实践建议
  • 💰 8折买阿里云服务器限时8折了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • 手把手教程:通过扣子平台部署OpenClaw并接入飞书,开启AI自动办公
  • 通义灵码 AI 程序员 实操全指南:从 IDE 安装到全栈需求落地(多文件批量修改 + 报错自动修复 + 跨语言开发)
  • 黑客盗取密码的常见方法与防御策略
  • (第一篇)破冰篇:Spring AI 到底是什么?核心亮点拆解与实战指南
  • Neo4j 性能监控指南:5 大技巧快速诊断数据库瓶颈
  • C++红黑树原理与实现
  • 无人机相关法律法规全体系梳理
  • 大学生AI写作工具全流程应用指南(从开题到答辩)
  • Copilot vs Claude Code终极对决哪个会更好用呢?
  • DeepSeek 结合通义万相制作 AI 视频实战
  • Lada v0.11.0 更新:AI 视频去马赛克工具支持 Nvidia 与 Intel Arc
  • Hunyuan-MT-7B-WEBUI 术语统一后处理实现方案
  • VS Code 关闭 Copilot 代码 AI 补全
  • Nano Banana:AI 图像生成与编辑技术详解
  • AI 时代产品经理的成长之路:从方案到战略的能力模型
  • 教育行业新机遇:用GLM-4.6V-Flash-WEB打造智能阅卷系统
  • Cursor Chat Browser:浏览和管理 Cursor AI 聊天历史的 Web 应用
  • Spring Boot 与 Vue 3 实时游戏匹配实战:WebSocket 前后端对接
  • OpenClaw 保姆级超详细教程:小白也能轻松上手的 AI 智能体
  • OpenClaw Linux 本地化 AI 智能体部署指南

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • RSA密钥对生成器

    生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online

  • Mermaid 预览与可视化编辑

    基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online

  • 随机西班牙地址生成器

    随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online