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

Python 数据科学工具链入门:NumPy、Pandas、Matplotlib 基础

介绍 Python 数据科学核心工具链。涵盖 NumPy 数值计算基础,包括数组创建、属性操作及向量化运算;Pandas 数据处理,涉及 DataFrame 构建、CSV 读取、缺失值清洗及特征工程;Matplotlib 与 Seaborn 可视化,展示直方图、散点图及热力图绘制。通过泰坦尼克号数据集实战,演示从数据加载、清洗到分析洞察的完整流程,并总结常见编码陷阱与最佳实践,为机器学习项目奠定基础。

筑梦师发布于 2026/3/30更新于 2026/10/2651K 浏览
Python 数据科学工具链入门:NumPy、Pandas、Matplotlib 基础

Python 数据科学工具链入门:NumPy、Pandas、Matplotlib 基础

一、为什么工具链如此重要?

机器学习算法是'菜谱',而 NumPy、Pandas、Matplotlib 构成了现代数据科学工作的基础设施。初学者若无法熟练使用这些工具,往往难以将想法转化为代码。

本文旨在帮助读者掌握三大核心库的基础用法,独立完成数据加载、清洗、探索及可视化的完整流程。

二、环境准备

推荐方式:使用 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

浏览器会自动打开文件管理界面。

三、NumPy:高效数值计算的基石

Python 原生 list 在科学计算中存在速度慢、不支持向量化运算的问题。NumPy 提供了高效的 ndarray 对象、广播机制及 C 语言底层实现。

1. 创建数组

import numpy as np

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

# 创建全零/全一数组
zeros = np.zeros(5)
one = np.ones((2, 3))

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

# 创建随机数组
rand = np.random.rand(3, 2)

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)

# 展平为一维
flat = arr.flatten()

3. 向量化运算

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

# 元素级加法
print(a + b)

# 元素级乘法
print(a * b)

# 平方
print(a ** 2)

# 三角函数
print(np.sin(a))

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

4. 常用数学函数

arr = np.array([1, 2, 3, 4, 5])
print("均值:", np.mean(arr))
print("标准差:", np.std(arr))
print("最大值:", np.max(arr))
print("索引最大值:", np.argmax(arr))
print("求和:", np.sum(arr))

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

Pandas 提供了更贴近人类思维的数据结构:Series(一列数据)和 DataFrame(表格)。

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)

2. 读取真实数据

import seaborn as sns

# 方法 1:从 seaborn 加载
titanic = sns.load_dataset('titanic')

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

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

3. 基础探索

# 查看维度
print("形状:", titanic.shape)

# 统计摘要
print(titanic.describe())

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

# 检查缺失值
print(titanic.isnull().sum())

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]

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())

6. 特征工程初探

# 创建新特征:家庭规模
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']

# 直方图
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:统计可视化利器

import seaborn as sns

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

3. 散点图:探索变量关系

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()

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

步骤 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))

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

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

# 年龄分布对比
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()

# 票价分布
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. 高票价乘客更可能生存。

七、常见陷阱与最佳实践

1. 不要滥用 inplace=True

直接修改原数据难以回溯。建议显式创建新对象:

df_clean = df.dropna()

2. 避免链式索引

错误写法:

df[df['age'] > 30]['fare'] = 100

正确写法:

df.loc[df['age'] > 30, 'fare'] = 100

3. 可视化前先检查数据分布

  • 对长尾分布使用对数尺度;
  • 确保类别数量适中;
  • 添加标题、坐标轴标签、图例。

4. 保持代码可复现

  • 设置随机种子:np.random.seed(42)
  • 记录 Pandas/NumPy 版本。

目录

  1. Python 数据科学工具链入门:NumPy、Pandas、Matplotlib 基础
  2. 一、为什么工具链如此重要?
  3. 二、环境准备
  4. 推荐方式:使用 Anaconda
  5. 验证安装
  6. 三、NumPy:高效数值计算的基石
  7. 1. 创建数组
  8. 从列表创建
  9. 创建全零/全一数组
  10. 创建等差数列
  11. 创建随机数组
  12. 2. 数组属性与形状操作
  13. 改变形状(不改变数据)
  14. 展平为一维
  15. 3. 向量化运算
  16. 元素级加法
  17. 元素级乘法
  18. 平方
  19. 三角函数
  20. 条件筛选
  21. 4. 常用数学函数
  22. 四、Pandas:让数据处理像 Excel 一样直观
  23. 1. 创建 DataFrame
  24. 2. 读取真实数据
  25. 方法 1:从 seaborn 加载
  26. 方法 2:从本地 CSV 读取
  27. titanic = pd.read_csv('titanic.csv')
  28. 3. 基础探索
  29. 查看维度
  30. 统计摘要
  31. 查看分类变量分布
  32. 检查缺失值
  33. 4. 数据筛选与索引
  34. 单列(返回 Series)
  35. 多列(返回 DataFrame)
  36. 条件筛选
  37. 使用 .loc(基于标签)
  38. 使用 .iloc(基于位置)
  39. 5. 处理缺失值
  40. 方案 1:删除含缺失的行
  41. 方案 2:用均值填充年龄
  42. 方案 3:用众数填充登船港口
  43. 6. 特征工程初探
  44. 创建新特征:家庭规模
  45. 分箱:将年龄分为儿童/成人/老人
  46. 编码分类变量
  47. 五、Matplotlib 与 Seaborn:可视化
  48. 1. Matplotlib:基础绘图库
  49. 设置中文字体
  50. 直方图
  51. 2. Seaborn:统计可视化利器
  52. 生存率 vs 性别
  53. 3. 散点图:探索变量关系
  54. 4. 热力图:查看相关性
  55. 六、端到端实战:从原始数据到洞察
  56. 步骤 1:加载与清洗
  57. 步骤 2:创建新特征
  58. 步骤 3:可视化关键发现
  59. 舱位等级 vs 生存率
  60. 是否独自旅行 vs 生存率
  61. 年龄分布对比
  62. 票价分布
  63. 七、常见陷阱与最佳实践
  64. 1. 不要滥用 inplace=True
  65. 2. 避免链式索引
  66. 3. 可视化前先检查数据分布
  67. 4. 保持代码可复现

更多推荐文章

查看全部
  • 链表分类详解与带头双向循环链表初始化实现
  • 适合 Python 初学者的 11 个优质学习资源网站推荐
  • 自然语言训练 OpenClaw:打造本地全能 AI 助手,支持 SQL 与办公自动化
  • Mac mini M4 部署 OpenClaw 与 Ollama 本地大模型接入飞书机器人
  • Python 与 Excel 数据分析效率对比:性能差异实测
  • Scala 核心知识点梳理:从基础语法到集合框架
  • FPGA 跨时钟域 CDC 处理的三种实用工程方案
  • 物业 ERP 系统技术架构解析:低代码与 AI 应用实践
  • OpenClaw 本地 AI 智能体:从入门部署到实战应用
  • OpenClaw 基础:Telegram 机器人配置与加入群聊
  • Ubuntu 22.04 安装与配置 Openclaw 教程
  • OpenClaw 本地部署与飞书机器人接入教程
  • ToClaw 融合 OpenClaw 与远程功能,对比网页 AI 与传统工具
  • TS-RAG:基于检索增强的时间序列基础模型零样本预测
  • 27 岁自学 Python 转行可行性与入行时机分析
  • AI 辅助开发微信小程序“打工了马”实战
  • 进程概念详解:命令行参数、环境变量与地址空间
  • PyCharm 中 GitHub Copilot 插件安装与配置指南
  • Python 语言学习:大学生学术与职业应用指南
  • Ubuntu 22.04 生产环境部署 FastAPI + Uvicorn + Nginx 实战

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如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