Jupyter Notebook 数据科学:交互式探索分析

FreeGuideOnline 最新 2026-06-13

为什么选择 Jupyter Notebook

Jupyter Notebook 是一个开源的 Web 应用程序,允许你创建和共享包含实时代码、方程、可视化和叙述性文本的文档。它已经成为数据科学领域事实上的标准工具,尤其适合交互式探索性数据分析。你可以在同一个界面里编写代码、查看输出、添加注释和图表,这种“文学编程”风格让数据分析过程的记录与沟通变得极其流畅。

安装与启动

使用 Anaconda 安装(推荐)

Anaconda 是一个开源的 Python 和 R 发行版,内置了超过 250 个常用的数据科学包,并预装了 Jupyter Notebook。

  1. 访问 Anaconda 官网 下载对应系统的最新版本安装包。
  2. 运行安装程序,按照引导完成安装。
  3. 安装完成后,打开终端(Mac/Linux)或 Anaconda Prompt(Windows)。

使用 pip 安装(轻量)

如果你已经安装了 Python 和 pip,可以通过命令行快速安装:

pip install jupyter notebook

启动 Notebook

在终端中输入以下命令:

jupyter notebook

命令执行后,系统会在默认浏览器中自动打开 Notebook 仪表板,展示当前目录的文件列表。你也手动访问终端提示的地址,通常是 http://localhost:8888

Notebook 界面详解

进入仪表板后,你可以新建一个 Notebook 文件,或者打开已有的 .ipynb 文件。一个 Notebook 主要由以下部分组成:

  • 标题栏:显示 Notebook 名称,点击可重命名。
  • 菜单栏:提供文件操作、编辑、视图、单元格类型切换、内核管理等选项。
  • 工具栏:常用操作的快捷方式,如保存、添加单元格、运行等。
  • 单元格区域:核心工作区,所有代码和文本都在单元格中编写。
  • 内核状态指示器:位于右上角,显示内核空闲或忙碌。

Jupyter 支持两种主要单元格类型:

  • 代码单元格(Code):用于编写和执行代码,按 Shift + Enter 运行当前单元格。
  • Markdown 单元格:用于书写解释说明,支持 Markdown 语法,可添加标题、列表、链接、Latex 公式等。

基础操作与快捷键

掌握快捷键能够大幅提升效率。在命令模式(按 Esc 进入)和编辑模式(按 Enter 进入)下,快捷键有所不同。

操作 快捷键 说明
运行单元格 Shift + Enter 运行当前单元格并选中下一个
运行单元格并插入 Alt + Enter 运行当前单元格并在下方插入新单元格
转为代码单元格 Y 在命令模式下使用
转为 Markdown 单元格 M 在命令模式下使用
插入上方单元格 A 在命令模式下使用
插入下方单元格 B 在命令模式下使用
删除当前单元格 D, D (连续按两次) 在命令模式下使用
保存 Notebook Ctrl + S 内核不会因保存而中断

建议初学者先熟悉这几个核心操作,逐步提升编码流畅度。

数据加载:从文件到 DataFrame

数据科学的第一步是获取数据。在 Jupyter 中,我们通常使用 Pandas 库来读取和处理数据。确保已经安装了 Pandas:

pip install pandas

读取 CSV 文件

import pandas as pd

# 读取本地 CSV 文件,指定编码以防中文乱码
df = pd.read_csv('data.csv', encoding='utf-8')

# 查看前 5 行数据
df.head()

读取 Excel 文件

# 需要安装 openpyxl 或 xlrd
df = pd.read_excel('data.xlsx', sheet_name='Sheet1')
df.head()

直接从 URL 读取

url = 'https://example.com/dataset.csv'
df = pd.read_csv(url)

常用探查方法

加载数据后,立刻执行以下代码快速了解数据概况:

# 数据集形状(行数,列数)
print(df.shape)

# 各列的数据类型
print(df.dtypes)

# 基本信息,包括非空值数量
df.info()

# 数值型列的统计摘要
df.describe()

交互式数据清洗

现实世界的数据往往不干净,需要清洗和预处理。Jupyter Notebook 最大的优势在于可以分步骤进行清洗,每一步都能立即看到结果,方便发现问题。

处理缺失值

# 检查每一列的缺失值数量
df.isnull().sum()

# 删除包含缺失值的行
df_clean = df.dropna()

# 用均值填充数值型列
df['age'].fillna(df['age'].mean(), inplace=True)

# 用众数填充分类型列
df['gender'].fillna(df['gender'].mode()[0], inplace=True)

重命名列

df.rename(columns={'old_name': 'new_name', 'col2': 'new_col2'}, inplace=True)

数据类型转换

# 将字符串日期转为 datetime 类型
df['date'] = pd.to_datetime(df['date'])

# 将对象类型转换为分类类型以节省内存
df['category'] = df['category'].astype('category')

字符串处理

# 删除前后空格
df['name'] = df['name'].str.strip()

# 提取字符串中的数字部分
df['number'] = df['code'].str.extract('(\d+)')

这些操作都可以在一个个独立的单元格中执行,你可以随时回顾、修改或重新运行,完美体现交互式分析的灵活性。

探索性数据分析(EDA)

单变量分析

通过表格和可视化快速理解单个变量的分布。

# 分类变量频数统计
df['category'].value_counts().plot(kind='bar')

# 数值变量直方图
df['score'].hist(bins=30)

多变量分析

探索变量之间的关系,常用 groupby 和透视表。

# 按类别分组的均值统计
df.groupby('category')['value'].mean()

# 使用 pivot_table 创建透视表
pd.pivot_table(df, values='sales', index='region', columns='product', aggfunc='sum')

相关性分析

# 数值型列的相关性矩阵
corr = df.corr()
corr

利用 Seaborn 的热力图可以直观呈现相关性:

import seaborn as sns
import matplotlib.pyplot as plt

plt.figure(figsize=(10, 8))
sns.heatmap(corr, annot=True, cmap='coolwarm')
plt.show()

交互式可视化

Jupyter Notebook 天然支持 Matplotlib,但结合 Seaborn、Plotly 等库可以创建更丰富、更具交互性的图表。

Matplotlib + Seaborn 快速画图

import matplotlib.pyplot as plt
import seaborn as sns

# 设置风格
sns.set_style('whitegrid')

# 散点图
sns.scatterplot(data=df, x='height', y='weight', hue='gender')
plt.title('身高与体重关系')
plt.show()

Plotly 交互式图表

Plotly 生成的图表支持缩放、悬停显示数值等交互操作。

import plotly.express as px

fig = px.scatter(df, x='gdp_per_capita', y='life_expectancy',
                 size='population', color='continent',
                 hover_name='country', log_x=True)
fig.show()

在 Notebook 中,Plotly 图表直接嵌入输出单元格,你可以与它互动,这是传统静态图表无法比拟的。

使用 %matplotlib inline 魔法命令

为了在 Notebook 中内嵌显示图表,通常需要添加以下魔法命令(默认已在大多数环境下启用):

%matplotlib inline

利用 Markdown 单元格构建分析故事

一个优秀的数据科学 Notebook 不只是代码的堆砌,更是一份可读性强的分析报告。使用 Markdown 单元格添加:

  • 标题与章节:用 ###### 组织文档结构。
  • 项目列表:用于总结发现。
  • 链接:引用外部资源或数据集。
  • 图像![描述](图片地址),也可直接粘贴截图。
  • 数学公式:利用 LaTeX 语法,$$E = mc^2$$ 可渲染出美观的公式。

通过交替使用代码、输出和 Markdown 文本,你能构建出一个连贯的分析叙事,让协作者或未来的自己快速理解分析思路。

魔法命令:提升效率的利器

Jupyter 提供了许多内置的魔法命令(Magic Commands),以 %%% 开头,帮助完成环境配置、性能测试、文件操作等任务。

魔法命令 作用
%lsmagic 列出所有可用的魔法命令
%pwd 显示当前工作目录
%matplotlib inline 在 Notebook 中内嵌图表
%timeit 测量单行代码的执行时间
%%timeit 测量整个单元格代码的执行时间
%reset 清除当前命名空间中的所有变量
%who 列出当前所有变量
%run script.py 在 Notebook 中运行外部 Python 脚本
%timeit sum(range(1000000))

分享与导出

导出为静态文件

通过菜单 File -> Download as 可以将 Notebook 导出为多种格式:

  • HTML:保留交互式输出,适合直接分享查看。
  • PDF:适合打印,需要安装 LaTeX。
  • Markdown:可用于博客或文档生成工具。
  • Python 脚本 (.py):去除输出,仅保留代码。

使用 nbviewer 在线分享

.ipynb 文件上传到 GitHub,然后通过 nbviewer 生成可共享的链接,接收方无需安装任何东西即可查看 Notebook 的完整渲染版本。

进阶技巧

自动重载模块

当你修改了导入的自定义模块,使用 autoreload 可以避免反复重启内核。

%load_ext autoreload
%autoreload 2

在 Notebook 中执行 Shell 命令

在代码单元格中,在命令前加上 ! 即可直接运行终端命令。

!pip list | grep pandas

多内核支持

Jupyter 支持安装多种语言的内核(如 R、Julia、Scala)。你可以通过 ipykernel 管理内核,并在新建 Notebook 时选择相应内核。

JupyterLab:下一代界面

JupyterLab 是 Jupyter 的下一代用户界面,提供了更灵活的工作区布局、终端、文本编辑器、文件管理器等集成。如果你从 Notebook 开始,可以无缝迁移到 JupyterLab。

pip install jupyterlab
jupyter lab

常见问题与解决

1. 内核一直显示忙碌或卡死 可在菜单栏选择 Kernel -> Interrupt 中断执行,如果无法恢复则 Kernel -> Restart

2. 图片不显示 检查是否执行了 %matplotlib inline,并确保在绘图后调用了 plt.show() 或直接将 figure 对象放在单元格最后一行。

3. Pandas 输出被截断 可以通过以下设置显示完整内容:

pd.set_option('display.max_rows', 500)
pd.set_option('display.max_columns', None)
pd.set_option('display.max_colwidth', 100)

4. Notebook 文件过大导致加载缓慢 清理输出单元格(Cell -> All Output -> Clear)或使用 nbstripout 工具在提交版本前自动清除输出。

总结

Jupyter Notebook 将代码、数据探索和文档融为一体,是数据科学家的瑞士军刀。从快速的数据加载与清洗,到丰富的可视化与交互式分析,再到可复现的报告生成,它覆盖了数据分析的整个生命周期。掌握本教程中的基础操作和进阶技巧后,你将能够更高效地探索数据、验证想法,并将分析成果清晰地传达给他人。现在,打开你的终端启动 jupyter notebook,开始交互式数据科学之旅吧。