Python交互式可视化:如何使用Bokeh构建交互式数据可视化?

2021年8月12日23:57:19 发表评论 2,300 次浏览

Python交互式可视化关键要点

  • Bokeh 是一个强大的工具,用于探索和理解您的数据或为项目或报告创建漂亮的自定义图表。
  • Bokeh 提供了一个 Python API 来在 D3.js 中创建可视化数据应用程序,而不必编写任何 JavaScript 代码。
  • 它允许使用标准 Pandas 和 NumPy 对象进行Python交互式绘图,包括 NumPy 数组、普通列表和 Pandas 系列。
  • 在Python交互式可视化领域,Bokeh 是跨不同媒介构建交互式和Python动态可视化的最理想候选者。

根据CRISP-DM标准(数据挖掘的跨行业标准流程),数据理解是关键的数据分析阶段,Python数据可视化是这里最有用的方法。 Bokeh 库 是为交互性和新颖图形而设计的,无论是否有专用服务器或依赖于 Javascript。本文将展示 Bokeh 如何成为探索和理解数据或为项目或报告创建漂亮的自定义图表的强大工具。

文章将带您了解Python交互式可视化:

  • 使用 Bokeh 将数据转换为可视化
  • 使用 Bokeh 自定义可视化
  • 为您的可视化添加交互性

docs.bokeh.org 上有非常详细的文档,还有其他优点。例如,快速入门用户指南绝对是必须尝试的。在他的项目 Visualizing Anomalies in the Dataset 中,美国教育生态系统的 Python 工程师 David Miller 指出,“Python数据可视化是理解数据中包含的信息的关键。Python交互式数据可视化为探索数据提供了宝贵的手段。Bokeh 提供了一个 Python API 来在 D3.js 中创建可视化数据应用程序,而不必编写任何 JavaScript 代码。” 

Python动态可视化环境的安装:安装Bokeh 需要以下命令:

conda install bokeh

或者使用

pip install bokeh

有一个 bokeh.sampledata 模块,其中包含准备好的 .csv 和 .db 文件,其中包含广泛使用的数据集,例如,Apple NASDAQ 指数、所有起飞航班的航空公司准点数据等。 

简而言之,我们将完成 Bokeh 应用程序的创建过程,这是生成 Bokeh 文档的秘诀。通常,这是在创建新会话时由 Bokeh 服务器运行的 Python 代码。

使用Bokeh构建Python交互式可视化涉及哪些步骤?

Python数据可视化准备数据

您如何使用 Numpy 和 Pandas 等库准备数据以将其转换为最适合您预期的可视化的形式? 

Bokeh 允许使用标准 Pandas 和 NumPy 对象进行Python交互式绘图。有几种 Python 数据结构可用于进一步的散景可视化:

  • NumPy 数组
  • 普通列表
  • Pandas系列 

让我们以 比特币历史数据 为例,为可视化准备时间序列数据(图 1)。该数据集包含 2012 年 1 月至 2020 年 12 月期间选定比特币交易所的 CSV 文件,以及 OHLC(开盘价、最高价、最低价、收盘价)的每分钟更新

Python交互式可视化:如何使用Bokeh构建交互式数据可视化?
图 1. 比特币历史数据帧 - Python交互式可视化

NumPy 数组用作数据存储(图 2)

Python交互式可视化:如何使用Bokeh构建交互式数据可视化?
图 2. 比特币历史到 NumPy 数组 - Python交互式数据可视化

Python数据可视化得到的散景图如下

Python交互式可视化:如何使用Bokeh构建交互式数据可视化?
图 3. 交互式散景图 - Python动态可视化

提供了 Jupyter notebook 中比特币Python数据可视化的完整代码 ( bokeh-bitcoin-data.ipynb ) 以及结果 BTC.html ( BTC.html )。

当数据像这样传递时,Bokeh 在幕后工作以制作 ColumnDataSource 以供进一步进行Python交互式绘图。

在最基本的层面上,ColumnDataSource 只是列名和数据列表之间的映射。ColumnDataSource 采用一个数据参数,它是一个 dict,Pandas DataFrame。如果将一个位置参数传递给 ColumnDataSource 初始值设定项,它将被视为数据。创建 ColumnDataSource 后,可以将其传递到绘图方法的源参数中,该参数允许您传递列名称作为数据值的替代品(图 4)。

Python交互式可视化:如何使用Bokeh构建交互式数据可视化?
图 4. ColumnDataSource 的使用 - Python动态可视化

Bokeh Python交互式可视化官方文档中详细描述了数据准备阶段(提供数据 — Bokeh 2.2.3 文档)。

确定将在何处呈现Python交互式可视化

在此步骤中,您将确定您希望如何生成并最终查看您的可视化。情节是散景​​库中的关键概念。Python交互式绘图:绘图是字形、指南、注释和其他工具的容器,生成和保存绘图有两种方法:简单的 .html 文件、本地或远程服务器应用程序。 

应用程序服务器是分发应用程序的最通用和最方便的方式。在这种情况下,可以使用各种小部件来更改输入值。有回调方法允许更新服务器上的绘图数据。这些更改会自动同步回浏览器,并且绘图会更新。Python交互式可视化应用程序允许用户操作数据并获得实际绘图(图 4),例如  说明 autompg 数据集的Bokeh Crossfilter示例应用程序。

Python交互式可视化:如何使用Bokeh构建交互式数据可视化?
图 4. Bokeh 服务器应用程序 - Python交互式可视化

因此,Jupyter notebook 是通过探索性数据分析创建可视化的一种方式。另一种方法是开发一个可以在本地运行的小应用程序,或者可以发送给同事在本地运行。Bokeh 服务器在此场景中非常有用且易于使用。

Bokeh 命令 bokehserve --show myapp.py 将导致浏览器自动打开一个新选项卡到正在运行的应用程序的地址。有关服务器创建的更多详细信息,请参阅官方文档 Running a Bokeh Server — Bokeh 2.2.3 文档

Python交互式可视化:设置图形

在此步骤中,您将指定Python数据可视化过滤器和绘图工具:平移/拖动、单击/点击、滚动/捏合。

Python动态可视化:有多种交互式工具可用于更改绘图参数,例如缩放级别、范围范围等。这些工具可分为四类:

  • 手势(平移/拖动工具、单击/点击工具、滚动/捏合工具)
  • 操作(重置工具)
  • 检查员(HoverTool、CrosshairTool。)
  • 编辑工具

所有这些工具结合起来,也有一些参数,如工具栏 toolbar_location 的 figure() 功能。

Tap Tools 使用的代码如图5 所示。Callback 方法返回被敲击点的坐标。 

Python交互式可视化:如何使用Bokeh构建交互式数据可视化?
图 5. Tap Tool 使用的代码 - Python交互式数据可视化

Tap Tools 实现的结果如图 6 所示。坐标显示在浏览器控制台中,可以使用 F12 键启动。

Python交互式可视化:如何使用Bokeh构建交互式数据可视化?
图 6. 点击工具使用  - Python动态可视化

有关Python交互式绘图工具的更多详细信息,请参阅官方文档 配置绘图工具 — Bokeh 2.2.3 文档

连接和绘制您的数据

解释如何使用 Bokeh 的众多渲染器来塑造您的数据。我们将探索视觉属性:线条、填充、文本、字形。Bokeh 提供了广泛的渲染器,例如 circle()、square()、triangle()、asterisk()、line()、vbar() 等,作为基本的视觉构建块或字形。这些图形基元的使用示例如图 7 所示。 

Bokeh 画廊 ( iris.py — Bokeh 2.2.3 文档)中显示了 Iris 数据集和相关代码片段的带圆圈的散点图示例。

有许多样式可视化属性,例如线条、填充、文本属性等。属性列表由链接 Styling Visual Attributes — Bokeh 2.2.3 Documentation 给出

Python交互式可视化:组织布局

展示如何通过几行代码轻松地将您的可视化组织到选项卡式布局中。有多种布局选项可用于组织图和小部件。布局允许您管理多个组件以创建交互式仪表板或数据应用程序。 

Python交互式绘图和小部件的网格可以使用布局函数构建,例如 column()、row()、gridplot() 等。有不同的大小调整模式,例如 'stretch_width'、'stretch_heigh'、'stretch_both'、'scale_width'等。这些模式允许绘图和小部件根据浏览器窗口调整大小。

例如,比特币历史数据集的分层图如图 7 所示

Python交互式可视化:如何使用Bokeh构建交互式数据可视化?
图 7. 不同层组织的编码

Python动态可视化:网格绘制的结果如图 8 所示。 

Python交互式可视化:如何使用Bokeh构建交互式数据可视化?
图 8. 地块的网格层

预览并保存您的精美数据创建

最后,探索您的可视化,检查您的自定义,并尝试您添加的任何交互。

输出生成有两种方法:

  • output_file() 用于在外部 .html 文件中保存绘图
  • output_notebook() 用于直接在 Jupyter 笔记本中渲染

此外还有一些图像导出方法,例如export_svgs()、export_png()。Jupyter notebooks 和 .html 用法的示例在前面的部分中给出。因此,该库提供了将图形保存在外部文件中并嵌入到Python交互式数据可视化笔记本中的工具。

Python交互式可视化概括

与 Python数据可视化领域中的一些常见对应物(例如 Matplotlib 和 Seaborn)不同,Bokeh 使用 JavaScript 和 HTML 呈现其图形,Python交互式绘图使其成为跨不同媒体构建交互式和Python动态可视化的理想选择。

在本文中,我们研究了数据准备阶段。Bokeh 库可以处理标准 Python 对象,例如平面列表、字典、NumPy 数组、Pandas DataFrame 和 Series。这使得为​​可视化准备数据变得非常容易。

我们回顾了基本的可视化散景方法,并给出了比特币历史数据集的代码示例。结果构建了一个Python交互式可视化工具。它可以用作 Jupyter 笔记本以进行快速原型设计。将结果保存到外部 .html 文件将允许您将其嵌入到 Web 应用程序中。Bokeh 服务器和客户端应用程序将该库与标准 Python 渲染工具(例如 Matplotlib 或 Seaborn)区分开来。

因此,Bokeh 是Python交互式可视化的好工具,它包含比其他库更多的工具,但比 Dash 等框架更简单。

木子山

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: