查看全课大纲(第 78 / 101 节)
  1. 1.数据分析基本概念
  2. 2.学习数据分析的一般路线
  3. 3.数据分析的流程
  4. 4.数据类型
  5. 5.环境部署(1)
  6. 6.环境部署(2)
  7. 7.课程介绍
  8. 8.TXT文件操作
  9. 9.JSON文件操作
  10. 10.CSV文件操作
  11. 11.Excel文件操作
  12. 12.数据库及SQL常用语法
  13. 13.数据库基本操作
  14. 14.数据库多表连接
  15. 15.实战:欧洲职业足球数据库分析
  16. 16.爬虫简介
  17. 17.URL管理模块
  18. 18.网页下载模块
  19. 19.网页解析模块(1)
  20. 20.网页解析模块(2)
  21. 21.Scrapy简介
  22. 22.Scrapy使用步骤(1)
  23. 23.Scrapy使用步骤(2)
  24. 24.Scrapy使用步骤(3)
  25. 25.Scrapy使用步骤(4)
  26. 26.实战:获取国内城市空气质量指数数据
  27. 27.NumPy和SciPy介绍
  28. 28.多维数组
  29. 29.多维数组操作
  30. 30.NumPy的常用方法
  31. 31.向量化介绍
  32. 32.向量化及通用函数
  33. 33.实战:2016美国大选分析
  34. 34.数据结构-Series
  35. 35.数据结构-DataFrame
  36. 36.数据结构-Index
  37. 37.Series的索引操作
  38. 38.DataFrame的索引操作
  39. 39.索引操作总结
  40. 40.运算与对齐
  41. 41.函数应用操作(1) -- map
  42. 42.函数应用操作 (2) -- apply applymap
  43. 43.文件读写操作
  44. 44.排序操作
  45. 45.数据清洗--处理缺失数据
  46. 46.数据清洗--处理重复数据
  47. 47.数据清洗--替换数据
  48. 48.常用统计方法(1) -- describe quantile
  49. 49.常用统计方法(2) -- sum mean median count
  50. 50.常用统计方法(3) -- max min idxmax idxmin
  51. 51.常用统计方法(4) -- mad var std cumsum
  52. 52.实战:全球食品数据分析
  53. 53.层级索引
  54. 54.分组与聚合介绍
  55. 55.分组操作(1) -- GroupBy对象及常用聚合操作
  56. 56.分组操作(2) -- 自定义分组及聚合操作
  57. 57.透视表介绍
  58. 58.透视表操作
  59. 59.数据规整(1) -- 数据合并concat
  60. 60.数据规整(2) -- 数据连接merge
  61. 61.数据重构(3) -- 数据重构stack unstack
  62. 62.实战:互联网电影资料库分析
  63. 63.探索性数据分析EDA介绍
  64. 64.EDA的目的
  65. 65.EDA常用工具
  66. 66.Matplotlib绘图基本介绍
  67. 67.Matplotlib画布
  68. 68.散点图和柱状图的绘制
  69. 69.直方图的绘制
  70. 70.矩阵绘图
  71. 71.子图的使用
  72. 72.Matplotlib颜色、标记、线型
  73. 73.Matplotlib坐标刻度、标签、图例、标题
  74. 74.Seaborn介绍
  75. 75.数据集分布可视化(1) -- 单变量分布、双变量分布
  76. 76.数据集分布可视化(2) -- 变量关系可视化
  77. 77.类别数据可视化 -- 类别散布图、类别内数据分布、类别内统计图
  78. 78.交互式数据可视化工具Bokeh介绍
  79. 79.Bokeh绘制散点图、柱状图、盒子图、弦图
  80. 80.Bokeh绘制常用图形元素
  81. 81.3D绘图 -- mplot3d
  82. 82.3D曲线可视化
  83. 83.3D散点图可视化
  84. 84.3D柱状图可视化
  85. 85.Pandas绘图
  86. 86.实战:Lending Club借贷数据探索性分析及可视化
  87. 87.机器学习介绍及应用场景
  88. 88.机器学习建模介绍 (1) -- 分类
  89. 89.机器学习建模介绍 (2) -- 回归
  90. 90.机器学习建模介绍 (3) -- 聚类
  91. 91.机器学习分类
  92. 92.机器学习工具scikit-learn
  93. 93.使用scikit-learn的流程
  94. 94.数据集准备及划分
  95. 95.模型选择
  96. 96.数据预处理及特征工程
  97. 97.过拟合与欠拟合
  98. 98.模型调参介绍
  99. 99.模型调参方法
  100. 100.模型测试及评价
  101. 101.实战:通过移动设备行为数据预测性别和年龄

交互式数据可视化工具Bokeh介绍

约 7 分钟

📺 正在播放小象学院官方高清录播(支持倍速与清晰度调节)

交互式数据可视化:从静态图表到 Web 交互的技术演进

小象实战讲义 · Python数据分析实战

前面几节我们画出来的都是静态图——生成后就是一张固定的图片。本节我们要认识另一类图表:交互式可视化,它允许你用鼠标缩放、平移、悬停查看具体数值。原课以 Bokeh 工具为例讲授,本节在讲清交互式可视化底层机制的同时,如实说明工具生态的现状,并用可运行的 matplotlib 示例表达同一套「数据 → 图元」的映射思想。

💡 核心导读

  • 静态图与交互式图的本质差别:静态图输出为图片,交互式图输出为可交互的网页。
  • 交互式可视化的通用技术链路:Python 端声明数据与图元 → 序列化为 JSON/HTML → 浏览器端 JS 引擎渲染。
  • 工具生态现状:原课使用的 Bokeh 交互式框架如今在数据分析领域的主流水位已被 plotly、streamlit 等工具占据(Bokeh 3.x 仍在维护、适合定制化仪表盘;其当年主打的高层 API bokeh.charts 已被移除)。
  • 全部代码锁定现代环境实跑(pandas 3.0 + matplotlib 3.11),输出可直接核对。

1. 静态可视化与交互式可视化

静态图的产物是像素图片(PNG/JPG),适合放进印刷文档、报告与幻灯片;交互式图的产物是一个网页,浏览器打开后可以用鼠标缩放(zoom)、平移(pan)、悬停(hover)查看数值,适合探索百万级数据或搭建 BI 看板。

一句话概括两者差别:静态图回答「整体长什么样」,交互式图回答「我想放大看这里的具体数值是多少」。


2. 交互式可视化的技术链路与工具现状

无论是哪个交互式绘图库,底层链路都是同一套:

┌──────────────────────────────────────────────────────┐
│ 交互式可视化通用链路                                  │
├──────────────────────────────────────────────────────┤
│ ① Python 端:定义数据源 + 图元(glyph)+ 交互工具栏  │
│            │ 序列化为 JSON / HTML 规范                 │
│            ▼                                          │
│ ② 浏览器端:由 JavaScript 渲染引擎绘制到 Canvas/WebGL│
│            ▼                                          │
│ ③ 用户交互:缩放 / 平移 / 悬停提示 / 多图联动        │
└──────────────────────────────────────────────────────┘

如实说明工具现状:原课以 Bokeh 为例讲授这套机制(当年版本 0.12.x,其高层 bokeh.charts 模块在后续版本中已被移除)。在当前 Python 生态里,交互式可视化的常用工具已演进为 plotly、streamlit 等。工具会不断更新,但「数据 → 图元 → 浏览器渲染」这条链路是稳定的——掌握它,换任何一个库都能快速上手。


3. 可运行示例:用 matplotlib 表达「数据 → 图元」映射

下面先用 pandas 构造一份确定的小数据(某系统并发压测记录),再把它映射到坐标轴上——这正是所有绘图库的起点。

import pandas as pd

# 某系统并发压测数据(硬编码小样例,输出确定)
df = pd.DataFrame({
    "concurrency": [10, 20, 30, 40, 50],
    "response_ms": [20.5, 21.0, 23.5, 28.0, 35.5],
    "error_rate": [0.1, 0.2, 0.4, 1.1, 2.3],
})
print("待可视化的性能测试数据:")
print(df)
待可视化的性能测试数据:
   concurrency  response_ms  error_rate
0           10         20.5         0.1
1           20         21.0         0.2
2           30         23.5         0.4
3           40         28.0         1.1
4           50         35.5         2.3

接着把 concurrency 列映射到 x 轴、response_ms 列映射到 y 轴,画出「并发 - 响应耗时」曲线。这里使用 matplotlib 的 Agg 后端——它是无界面后端,在没有显示器的脚本环境里也能稳定出图,是自动化场景的通用做法。

import pandas as pd
import matplotlib
matplotlib.use("Agg")          # 无界面后端,保证脚本环境可运行
import matplotlib.pyplot as plt

df = pd.DataFrame({
    "concurrency": [10, 20, 30, 40, 50],
    "response_ms": [20.5, 21.0, 23.5, 28.0, 35.5],
})

# 把两列数据分别映射到 x / y 轴图元
fig, ax = plt.subplots(figsize=(5, 3))
ax.plot(df["concurrency"], df["response_ms"], marker="o")
ax.set_xlabel("并发用户数")
ax.set_ylabel("平均响应耗时 (ms)")
print("已绘制折线:数据点", len(df), "个,x 轴范围", int(df["concurrency"].min()), "至", int(df["concurrency"].max()))
plt.close(fig)
已绘制折线:数据点 5 个,x 轴范围 10 至 50

4. 静态图与交互式图的组合使用

两类图不是替代关系,而是分工协作:

维度静态图(PNG/JPG)交互式图(HTML/网页)
产物形态图片文件网页 / 嵌入式应用
核心能力固定成稿、印刷友好缩放 / 平移 / 悬停 / 联动
典型场景报告、论文、幻灯片探索式分析、BI 看板
数据规模适合概要呈现适合大数据量局部探查

实践中常见的组合是:先用交互式工具做探索(快速缩放、悬停查看某个异常点的具体数值),确认要表达的结论后,再用静态图做成稿。本节示例之所以用 matplotlib 画静态图,是因为它是最稳定、零依赖的「数据 → 图元」入门,先把这条链路走通,再迁移到 plotly、streamlit 等交互式工具时,你会发现要学的只剩表层 API 了。

需要提醒的是:本节示例使用 Agg 后端,是为了保证在没有显示器的脚本/服务器环境里也能稳定运行;如果你在本地的 Jupyter Notebook 里运行,可以去掉这一行,改用 Notebook 交互后端直接内嵌显示图形。


📝 动手练一练

  1. 概念辨析题:相比静态图,交互式可视化的核心优势是什么?

    👉 点击查看参考答案

    参考答案:

    • 支持缩放、平移、悬停提示等鼠标交互,便于在大数据量下探索局部细节;
    • 输出为网页,可嵌入 Web 应用或 BI 看板,实现多图联动与实时更新;
    • 适合需要「边看边查」的探索式分析场景,而静态图更适合固定成稿的展示。
  2. 概念思考题:交互式可视化库那么多,为什么说掌握「数据 → 图元 → 浏览器渲染」这条链路比记某个库的 API 更重要?

    👉 点击查看参考答案

    参考答案: 因为各库的 API 名称与用法会随版本不断变化(例如原课 Bokeh 的 bokeh.charts 高层 API 已被移除),但底层机制不变——都是「Python 声明数据与图元 → 序列化为 JSON/HTML → 浏览器 JS 引擎渲染」。理解链路后,迁移到 plotly、streamlit 等新工具只需学习其表层 API,底层认知可复用。


本章小结

  • 厘清了静态图(图片)与交互式图(网页)的本质差别与各自适用场景;
  • 理解了交互式可视化的通用技术链路:Python 声明 → JSON/HTML 序列化 → 浏览器渲染;
  • 知晓原课工具 Bokeh 的生态现状,并掌握了用 matplotlib(Agg 后端)在脚本环境稳定出图的方法。

📋 行动清单

  • 在本地运行本节 matplotlib 示例,把 error_rate 列也画成第二条曲线。
  • 用 fig.savefig("chart.png") 把图保存下来,观察静态图的产物形态。
  • 做好准备,进入下一小节学习 Bokeh 常用图形元素对应的图表绘制思路。

—— 小象教研组

配套资料 · 直接下载

课件、代码、数据集等配套资料全部免费,点击即可直接下载,无需分享或解锁。

  • 本节课件:交互式数据可视化工具Bokeh介绍
    PDF · 362KB
    下载
  • 全套课件打包(第1-5章)
    ZIP · 12.8MB
    下载
  • 全套课件打包(第6-8章)
    ZIP · 15MB
    下载
  • 实战数据集:AppleStore 应用商城分析
    ZIP · 329KB
    下载
  • 实战数据集:女性服装电商分析
    ZIP · 2.8MB
    下载
  • Python 数据分析环境搭建指南
    PDF · 2MB
    下载
  • Scrapy 安装教程
    PDF · 12.7MB
    下载
  • 附加实战项目:AppleStore 应用商城数据分析
    ZIP · 0.3MB · ipynb + CSV 数据
    下载
  • 附加实战项目:银行电话营销数据分析
    ZIP · 0.4MB · ipynb + CSV 数据
    下载
  • 附加实战项目:女性服装电商评论数据分析
    ZIP · 2.7MB · ipynb + CSV 数据
    下载
  • 附加实战项目:美国化学学会杂志数据分析
    ZIP · 34.2MB · ipynb + SQLite 数据库
    下载