云计算百科
云计算领域专业知识百科平台

Jupyter Notebook入门:交互式编程神器使用指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */
#content_views .toc,
/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */
#content_views.markdown_views > p:empty:has(+ .toc),
#content_views.markdown_views > .toc + p:empty,
/* 富文本旧版目录标记 */
#content_views.htmledit_views #main-toc,
#content_views.htmledit_views #hr-toc,
#content_views.htmledit_views p[id*=\”-toc\”] {
display: none !important;
}
/* 目录去掉后,紧跟的首个标题不再多出一块上边距 */
#content_views.markdown_views > .toc + h1,
#content_views.markdown_views > .toc + h2,
#content_views.markdown_views > .toc + h3,
#content_views.markdown_views > .toc + h4,
#content_views.markdown_views > .toc + p:empty + h1,
#content_views.markdown_views > .toc + p:empty + h2,
#content_views.markdown_views > .toc + p:empty + h3,
#content_views.markdown_views > .toc + p:empty + h4 {
margin-top: 0 !important;
}

在Python的生态系统中,有一个工具让数据科学家、研究人员和教育工作者爱不释手——它就是Jupyter Notebook。想象一下,你可以在浏览器中一边写代码,一边看运行结果,还能穿插Markdown文档、数学公式和可视化图表,就像在数字实验室里做实验一样。本文将带你全面掌握Jupyter Notebook的使用,从基础操作到高级技巧,让交互式编程成为你的第二天性。

一、Jupyter Notebook概述

1.1 什么是Jupyter Notebook

Jupyter Notebook是一个基于Web的交互式计算环境,它的名字来源于三种核心编程语言:Julia、Python和R(Ju-Pyt-e-R)。经过多年的发展,Jupyter已经远远超出了最初的设想,成为数据科学领域的事实标准工具。

Jupyter的核心理念是文学编程(Literate Programming)——将代码、文档、可视化和叙述性文本融合在一个文档中,让计算过程变得可读、可复现、可分享。

#mermaid-svg-QMEv7OOekldcENTn{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-QMEv7OOekldcENTn .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-QMEv7OOekldcENTn .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-QMEv7OOekldcENTn .error-icon{fill:#552222;}#mermaid-svg-QMEv7OOekldcENTn .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-QMEv7OOekldcENTn .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-QMEv7OOekldcENTn .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-QMEv7OOekldcENTn .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-QMEv7OOekldcENTn .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-QMEv7OOekldcENTn .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-QMEv7OOekldcENTn .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-QMEv7OOekldcENTn .marker{fill:#333333;stroke:#333333;}#mermaid-svg-QMEv7OOekldcENTn .marker.cross{stroke:#333333;}#mermaid-svg-QMEv7OOekldcENTn svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-QMEv7OOekldcENTn p{margin:0;}#mermaid-svg-QMEv7OOekldcENTn .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-QMEv7OOekldcENTn .cluster-label text{fill:#333;}#mermaid-svg-QMEv7OOekldcENTn .cluster-label span{color:#333;}#mermaid-svg-QMEv7OOekldcENTn .cluster-label span p{background-color:transparent;}#mermaid-svg-QMEv7OOekldcENTn .label text,#mermaid-svg-QMEv7OOekldcENTn span{fill:#333;color:#333;}#mermaid-svg-QMEv7OOekldcENTn .node rect,#mermaid-svg-QMEv7OOekldcENTn .node circle,#mermaid-svg-QMEv7OOekldcENTn .node ellipse,#mermaid-svg-QMEv7OOekldcENTn .node polygon,#mermaid-svg-QMEv7OOekldcENTn .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-QMEv7OOekldcENTn .rough-node .label text,#mermaid-svg-QMEv7OOekldcENTn .node .label text,#mermaid-svg-QMEv7OOekldcENTn .image-shape .label,#mermaid-svg-QMEv7OOekldcENTn .icon-shape .label{text-anchor:middle;}#mermaid-svg-QMEv7OOekldcENTn .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-QMEv7OOekldcENTn .rough-node .label,#mermaid-svg-QMEv7OOekldcENTn .node .label,#mermaid-svg-QMEv7OOekldcENTn .image-shape .label,#mermaid-svg-QMEv7OOekldcENTn .icon-shape .label{text-align:center;}#mermaid-svg-QMEv7OOekldcENTn .node.clickable{cursor:pointer;}#mermaid-svg-QMEv7OOekldcENTn .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-QMEv7OOekldcENTn .arrowheadPath{fill:#333333;}#mermaid-svg-QMEv7OOekldcENTn .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-QMEv7OOekldcENTn .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-QMEv7OOekldcENTn .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-QMEv7OOekldcENTn .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-QMEv7OOekldcENTn .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-QMEv7OOekldcENTn .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-QMEv7OOekldcENTn .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-QMEv7OOekldcENTn .cluster text{fill:#333;}#mermaid-svg-QMEv7OOekldcENTn .cluster span{color:#333;}#mermaid-svg-QMEv7OOekldcENTn div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-QMEv7OOekldcENTn .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-QMEv7OOekldcENTn rect.text{fill:none;stroke-width:0;}#mermaid-svg-QMEv7OOekldcENTn .icon-shape,#mermaid-svg-QMEv7OOekldcENTn .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-QMEv7OOekldcENTn .icon-shape p,#mermaid-svg-QMEv7OOekldcENTn .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-QMEv7OOekldcENTn .icon-shape .label rect,#mermaid-svg-QMEv7OOekldcENTn .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-QMEv7OOekldcENTn .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-QMEv7OOekldcENTn .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-QMEv7OOekldcENTn :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}

Jupyter Notebook

代码 Cells

Markdown Cells

原始 nbconvert Cells

输出区域

Python 代码

魔法命令

Shell 命令

Markdown 文本

LaTeX 数学公式

HTML 内容

图片/表格

文本输出

图表可视化

交互式控件

错误信息

1.2 Jupyter的发展历程

#mermaid-svg-HP17zt2uWhTt8ctm{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-HP17zt2uWhTt8ctm .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-HP17zt2uWhTt8ctm .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-HP17zt2uWhTt8ctm .error-icon{fill:#552222;}#mermaid-svg-HP17zt2uWhTt8ctm .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-HP17zt2uWhTt8ctm .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-HP17zt2uWhTt8ctm .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-HP17zt2uWhTt8ctm .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-HP17zt2uWhTt8ctm .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-HP17zt2uWhTt8ctm .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-HP17zt2uWhTt8ctm .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-HP17zt2uWhTt8ctm .marker{fill:#333333;stroke:#333333;}#mermaid-svg-HP17zt2uWhTt8ctm .marker.cross{stroke:#333333;}#mermaid-svg-HP17zt2uWhTt8ctm svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-HP17zt2uWhTt8ctm p{margin:0;}#mermaid-svg-HP17zt2uWhTt8ctm .edge{stroke-width:3;}#mermaid-svg-HP17zt2uWhTt8ctm .section–1 rect,#mermaid-svg-HP17zt2uWhTt8ctm .section–1 path,#mermaid-svg-HP17zt2uWhTt8ctm .section–1 circle,#mermaid-svg-HP17zt2uWhTt8ctm .section–1 path{fill:hsl(240, 100%, 76.2745098039%);}#mermaid-svg-HP17zt2uWhTt8ctm .section–1 text{fill:#ffffff;}#mermaid-svg-HP17zt2uWhTt8ctm .node-icon–1{font-size:40px;color:#ffffff;}#mermaid-svg-HP17zt2uWhTt8ctm .section-edge–1{stroke:hsl(240, 100%, 76.2745098039%);}#mermaid-svg-HP17zt2uWhTt8ctm .edge-depth–1{stroke-width:17;}#mermaid-svg-HP17zt2uWhTt8ctm .section–1 line{stroke:hsl(60, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-HP17zt2uWhTt8ctm .lineWrapper line{stroke:#ffffff;}#mermaid-svg-HP17zt2uWhTt8ctm .disabled,#mermaid-svg-HP17zt2uWhTt8ctm .disabled circle,#mermaid-svg-HP17zt2uWhTt8ctm .disabled text{fill:lightgray;}#mermaid-svg-HP17zt2uWhTt8ctm .disabled text{fill:#efefef;}#mermaid-svg-HP17zt2uWhTt8ctm .section-0 rect,#mermaid-svg-HP17zt2uWhTt8ctm .section-0 path,#mermaid-svg-HP17zt2uWhTt8ctm .section-0 circle,#mermaid-svg-HP17zt2uWhTt8ctm .section-0 path{fill:hsl(60, 100%, 73.5294117647%);}#mermaid-svg-HP17zt2uWhTt8ctm .section-0 text{fill:black;}#mermaid-svg-HP17zt2uWhTt8ctm .node-icon-0{font-size:40px;color:black;}#mermaid-svg-HP17zt2uWhTt8ctm .section-edge-0{stroke:hsl(60, 100%, 73.5294117647%);}#mermaid-svg-HP17zt2uWhTt8ctm .edge-depth-0{stroke-width:14;}#mermaid-svg-HP17zt2uWhTt8ctm .section-0 line{stroke:hsl(240, 100%, 83.5294117647%);stroke-width:3;}#mermaid-svg-HP17zt2uWhTt8ctm .lineWrapper line{stroke:black;}#mermaid-svg-HP17zt2uWhTt8ctm .disabled,#mermaid-svg-HP17zt2uWhTt8ctm .disabled circle,#mermaid-svg-HP17zt2uWhTt8ctm .disabled text{fill:lightgray;}#mermaid-svg-HP17zt2uWhTt8ctm .disabled text{fill:#efefef;}#mermaid-svg-HP17zt2uWhTt8ctm .section-1 rect,#mermaid-svg-HP17zt2uWhTt8ctm .section-1 path,#mermaid-svg-HP17zt2uWhTt8ctm .section-1 circle,#mermaid-svg-HP17zt2uWhTt8ctm .section-1 path{fill:hsl(80, 100%, 76.2745098039%);}#mermaid-svg-HP17zt2uWhTt8ctm .section-1 text{fill:black;}#mermaid-svg-HP17zt2uWhTt8ctm .node-icon-1{font-size:40px;color:black;}#mermaid-svg-HP17zt2uWhTt8ctm .section-edge-1{stroke:hsl(80, 100%, 76.2745098039%);}#mermaid-svg-HP17zt2uWhTt8ctm .edge-depth-1{stroke-width:11;}#mermaid-svg-HP17zt2uWhTt8ctm .section-1 line{stroke:hsl(260, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-HP17zt2uWhTt8ctm .lineWrapper line{stroke:black;}#mermaid-svg-HP17zt2uWhTt8ctm .disabled,#mermaid-svg-HP17zt2uWhTt8ctm .disabled circle,#mermaid-svg-HP17zt2uWhTt8ctm .disabled text{fill:lightgray;}#mermaid-svg-HP17zt2uWhTt8ctm .disabled text{fill:#efefef;}#mermaid-svg-HP17zt2uWhTt8ctm .section-2 rect,#mermaid-svg-HP17zt2uWhTt8ctm .section-2 path,#mermaid-svg-HP17zt2uWhTt8ctm .section-2 circle,#mermaid-svg-HP17zt2uWhTt8ctm .section-2 path{fill:hsl(270, 100%, 76.2745098039%);}#mermaid-svg-HP17zt2uWhTt8ctm .section-2 text{fill:#ffffff;}#mermaid-svg-HP17zt2uWhTt8ctm .node-icon-2{font-size:40px;color:#ffffff;}#mermaid-svg-HP17zt2uWhTt8ctm .section-edge-2{stroke:hsl(270, 100%, 76.2745098039%);}#mermaid-svg-HP17zt2uWhTt8ctm .edge-depth-2{stroke-width:8;}#mermaid-svg-HP17zt2uWhTt8ctm .section-2 line{stroke:hsl(90, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-HP17zt2uWhTt8ctm .lineWrapper line{stroke:#ffffff;}#mermaid-svg-HP17zt2uWhTt8ctm .disabled,#mermaid-svg-HP17zt2uWhTt8ctm .disabled circle,#mermaid-svg-HP17zt2uWhTt8ctm .disabled text{fill:lightgray;}#mermaid-svg-HP17zt2uWhTt8ctm .disabled text{fill:#efefef;}#mermaid-svg-HP17zt2uWhTt8ctm .section-3 rect,#mermaid-svg-HP17zt2uWhTt8ctm .section-3 path,#mermaid-svg-HP17zt2uWhTt8ctm .section-3 circle,#mermaid-svg-HP17zt2uWhTt8ctm .section-3 path{fill:hsl(300, 100%, 76.2745098039%);}#mermaid-svg-HP17zt2uWhTt8ctm .section-3 text{fill:black;}#mermaid-svg-HP17zt2uWhTt8ctm .node-icon-3{font-size:40px;color:black;}#mermaid-svg-HP17zt2uWhTt8ctm .section-edge-3{stroke:hsl(300, 100%, 76.2745098039%);}#mermaid-svg-HP17zt2uWhTt8ctm .edge-depth-3{stroke-width:5;}#mermaid-svg-HP17zt2uWhTt8ctm .section-3 line{stroke:hsl(120, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-HP17zt2uWhTt8ctm .lineWrapper line{stroke:black;}#mermaid-svg-HP17zt2uWhTt8ctm .disabled,#mermaid-svg-HP17zt2uWhTt8ctm .disabled circle,#mermaid-svg-HP17zt2uWhTt8ctm .disabled text{fill:lightgray;}#mermaid-svg-HP17zt2uWhTt8ctm .disabled text{fill:#efefef;}#mermaid-svg-HP17zt2uWhTt8ctm .section-4 rect,#mermaid-svg-HP17zt2uWhTt8ctm .section-4 path,#mermaid-svg-HP17zt2uWhTt8ctm .section-4 circle,#mermaid-svg-HP17zt2uWhTt8ctm .section-4 path{fill:hsl(330, 100%, 76.2745098039%);}#mermaid-svg-HP17zt2uWhTt8ctm .section-4 text{fill:black;}#mermaid-svg-HP17zt2uWhTt8ctm .node-icon-4{font-size:40px;color:black;}#mermaid-svg-HP17zt2uWhTt8ctm .section-edge-4{stroke:hsl(330, 100%, 76.2745098039%);}#mermaid-svg-HP17zt2uWhTt8ctm .edge-depth-4{stroke-width:2;}#mermaid-svg-HP17zt2uWhTt8ctm .section-4 line{stroke:hsl(150, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-HP17zt2uWhTt8ctm .lineWrapper line{stroke:black;}#mermaid-svg-HP17zt2uWhTt8ctm .disabled,#mermaid-svg-HP17zt2uWhTt8ctm .disabled circle,#mermaid-svg-HP17zt2uWhTt8ctm .disabled text{fill:lightgray;}#mermaid-svg-HP17zt2uWhTt8ctm .disabled text{fill:#efefef;}#mermaid-svg-HP17zt2uWhTt8ctm .section-5 rect,#mermaid-svg-HP17zt2uWhTt8ctm .section-5 path,#mermaid-svg-HP17zt2uWhTt8ctm .section-5 circle,#mermaid-svg-HP17zt2uWhTt8ctm .section-5 path{fill:hsl(0, 100%, 76.2745098039%);}#mermaid-svg-HP17zt2uWhTt8ctm .section-5 text{fill:black;}#mermaid-svg-HP17zt2uWhTt8ctm .node-icon-5{font-size:40px;color:black;}#mermaid-svg-HP17zt2uWhTt8ctm .section-edge-5{stroke:hsl(0, 100%, 76.2745098039%);}#mermaid-svg-HP17zt2uWhTt8ctm .edge-depth-5{stroke-width:-1;}#mermaid-svg-HP17zt2uWhTt8ctm .section-5 line{stroke:hsl(180, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-HP17zt2uWhTt8ctm .lineWrapper line{stroke:black;}#mermaid-svg-HP17zt2uWhTt8ctm .disabled,#mermaid-svg-HP17zt2uWhTt8ctm .disabled circle,#mermaid-svg-HP17zt2uWhTt8ctm .disabled text{fill:lightgray;}#mermaid-svg-HP17zt2uWhTt8ctm .disabled text{fill:#efefef;}#mermaid-svg-HP17zt2uWhTt8ctm .section-6 rect,#mermaid-svg-HP17zt2uWhTt8ctm .section-6 path,#mermaid-svg-HP17zt2uWhTt8ctm .section-6 circle,#mermaid-svg-HP17zt2uWhTt8ctm .section-6 path{fill:hsl(30, 100%, 76.2745098039%);}#mermaid-svg-HP17zt2uWhTt8ctm .section-6 text{fill:black;}#mermaid-svg-HP17zt2uWhTt8ctm .node-icon-6{font-size:40px;color:black;}#mermaid-svg-HP17zt2uWhTt8ctm .section-edge-6{stroke:hsl(30, 100%, 76.2745098039%);}#mermaid-svg-HP17zt2uWhTt8ctm .edge-depth-6{stroke-width:-4;}#mermaid-svg-HP17zt2uWhTt8ctm .section-6 line{stroke:hsl(210, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-HP17zt2uWhTt8ctm .lineWrapper line{stroke:black;}#mermaid-svg-HP17zt2uWhTt8ctm .disabled,#mermaid-svg-HP17zt2uWhTt8ctm .disabled circle,#mermaid-svg-HP17zt2uWhTt8ctm .disabled text{fill:lightgray;}#mermaid-svg-HP17zt2uWhTt8ctm .disabled text{fill:#efefef;}#mermaid-svg-HP17zt2uWhTt8ctm .section-7 rect,#mermaid-svg-HP17zt2uWhTt8ctm .section-7 path,#mermaid-svg-HP17zt2uWhTt8ctm .section-7 circle,#mermaid-svg-HP17zt2uWhTt8ctm .section-7 path{fill:hsl(90, 100%, 76.2745098039%);}#mermaid-svg-HP17zt2uWhTt8ctm .section-7 text{fill:black;}#mermaid-svg-HP17zt2uWhTt8ctm .node-icon-7{font-size:40px;color:black;}#mermaid-svg-HP17zt2uWhTt8ctm .section-edge-7{stroke:hsl(90, 100%, 76.2745098039%);}#mermaid-svg-HP17zt2uWhTt8ctm .edge-depth-7{stroke-width:-7;}#mermaid-svg-HP17zt2uWhTt8ctm .section-7 line{stroke:hsl(270, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-HP17zt2uWhTt8ctm .lineWrapper line{stroke:black;}#mermaid-svg-HP17zt2uWhTt8ctm .disabled,#mermaid-svg-HP17zt2uWhTt8ctm .disabled circle,#mermaid-svg-HP17zt2uWhTt8ctm .disabled text{fill:lightgray;}#mermaid-svg-HP17zt2uWhTt8ctm .disabled text{fill:#efefef;}#mermaid-svg-HP17zt2uWhTt8ctm .section-8 rect,#mermaid-svg-HP17zt2uWhTt8ctm .section-8 path,#mermaid-svg-HP17zt2uWhTt8ctm .section-8 circle,#mermaid-svg-HP17zt2uWhTt8ctm .section-8 path{fill:hsl(150, 100%, 76.2745098039%);}#mermaid-svg-HP17zt2uWhTt8ctm .section-8 text{fill:black;}#mermaid-svg-HP17zt2uWhTt8ctm .node-icon-8{font-size:40px;color:black;}#mermaid-svg-HP17zt2uWhTt8ctm .section-edge-8{stroke:hsl(150, 100%, 76.2745098039%);}#mermaid-svg-HP17zt2uWhTt8ctm .edge-depth-8{stroke-width:-10;}#mermaid-svg-HP17zt2uWhTt8ctm .section-8 line{stroke:hsl(330, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-HP17zt2uWhTt8ctm .lineWrapper line{stroke:black;}#mermaid-svg-HP17zt2uWhTt8ctm .disabled,#mermaid-svg-HP17zt2uWhTt8ctm .disabled circle,#mermaid-svg-HP17zt2uWhTt8ctm .disabled text{fill:lightgray;}#mermaid-svg-HP17zt2uWhTt8ctm .disabled text{fill:#efefef;}#mermaid-svg-HP17zt2uWhTt8ctm .section-9 rect,#mermaid-svg-HP17zt2uWhTt8ctm .section-9 path,#mermaid-svg-HP17zt2uWhTt8ctm .section-9 circle,#mermaid-svg-HP17zt2uWhTt8ctm .section-9 path{fill:hsl(180, 100%, 76.2745098039%);}#mermaid-svg-HP17zt2uWhTt8ctm .section-9 text{fill:black;}#mermaid-svg-HP17zt2uWhTt8ctm .node-icon-9{font-size:40px;color:black;}#mermaid-svg-HP17zt2uWhTt8ctm .section-edge-9{stroke:hsl(180, 100%, 76.2745098039%);}#mermaid-svg-HP17zt2uWhTt8ctm .edge-depth-9{stroke-width:-13;}#mermaid-svg-HP17zt2uWhTt8ctm .section-9 line{stroke:hsl(0, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-HP17zt2uWhTt8ctm .lineWrapper line{stroke:black;}#mermaid-svg-HP17zt2uWhTt8ctm .disabled,#mermaid-svg-HP17zt2uWhTt8ctm .disabled circle,#mermaid-svg-HP17zt2uWhTt8ctm .disabled text{fill:lightgray;}#mermaid-svg-HP17zt2uWhTt8ctm .disabled text{fill:#efefef;}#mermaid-svg-HP17zt2uWhTt8ctm .section-10 rect,#mermaid-svg-HP17zt2uWhTt8ctm .section-10 path,#mermaid-svg-HP17zt2uWhTt8ctm .section-10 circle,#mermaid-svg-HP17zt2uWhTt8ctm .section-10 path{fill:hsl(210, 100%, 76.2745098039%);}#mermaid-svg-HP17zt2uWhTt8ctm .section-10 text{fill:black;}#mermaid-svg-HP17zt2uWhTt8ctm .node-icon-10{font-size:40px;color:black;}#mermaid-svg-HP17zt2uWhTt8ctm .section-edge-10{stroke:hsl(210, 100%, 76.2745098039%);}#mermaid-svg-HP17zt2uWhTt8ctm .edge-depth-10{stroke-width:-16;}#mermaid-svg-HP17zt2uWhTt8ctm .section-10 line{stroke:hsl(30, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-HP17zt2uWhTt8ctm .lineWrapper line{stroke:black;}#mermaid-svg-HP17zt2uWhTt8ctm .disabled,#mermaid-svg-HP17zt2uWhTt8ctm .disabled circle,#mermaid-svg-HP17zt2uWhTt8ctm .disabled text{fill:lightgray;}#mermaid-svg-HP17zt2uWhTt8ctm .disabled text{fill:#efefef;}#mermaid-svg-HP17zt2uWhTt8ctm .section-root rect,#mermaid-svg-HP17zt2uWhTt8ctm .section-root path,#mermaid-svg-HP17zt2uWhTt8ctm .section-root circle{fill:hsl(240, 100%, 46.2745098039%);}#mermaid-svg-HP17zt2uWhTt8ctm .section-root text{fill:#ffffff;}#mermaid-svg-HP17zt2uWhTt8ctm .icon-container{height:100%;display:flex;justify-content:center;align-items:center;}#mermaid-svg-HP17zt2uWhTt8ctm .edge{fill:none;}#mermaid-svg-HP17zt2uWhTt8ctm .eventWrapper{filter:brightness(120%);}#mermaid-svg-HP17zt2uWhTt8ctm :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}2011IPython 0.12引入WebNotebook界面2014IPython 2.0重构为Jupyter项目Fernando Perez发起2015Jupyter Notebook4.0从IPython独立支持多语言内核2016JupyterLab 预览版新一代界面2018JupyterLab 1.0正式发布IDE级别体验2020Jupyter Book写作出版工具2022JupyterLab 3.0实时协作调试器支持2023JupyterLab 4.0性能大幅提升国际化支持2024Jupyter AIAI辅助编程Jupyter Notebook 发展历程

1.3 Jupyter的适用场景

场景适用性说明
数据探索与分析 优秀 Notebook的核心场景
机器学习实验 优秀 逐步调参,可视化结果
教学与演示 优秀 代码+文档+结果一体化
科研论文 优秀 可复现计算
数据可视化 优秀 图表即时渲染
报告生成 良好 支持导出多种格式
大型软件开发 一般 不适合,推荐使用IDE
自动化脚本 一般 可以用,但不如.py文件
生产环境部署 不适合 Notebook不是为部署设计

二、安装与启动

2.1 安装方式对比

Jupyter Notebook有多种安装方式,每种适用不同的场景:

安装方式优点缺点推荐场景
pip安装 最简单,与Python环境集成 需手动管理依赖 已有Python环境的用户
Anaconda 预装科学计算全家桶 体积大(3GB+) 数据科学新手
Miniconda + 安装 体积小,灵活 需手动安装依赖 有经验的用户
Docker 环境隔离,跨平台 需要Docker基础 团队协作
VS Code集成 轻量,与IDE结合 功能略少 使用VS Code的用户
在线平台 免安装,有GPU 有使用限制 快速体验

2.2 使用pip安装

基础安装:

# 安装Jupyter Notebook(经典界面)
pip install notebook

# 或者安装JupyterLab(推荐,新一代界面)
pip install jupyterlab

# 同时安装常用数据科学库
pip install jupyterlab numpy pandas matplotlib seaborn scikit-learn

安装后验证:

# 查看版本
jupyter –version
jupyter lab –version

# 查看已安装的内核
jupyter kernelspec list

2.3 使用Anaconda安装

Anaconda是Python数据科学的一站式发行版,预装了Jupyter和数百个科学计算包:

# 安装Anaconda后,创建专用环境
conda create -n jupyter-env python=3.11
conda activate jupyter-env

# 安装JupyterLab
conda install -c conda-forge jupyterlab

# 安装常用数据科学包
conda install numpy pandas matplotlib seaborn scikit-learn jupyter

2.4 启动Jupyter

启动JupyterLab(推荐):

# 默认启动
jupyter lab

# 指定端口
jupyter lab –port=9999

# 不自动打开浏览器
jupyter lab –no-browser

# 允许远程访问
jupyter lab –ip=0.0.0.0 –port=8888 –no-browser

# 指定工作目录
jupyter lab –notebook-dir=/path/to/project

启动Jupyter Notebook(经典界面):

jupyter notebook

2.5 配置文件管理

生成并编辑Jupyter配置文件:

# 生成配置文件
jupyter lab –generate-config

# 配置文件位置
# Windows: C:\\Users\\用户名\\.jupyter\\jupyter_lab_config.py
# Linux/macOS: ~/.jupyter/jupyter_lab_config.py

常用配置项:

# jupyter_lab_config.py
c.ServerApp.ip = '0.0.0.0' # 允许远程访问
c.ServerApp.port = 8888 # 默认端口
c.ServerApp.open_browser = False # 不自动打开浏览器
c.ServerApp.notebook_dir = '/path/to/work' # 工作目录
c.ServerApp.token = '' # 无令牌访问(仅本地使用)
c.ServerApp.password = '' # 设置密码(使用jupyter lab password生成)
c.ServerApp.allow_origin = '*' # 允许跨域
c.ServerApp.allow_remote_access = True # 允许远程访问

三、用户界面详解

3.1 JupyterLab vs Jupyter Notebook

#mermaid-svg-aBxL40festevO8OW{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-aBxL40festevO8OW .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-aBxL40festevO8OW .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-aBxL40festevO8OW .error-icon{fill:#552222;}#mermaid-svg-aBxL40festevO8OW .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-aBxL40festevO8OW .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-aBxL40festevO8OW .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-aBxL40festevO8OW .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-aBxL40festevO8OW .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-aBxL40festevO8OW .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-aBxL40festevO8OW .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-aBxL40festevO8OW .marker{fill:#333333;stroke:#333333;}#mermaid-svg-aBxL40festevO8OW .marker.cross{stroke:#333333;}#mermaid-svg-aBxL40festevO8OW svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-aBxL40festevO8OW p{margin:0;}#mermaid-svg-aBxL40festevO8OW .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-aBxL40festevO8OW .cluster-label text{fill:#333;}#mermaid-svg-aBxL40festevO8OW .cluster-label span{color:#333;}#mermaid-svg-aBxL40festevO8OW .cluster-label span p{background-color:transparent;}#mermaid-svg-aBxL40festevO8OW .label text,#mermaid-svg-aBxL40festevO8OW span{fill:#333;color:#333;}#mermaid-svg-aBxL40festevO8OW .node rect,#mermaid-svg-aBxL40festevO8OW .node circle,#mermaid-svg-aBxL40festevO8OW .node ellipse,#mermaid-svg-aBxL40festevO8OW .node polygon,#mermaid-svg-aBxL40festevO8OW .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-aBxL40festevO8OW .rough-node .label text,#mermaid-svg-aBxL40festevO8OW .node .label text,#mermaid-svg-aBxL40festevO8OW .image-shape .label,#mermaid-svg-aBxL40festevO8OW .icon-shape .label{text-anchor:middle;}#mermaid-svg-aBxL40festevO8OW .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-aBxL40festevO8OW .rough-node .label,#mermaid-svg-aBxL40festevO8OW .node .label,#mermaid-svg-aBxL40festevO8OW .image-shape .label,#mermaid-svg-aBxL40festevO8OW .icon-shape .label{text-align:center;}#mermaid-svg-aBxL40festevO8OW .node.clickable{cursor:pointer;}#mermaid-svg-aBxL40festevO8OW .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-aBxL40festevO8OW .arrowheadPath{fill:#333333;}#mermaid-svg-aBxL40festevO8OW .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-aBxL40festevO8OW .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-aBxL40festevO8OW .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-aBxL40festevO8OW .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-aBxL40festevO8OW .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-aBxL40festevO8OW .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-aBxL40festevO8OW .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-aBxL40festevO8OW .cluster text{fill:#333;}#mermaid-svg-aBxL40festevO8OW .cluster span{color:#333;}#mermaid-svg-aBxL40festevO8OW div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-aBxL40festevO8OW .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-aBxL40festevO8OW rect.text{fill:none;stroke-width:0;}#mermaid-svg-aBxL40festevO8OW .icon-shape,#mermaid-svg-aBxL40festevO8OW .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-aBxL40festevO8OW .icon-shape p,#mermaid-svg-aBxL40festevO8OW .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-aBxL40festevO8OW .icon-shape .label rect,#mermaid-svg-aBxL40festevO8OW .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-aBxL40festevO8OW .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-aBxL40festevO8OW .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-aBxL40festevO8OW :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}

Jupyter Notebook

JupyterLab

文件浏览器

编辑器区域

终端

内核管理

扩展管理

文件列表

Notebook编辑器

单个Notebook视图

多标签页布局

单一文档视图

JupyterLab是新一代的Jupyter界面,相较于经典Notebook,它提供了IDE级别的体验:

  • 多标签页工作区
  • 可拖拽的面板布局
  • 内置终端
  • 文件浏览器
  • 文本编辑器
  • CSV查看器
  • 扩展管理器

3.2 Notebook界面元素

打开一个Notebook后,你会看到以下界面元素:

#mermaid-svg-QDXx5F6SaLpM4IgH{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-QDXx5F6SaLpM4IgH .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-QDXx5F6SaLpM4IgH .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-QDXx5F6SaLpM4IgH .error-icon{fill:#552222;}#mermaid-svg-QDXx5F6SaLpM4IgH .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-QDXx5F6SaLpM4IgH .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-QDXx5F6SaLpM4IgH .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-QDXx5F6SaLpM4IgH .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-QDXx5F6SaLpM4IgH .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-QDXx5F6SaLpM4IgH .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-QDXx5F6SaLpM4IgH .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-QDXx5F6SaLpM4IgH .marker{fill:#333333;stroke:#333333;}#mermaid-svg-QDXx5F6SaLpM4IgH .marker.cross{stroke:#333333;}#mermaid-svg-QDXx5F6SaLpM4IgH svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-QDXx5F6SaLpM4IgH p{margin:0;}#mermaid-svg-QDXx5F6SaLpM4IgH .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-QDXx5F6SaLpM4IgH .cluster-label text{fill:#333;}#mermaid-svg-QDXx5F6SaLpM4IgH .cluster-label span{color:#333;}#mermaid-svg-QDXx5F6SaLpM4IgH .cluster-label span p{background-color:transparent;}#mermaid-svg-QDXx5F6SaLpM4IgH .label text,#mermaid-svg-QDXx5F6SaLpM4IgH span{fill:#333;color:#333;}#mermaid-svg-QDXx5F6SaLpM4IgH .node rect,#mermaid-svg-QDXx5F6SaLpM4IgH .node circle,#mermaid-svg-QDXx5F6SaLpM4IgH .node ellipse,#mermaid-svg-QDXx5F6SaLpM4IgH .node polygon,#mermaid-svg-QDXx5F6SaLpM4IgH .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-QDXx5F6SaLpM4IgH .rough-node .label text,#mermaid-svg-QDXx5F6SaLpM4IgH .node .label text,#mermaid-svg-QDXx5F6SaLpM4IgH .image-shape .label,#mermaid-svg-QDXx5F6SaLpM4IgH .icon-shape .label{text-anchor:middle;}#mermaid-svg-QDXx5F6SaLpM4IgH .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-QDXx5F6SaLpM4IgH .rough-node .label,#mermaid-svg-QDXx5F6SaLpM4IgH .node .label,#mermaid-svg-QDXx5F6SaLpM4IgH .image-shape .label,#mermaid-svg-QDXx5F6SaLpM4IgH .icon-shape .label{text-align:center;}#mermaid-svg-QDXx5F6SaLpM4IgH .node.clickable{cursor:pointer;}#mermaid-svg-QDXx5F6SaLpM4IgH .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-QDXx5F6SaLpM4IgH .arrowheadPath{fill:#333333;}#mermaid-svg-QDXx5F6SaLpM4IgH .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-QDXx5F6SaLpM4IgH .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-QDXx5F6SaLpM4IgH .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-QDXx5F6SaLpM4IgH .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-QDXx5F6SaLpM4IgH .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-QDXx5F6SaLpM4IgH .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-QDXx5F6SaLpM4IgH .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-QDXx5F6SaLpM4IgH .cluster text{fill:#333;}#mermaid-svg-QDXx5F6SaLpM4IgH .cluster span{color:#333;}#mermaid-svg-QDXx5F6SaLpM4IgH div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-QDXx5F6SaLpM4IgH .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-QDXx5F6SaLpM4IgH rect.text{fill:none;stroke-width:0;}#mermaid-svg-QDXx5F6SaLpM4IgH .icon-shape,#mermaid-svg-QDXx5F6SaLpM4IgH .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-QDXx5F6SaLpM4IgH .icon-shape p,#mermaid-svg-QDXx5F6SaLpM4IgH .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-QDXx5F6SaLpM4IgH .icon-shape .label rect,#mermaid-svg-QDXx5F6SaLpM4IgH .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-QDXx5F6SaLpM4IgH .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-QDXx5F6SaLpM4IgH .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-QDXx5F6SaLpM4IgH :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}

Notebook 界面

菜单栏

工具栏

编辑区域

状态栏

文件操作

编辑操作

运行操作

内核操作

帮助

保存

插入Cell

剪切/复制/粘贴

运行/停止

Cell类型切换

Cell 1: Markdown

Cell 2: Code

Cell 3: Code + 输出

Cell 4: Markdown

内核状态

当前Cell

内存使用

四、Cell操作完全指南

4.1 Cell类型详解

Jupyter Notebook中有三种Cell类型:

Cell类型用途输入内容输出结果
Code 编写和执行代码 Python代码 代码执行结果
Markdown 编写文档 Markdown格式文本 格式化后的文档
Raw NBConvert 原始内容 任意文本 不被处理,直接传递给nbconvert

4.2 Code Cell操作

执行代码的多种方式:

# 1. 基本执行:选中Cell,按 Shift+Enter
print("Hello, Jupyter!")

# 2. 一个Cell可以包含多行代码
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

# 3. 变量的状态在Cell之间共享
x = 10
y = 20

# 在上一个Cell中定义的变量,可以在下一个Cell中直接使用
result = x + y
print(f"x + y = {result}") # 输出: x + y = 30

# 函数定义也可以跨Cell使用
def fibonacci(n):
"""生成斐波那契数列"""
a, b = 0, 1
for _ in range(n):
yield a
a, b = b, a + b

# 在另一个Cell中调用
list(fibonacci(10))

Cell的执行状态指示:

  • [ ]:Cell尚未执行
  • [*]:Cell正在执行中
  • [数字]:Cell已执行,数字表示执行顺序
  • 无标记:Markdown Cell

4.3 Markdown Cell详解

Markdown Cell是Jupyter的文档核心,支持丰富的文本格式:

# 一级标题
## 二级标题
### 三级标题

**加粗文本** 和 *斜体文本*

– 无序列表项1
– 无序列表项2
– 嵌套列表项

1. 有序列表项1
2. 有序列表项2

[链接文本](https://www.python.org)

![图片描述](path/to/image.png)

> 引用块:这是一段引用文字

—
水平分割线

`行内代码`

| 表头1 | 表头2 | 表头3 |
|——-|——-|——-|
| 数据1 | 数据2 | 数据3 |
| 数据4 | 数据5 | 数据6 |

LaTeX数学公式支持:

行内公式:$E = mc^2$,这是爱因斯坦的质能方程。

块级公式:
$$
\\int_{-\\infty}^{\\infty} e^{-x^2} dx = \\sqrt{\\pi}
$$

多行公式:
$$
\\begin{aligned}
f(x) &= x^2 + 2x + 1 \\\\
&= (x + 1)^2
\\end{aligned}
$$

矩阵表示:
$$
\\begin{bmatrix}
1 & 2 & 3 \\\\
4 & 5 & 6 \\\\
7 & 8 & 9
\\end{bmatrix}
$$

渲染效果如下:

行内公式: E=mc2E = mc^2E=mc2,这是爱因斯坦的质能方程。

块级公式: ∫−∞∞e−x2dx=π\\int_{-\\infty}^{\\infty} e^{-x^2} dx = \\sqrt{\\pi}∫−∞∞​e−x2dx=π​

4.4 Cell的快捷操作

操作快捷键(命令模式)快捷键(编辑模式)
执行当前Cell Shift+Enter Ctrl+Enter
执行并插入新Cell Alt+Enter –
切换Cell类型为Code Y –
切换Cell类型为Markdown M –
在上方插入Cell A –
在下方插入Cell B –
删除当前Cell D, D(按两次D) –
剪切当前Cell X –
复制当前Cell C –
粘贴Cell V –
撤销删除Cell Z –
合并上方Cell Shift+M –
合并下方Cell Ctrl+Shift+M –
进入编辑模式 Enter –
进入命令模式 Esc –
查看所有快捷键 H –
保存Notebook S –
中断内核 I, I(按两次I) –
重启内核 0, 0(按两次0) –

4.5 Cell的进阶技巧

Cell标签(Tags)的使用:

为Cell添加标签可以实现更精细的控制:

# 在Cell的元数据中添加标签
# 常用标签:
# – "hide-input": 隐藏输入代码
# – "hide-output": 隐藏输出
# – "hide-cell": 隐藏整个Cell
# – "remove-input": 导出时移除输入
# – "remove-cell": 导出时移除整个Cell
# – "raises-exception": 标记预期会抛出异常的Cell
# – "skip": 跳过执行

Cell的魔法命令装饰:

# %%time: 测量整个Cell的执行时间
%%time
import time
result = 0
for i in range(1000000):
result += i

五、魔法命令完全手册

5.1 魔法命令概述

魔法命令是IPython提供的一组特殊命令,以前缀 % 或 %% 开头,极大增强了交互式编程体验:

#mermaid-svg-7nEGJknxgOyjVpfN{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-7nEGJknxgOyjVpfN .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-7nEGJknxgOyjVpfN .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-7nEGJknxgOyjVpfN .error-icon{fill:#552222;}#mermaid-svg-7nEGJknxgOyjVpfN .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-7nEGJknxgOyjVpfN .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-7nEGJknxgOyjVpfN .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-7nEGJknxgOyjVpfN .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-7nEGJknxgOyjVpfN .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-7nEGJknxgOyjVpfN .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-7nEGJknxgOyjVpfN .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-7nEGJknxgOyjVpfN .marker{fill:#333333;stroke:#333333;}#mermaid-svg-7nEGJknxgOyjVpfN .marker.cross{stroke:#333333;}#mermaid-svg-7nEGJknxgOyjVpfN svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-7nEGJknxgOyjVpfN p{margin:0;}#mermaid-svg-7nEGJknxgOyjVpfN .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-7nEGJknxgOyjVpfN .cluster-label text{fill:#333;}#mermaid-svg-7nEGJknxgOyjVpfN .cluster-label span{color:#333;}#mermaid-svg-7nEGJknxgOyjVpfN .cluster-label span p{background-color:transparent;}#mermaid-svg-7nEGJknxgOyjVpfN .label text,#mermaid-svg-7nEGJknxgOyjVpfN span{fill:#333;color:#333;}#mermaid-svg-7nEGJknxgOyjVpfN .node rect,#mermaid-svg-7nEGJknxgOyjVpfN .node circle,#mermaid-svg-7nEGJknxgOyjVpfN .node ellipse,#mermaid-svg-7nEGJknxgOyjVpfN .node polygon,#mermaid-svg-7nEGJknxgOyjVpfN .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-7nEGJknxgOyjVpfN .rough-node .label text,#mermaid-svg-7nEGJknxgOyjVpfN .node .label text,#mermaid-svg-7nEGJknxgOyjVpfN .image-shape .label,#mermaid-svg-7nEGJknxgOyjVpfN .icon-shape .label{text-anchor:middle;}#mermaid-svg-7nEGJknxgOyjVpfN .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-7nEGJknxgOyjVpfN .rough-node .label,#mermaid-svg-7nEGJknxgOyjVpfN .node .label,#mermaid-svg-7nEGJknxgOyjVpfN .image-shape .label,#mermaid-svg-7nEGJknxgOyjVpfN .icon-shape .label{text-align:center;}#mermaid-svg-7nEGJknxgOyjVpfN .node.clickable{cursor:pointer;}#mermaid-svg-7nEGJknxgOyjVpfN .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-7nEGJknxgOyjVpfN .arrowheadPath{fill:#333333;}#mermaid-svg-7nEGJknxgOyjVpfN .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-7nEGJknxgOyjVpfN .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-7nEGJknxgOyjVpfN .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-7nEGJknxgOyjVpfN .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-7nEGJknxgOyjVpfN .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-7nEGJknxgOyjVpfN .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-7nEGJknxgOyjVpfN .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-7nEGJknxgOyjVpfN .cluster text{fill:#333;}#mermaid-svg-7nEGJknxgOyjVpfN .cluster span{color:#333;}#mermaid-svg-7nEGJknxgOyjVpfN div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-7nEGJknxgOyjVpfN .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-7nEGJknxgOyjVpfN rect.text{fill:none;stroke-width:0;}#mermaid-svg-7nEGJknxgOyjVpfN .icon-shape,#mermaid-svg-7nEGJknxgOyjVpfN .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-7nEGJknxgOyjVpfN .icon-shape p,#mermaid-svg-7nEGJknxgOyjVpfN .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-7nEGJknxgOyjVpfN .icon-shape .label rect,#mermaid-svg-7nEGJknxgOyjVpfN .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-7nEGJknxgOyjVpfN .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-7nEGJknxgOyjVpfN .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-7nEGJknxgOyjVpfN :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}

魔法命令 Magic Commands

行魔法 Line Magic

Cell魔法 Cell Magic

%time / %timeit

%run

%load

%who / %whos

%reset

%history

%pdb

%env

%lsmagic

%%time / %%timeit

%%writefile

%%bash

%%html

%%latex

%%capture

%%prun

5.2 性能分析命令

# %time: 单次执行计时
%time sum(range(1000000))

# %timeit: 多次执行取平均时间(更精确)
%timeit sum(range(1000))

# %%time: Cell级计时
%%time
import numpy as np
arr = np.random.randn(1000, 1000)
result = np.linalg.svd(arr)

# %prun: 性能分析(profiling)
def slow_function():
result = []
for i in range(10000):
result.append(i ** 2)
return result

%prun slow_function()

# %%prun: Cell级性能分析
%%prun
import numpy as np
data = np.random.randn(1000000)
sorted_data = np.sort(data)

# %memit: 内存使用分析(需要安装memory_profiler)
# pip install memory_profiler
%load_ext memory_profiler

%memit [x**2 for x in range(1000000)]

5.3 代码管理命令

# %run: 运行外部Python脚本
%run my_script.py
%run –i my_script.py # 在当前的IPython命名空间中运行
%run –t my_script.py # 显示执行时间

# %load: 加载外部文件内容到Cell
%load my_script.py

# %%writefile: 将Cell内容写入文件
%%writefile output.py
def hello():
print("Hello from Jupyter!")

hello()

# %history: 查看历史命令
%history
%history –n # 显示行号
%history 5–10 # 显示5到10行的历史
%history –g search_term # 搜索包含关键词的历史

# %save: 保存历史命令到文件
%save my_history.py 5–10 15 20

5.4 调试与环境命令

# %debug: 进入调试模式
def buggy_function(x):
return 10 / x

buggy_function(0) # 这会产生ZeroDivisionError

# 在错误发生后执行
%debug

# %pdb: 自动进入调试模式
%pdb on # 开启自动调试
%pdb off # 关闭自动调试

# %who / %whos: 查看当前命名空间中的变量
a = 10
b = "hello"
c = [1, 2, 3]

%who # 列出所有变量名
%whos # 详细列出变量信息(类型、值)
%who str # 只列出字符串类型的变量
%who int # 只列出整数类型的变量

# %reset: 重置命名空间
%reset # 确认后清除所有变量
%reset –f # 强制清除,不确认

# %env: 环境变量管理
%env # 列出所有环境变量
%env PATH # 查看特定环境变量
%env MY_VAR=hello # 设置环境变量

# 设置数据库连接(示例)
%env DB_HOST=localhost
%env DB_PORT=5432
%env DB_NAME=myapp

5.5 交互式可视化命令

# %matplotlib: 控制matplotlib的绘图后端
%matplotlib inline # 静态图片嵌入Notebook
%matplotlib notebook # 交互式图表(可缩放、平移)
%matplotlib widget # 使用ipywidgets的交互式图表

# 示例
import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 10, 100)
plt.plot(x, np.sin(x))
plt.title("正弦波")
plt.show()

5.6 系统Shell命令

# 在代码Cell中直接执行Shell命令(使用!前缀)
!pwd
!ls –la
!pip list
!python ––version

# 将Shell输出赋值给Python变量
files = !ls *.ipynb
print(files)
print(f"找到 {len(files)} 个Notebook文件")

# 使用$在Shell命令中引用Python变量
directory = "/home/user/projects"
!ls {directory}

# 多行Shell命令
!echo "当前时间: $(date)" && echo "Python版本: $(python –version)"

六、数据可视化实战

6.1 使用Matplotlib

import matplotlib.pyplot as plt
import numpy as np

# 设置中文字体
plt.rcParams['font.sans-serif'] = ['SimHei', 'DejaVu Sans']
plt.rcParams['axes.unicode_minus'] = False

# 创建图表
fig, axes = plt.subplots(2, 2, figsize=(12, 10))

# 折线图
x = np.linspace(0, 2 * np.pi, 100)
axes[0, 0].plot(x, np.sin(x), 'b-', label='sin(x)')
axes[0, 0].plot(x, np.cos(x), 'r–', label='cos(x)')
axes[0, 0].set_title('三角函数')
axes[0, 0].legend()
axes[0, 0].grid(True, alpha=0.3)

# 柱状图
categories = ['A', 'B', 'C', 'D', 'E']
values = np.random.randint(10, 100, 5)
axes[0, 1].bar(categories, values, color=['#FF6B6B', '#4ECDC4', '#45B7D1', '#96CEB4', '#FFEAA7'])
axes[0, 1].set_title('柱状图示例')

# 散点图
n = 100
x_scatter = np.random.randn(n)
y_scatter = np.random.randn(n)
colors = np.random.rand(n)
sizes = np.random.randint(10, 100, n)
axes[1, 0].scatter(x_scatter, y_scatter, c=colors, s=sizes, alpha=0.6, cmap='viridis')
axes[1, 0].set_title('散点图示例')

# 直方图
data = np.random.randn(1000)
axes[1, 1].hist(data, bins=30, color='#6C5CE7', alpha=0.7, edgecolor='white')
axes[1, 1].set_title('直方图示例')

plt.tight_layout()
plt.show()

6.2 使用Seaborn

import seaborn as sns
import pandas as pd

# 加载示例数据
iris = sns.load_dataset('iris')
tips = sns.load_dataset('tips')

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

# 创建多面板图表
fig, axes = plt.subplots(2, 2, figsize=(14, 12))

# 箱线图
sns.boxplot(data=iris, x='species', y='sepal_length', ax=axes[0, 0])
axes[0, 0].set_title('不同品种的萼片长度分布')

# 小提琴图
sns.violinplot(data=iris, x='species', y='petal_length', ax=axes[0, 1])
axes[0, 1].set_title('不同品种的花瓣长度分布')

# 热力图
corr = iris.select_dtypes(include=[np.number]).corr()
sns.heatmap(corr, annot=True, cmap='coolwarm', center=0, ax=axes[1, 0])
axes[1, 0].set_title('特征相关性热力图')

# 回归图
sns.regplot(data=tips, x='total_bill', y='tip', scatter_kws={'alpha': 0.5}, ax=axes[1, 1])
axes[1, 1].set_title('消费金额与小费关系')

plt.tight_layout()
plt.show()

6.3 使用Plotly交互式图表

import plotly.express as px
import plotly.graph_objects as go

# 交互式散点图
fig = px.scatter(
iris,
x='sepal_length',
y='sepal_width',
color='species',
size='petal_length',
hover_data=['petal_width'],
title='鸢尾花数据集交互式散点图'
)
fig.show()

# 交互式3D图
fig_3d = px.scatter_3d(
iris,
x='sepal_length',
y='sepal_width',
z='petal_length',
color='species',
title='鸢尾花3D可视化'
)
fig_3d.show()

七、高级功能

7.1 交互式控件(ipywidgets)

import ipywidgets as widgets
from IPython.display import display

# 创建滑块
slider = widgets.IntSlider(
value=50,
min=0,
max=100,
step=1,
description='频率:',
continuous_update=False
)

# 创建下拉菜单
dropdown = widgets.Dropdown(
options=['正弦波', '余弦波', '方波'],
value='正弦波',
description='波形:'
)

# 创建按钮
button = widgets.Button(description='生成波形')

# 创建输出区域
output = widgets.Output()

# 交互逻辑
def on_button_clicked(b):
with output:
output.clear_output()
x = np.linspace(0, 2 * np.pi, 200)
freq = slider.value / 10

if dropdown.value == '正弦波':
y = np.sin(freq * x)
elif dropdown.value == '余弦波':
y = np.cos(freq * x)
else:
y = np.sign(np.sin(freq * x))

plt.figure(figsize=(10, 4))
plt.plot(x, y, 'b-', linewidth=2)
plt.title(f'{dropdown.value} – 频率: {freq:.1f}')
plt.grid(True, alpha=0.3)
plt.show()

button.on_click(on_button_clicked)

# 布局显示
display(widgets.VBox([slider, dropdown, button, output]))

7.2 多内核管理

# 查看已安装的内核
!jupyter kernelspec list

# 安装新的Python内核
!python –m ipykernel install ––user ––name=myenv ––display–name="Python (myenv)"

# 安装R内核
# 首先在R中安装IRkernel
# install.packages('IRkernel')
# IRkernel::installspec()

# 在Notebook中切换内核
# Kernel -> Change Kernel -> 选择目标内核

7.3 扩展插件

JupyterLab扩展:

# 安装扩展管理器
pip install jupyterlab_widgets

# 常用扩展
# jupyterlab-git: Git集成
pip install jupyterlab-git

# jupyterlab-spreadsheet: 电子表格查看器
pip install jupyterlab-spreadsheet

# jupyterlab-drawio: 绘图工具
pip install jupyterlab-drawio

# jupyterlab-code-formatter: 代码格式化
pip install jupyterlab-code-formatter black isort

# jupyterlab-variableInspector: 变量检查器
pip install lckr-jupyterlab-variableinspector

7.4 输出格式控制

from IPython.display import display, HTML, Markdown, Image, Audio, Video, JSON

# HTML输出
display(HTML("""
<div style="background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
padding: 20px; border-radius: 10px; color: white;">
<h2>自定义HTML输出</h2>
<p>可以在Notebook中显示任意HTML内容</p>
</div>
"""
))

# Markdown输出
display(Markdown("""
### 动态生成的Markdown
– 支持**所有**Markdown语法
– 包括数学公式: $\\\\sum_{i=1}^{n} i = \\\\frac{n(n+1)}{2}$
"""
))

# 图片显示
display(Image(url='https://www.wsisp.com/helps/wp-content/uploads/2026/11/20261107052456-6aeeb62865b5e.png'))

# 音频播放
# display(Audio('audio_file.mp3'))

# 视频播放
# display(Video('video_file.mp4'))

7.5 进度条显示

from tqdm.notebook import tqdm
import time

# 使用tqdm显示进度条
results = []
for i in tqdm(range(100), desc="处理数据"):
time.sleep(0.05) # 模拟耗时操作
results.append(i ** 2)

print(f"处理完成,共 {len(results)} 条数据")

八、导出与分享

8.1 导出格式一览

#mermaid-svg-bLuywtc5dJ5G6aWE{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-bLuywtc5dJ5G6aWE .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-bLuywtc5dJ5G6aWE .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-bLuywtc5dJ5G6aWE .error-icon{fill:#552222;}#mermaid-svg-bLuywtc5dJ5G6aWE .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-bLuywtc5dJ5G6aWE .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-bLuywtc5dJ5G6aWE .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-bLuywtc5dJ5G6aWE .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-bLuywtc5dJ5G6aWE .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-bLuywtc5dJ5G6aWE .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-bLuywtc5dJ5G6aWE .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-bLuywtc5dJ5G6aWE .marker{fill:#333333;stroke:#333333;}#mermaid-svg-bLuywtc5dJ5G6aWE .marker.cross{stroke:#333333;}#mermaid-svg-bLuywtc5dJ5G6aWE svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-bLuywtc5dJ5G6aWE p{margin:0;}#mermaid-svg-bLuywtc5dJ5G6aWE .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-bLuywtc5dJ5G6aWE .cluster-label text{fill:#333;}#mermaid-svg-bLuywtc5dJ5G6aWE .cluster-label span{color:#333;}#mermaid-svg-bLuywtc5dJ5G6aWE .cluster-label span p{background-color:transparent;}#mermaid-svg-bLuywtc5dJ5G6aWE .label text,#mermaid-svg-bLuywtc5dJ5G6aWE span{fill:#333;color:#333;}#mermaid-svg-bLuywtc5dJ5G6aWE .node rect,#mermaid-svg-bLuywtc5dJ5G6aWE .node circle,#mermaid-svg-bLuywtc5dJ5G6aWE .node ellipse,#mermaid-svg-bLuywtc5dJ5G6aWE .node polygon,#mermaid-svg-bLuywtc5dJ5G6aWE .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-bLuywtc5dJ5G6aWE .rough-node .label text,#mermaid-svg-bLuywtc5dJ5G6aWE .node .label text,#mermaid-svg-bLuywtc5dJ5G6aWE .image-shape .label,#mermaid-svg-bLuywtc5dJ5G6aWE .icon-shape .label{text-anchor:middle;}#mermaid-svg-bLuywtc5dJ5G6aWE .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-bLuywtc5dJ5G6aWE .rough-node .label,#mermaid-svg-bLuywtc5dJ5G6aWE .node .label,#mermaid-svg-bLuywtc5dJ5G6aWE .image-shape .label,#mermaid-svg-bLuywtc5dJ5G6aWE .icon-shape .label{text-align:center;}#mermaid-svg-bLuywtc5dJ5G6aWE .node.clickable{cursor:pointer;}#mermaid-svg-bLuywtc5dJ5G6aWE .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-bLuywtc5dJ5G6aWE .arrowheadPath{fill:#333333;}#mermaid-svg-bLuywtc5dJ5G6aWE .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-bLuywtc5dJ5G6aWE .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-bLuywtc5dJ5G6aWE .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-bLuywtc5dJ5G6aWE .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-bLuywtc5dJ5G6aWE .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-bLuywtc5dJ5G6aWE .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-bLuywtc5dJ5G6aWE .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-bLuywtc5dJ5G6aWE .cluster text{fill:#333;}#mermaid-svg-bLuywtc5dJ5G6aWE .cluster span{color:#333;}#mermaid-svg-bLuywtc5dJ5G6aWE div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-bLuywtc5dJ5G6aWE .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-bLuywtc5dJ5G6aWE rect.text{fill:none;stroke-width:0;}#mermaid-svg-bLuywtc5dJ5G6aWE .icon-shape,#mermaid-svg-bLuywtc5dJ5G6aWE .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-bLuywtc5dJ5G6aWE .icon-shape p,#mermaid-svg-bLuywtc5dJ5G6aWE .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-bLuywtc5dJ5G6aWE .icon-shape .label rect,#mermaid-svg-bLuywtc5dJ5G6aWE .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-bLuywtc5dJ5G6aWE .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-bLuywtc5dJ5G6aWE .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-bLuywtc5dJ5G6aWE :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}

.ipynb Notebook

nbconvert

HTML

PDF

Markdown

LaTeX

Python脚本

Reveal.js 幻灯片

可执行脚本

静态网页

带交互式图表

学术论文

报告文档

博客文章

文档网站

演示文稿

8.2 命令行导出

# 导出为HTML
jupyter nbconvert –to html notebook.ipynb

# 导出为PDF(需要安装LaTeX或使用webpdf)
jupyter nbconvert –to pdf notebook.ipynb
jupyter nbconvert –to webpdf notebook.ipynb # 不需要LaTeX

# 导出为Markdown
jupyter nbconvert –to markdown notebook.ipynb

# 导出为Python脚本
jupyter nbconvert –to script notebook.ipynb

# 导出为Reveal.js幻灯片
jupyter nbconvert –to slides notebook.ipynb

# 批量导出
jupyter nbconvert –to html *.ipynb

# 带模板的导出
jupyter nbconvert –to html –template lab notebook.ipynb
jupyter nbconvert –to html –template classic notebook.ipynb

# 隐藏代码Cell导出
jupyter nbconvert –to html –no-input notebook.ipynb
jupyter nbconvert –to html –no-prompt notebook.ipynb

8.3 分享方式

方式优点缺点适用场景
GitHub 原生渲染.ipynb 静态展示 代码分享
nbviewer 完整渲染,支持交互 需要上传 公开分享
Binder 在线运行环境 启动较慢 教学/演示
Google Colab 免费GPU,在线编辑 Google生态 深度学习
JupyterHub 多用户部署 需要服务器 团队协作
VS Code 原生支持 需本地安装 个人开发
Deepnote 实时协作 限制免费版 团队数据科学
Kaggle 免费GPU,社区 平台限制 竞赛/学习

8.4 使用Binder创建在线环境

在项目根目录创建配置文件:

# environment.yml
name: my–notebook–env
channels:
– conda–forge
– defaults
dependencies:
– python=3.11
– numpy
– pandas
– matplotlib
– seaborn
– scikit–learn
– jupyterlab
– ipywidgets

然后访问 https://mybinder.org/,输入GitHub仓库地址即可生成可在线运行的Jupyter环境。

九、最佳实践与技巧

9.1 Notebook组织结构

01_数据加载与清洗.ipynb
02_探索性数据分析.ipynb
03_特征工程.ipynb
04_模型训练.ipynb
05_模型评估.ipynb
06_结果可视化.ipynb
README.md
data/
raw/
processed/
src/
utils.py
models.py
output/
figures/
models/

9.2 代码规范建议

# 1. 在Notebook开头导入所有需要的库
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

# 设置全局显示选项
pd.set_option('display.max_columns', 50)
pd.set_option('display.max_rows', 100)
pd.set_option('display.float_format', '{:.2f}'.format)

# 2. 设置统一的图表风格
plt.rcParams['figure.figsize'] = (12, 6)
plt.rcParams['figure.dpi'] = 100
sns.set_style('whitegrid')
sns.set_palette('husl')

# 3. 使用配置Cell集中管理参数
# 创建一个"配置"Cell放在Notebook开头
CONFIG = {
'data_path': './data/raw/',
'output_path': './output/',
'random_seed': 42,
'test_size': 0.2,
'n_folds': 5
}

# 4. 将通用函数集中在一个Cell中
def load_data(path):
"""加载数据"""
return pd.read_csv(path)

def clean_data(df):
"""清洗数据"""
df = df.drop_duplicates()
df = df.dropna(subset=['target_column'])
return df

9.3 性能优化技巧

# 1. 使用%config控制输出
%config InlineBackend.figure_format = 'retina' # 高清图表
%config InlineBackend.figure_format = 'svg' # 矢量图表

# 2. 限制DataFrame的显示
# 只显示前5行而不是全部
df.head()

# 3. 缓存计算结果
# 使用%%time检查Cell执行时间,优化慢的Cell

# 4. 清理不需要的变量
import gc
del large_variable
gc.collect()

# 5. 使用numba加速(适用于数值计算)
# pip install numba
from numba import jit

@jit(nopython=True)
def fast_computation(x):
result = 0
for i in range(len(x)):
result += x[i] ** 2
return result

9.4 版本控制最佳实践

# .gitignore中应包含的内容
.ipynb_checkpoints/
__pycache__/
*.pyc
.pytest_cache/
.python-version
*.egg-info/
dist/
build/

# 使用jupytext实现Notebook与.py文件的同步
# pip install jupytext

# 创建配置文件
# jupytext.toml

# jupytext.toml
formats = "ipynb,py:percent"

[format_suffixes]
".ipynb" = "ipynb"
".py" = "py:percent"

# 使用jupytext后,Notebook会被保存为.py格式
# 这样Git diff可以清晰地看到代码变更
# 同时保留.ipynb文件用于执行

9.5 常见错误处理

# 问题1:Kernel died/restarting
# 原因:内存不足
# 解决:%%memit检查内存使用,优化代码或分批处理数据

# 问题2:变量作用域混乱
# 解决:运行 Kernel -> Restart & Run All 从头执行

# 问题3:图表不显示
# 确保添加了 %matplotlib inline
# 或检查 plt.show() 是否被调用

# 问题4:中文字体显示方框
plt.rcParams['font.sans-serif'] = ['SimHei', 'Microsoft YaHei', 'DejaVu Sans']
plt.rcParams['axes.unicode_minus'] = False

# 问题5:Notebook文件过大
# 解决:Kernel -> Restart & Clear Output,然后保存

十、Jupyter与其他工具集成

10.1 VS Code中的Jupyter

VS Code原生支持Jupyter Notebook,具有以下优势:

  • 更快的编辑体验
  • 更好的代码补全
  • 集成调试器
  • Git集成
  • 变量查看器

10.2 PyCharm中的Jupyter

PyCharm专业版支持Jupyter Notebook,提供了:

  • 代码智能提示
  • 重构工具
  • 单元测试集成
  • 数据库工具

10.3 Google Colab集成

Google Colab是Google提供的免费Jupyter环境:

# Colab特有功能
from google.colab import drive
drive.mount('/content/drive') # 挂载Google Drive

# 使用免费GPU
# Runtime -> Change runtime type -> GPU

# 安装Colab不包含的库
!pip install transformers

# 使用Colab表单
# 插入表单字段,生成交互式UI

十一、总结

Jupyter Notebook重新定义了交互式编程的方式。它将代码、文档、可视化和叙述融合在一起,让编程不再只是编写代码,而是讲述一个完整的数据故事。

核心要点回顾:

  • Notebook的本质:文学编程的实践工具,代码+文档+输出的完美结合
  • Cell操作:Code Cell和Markdown Cell的灵活组合是高效使用的基础
  • 魔法命令:%time、%debug、%run等命令大幅提升交互式编程体验
  • 数据可视化:Matplotlib、Seaborn、Plotly在Notebook中拥有出色的表现
  • 导出分享:支持HTML、PDF、Markdown等多种格式导出
  • 最佳实践:合理的Notebook组织结构和代码规范让项目更可维护
  • Jupyter Notebook已经从一个简单的Python交互界面,发展成为一个完整的计算生态系统。无论你是数据科学家、研究人员、教育工作者还是Python学习者,掌握Jupyter Notebook都将为你的工作带来巨大的便利。


    下一篇文章预告:《Python运行原理:解释型语言与字节码执行过程》——我们将深入Python的底层世界,揭示.py文件是如何变成可执行指令的,从源码到字节码,从PVM到pyc文件,彻底理解Python程序的运行机制。这是一次从"会用"到"理解"的关键跃迁,敬请期待!

    赞(0)
    未经允许不得转载:网硕互联帮助中心 » Jupyter Notebook入门:交互式编程神器使用指南
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!