用于创建交互式仪表板的Python库

2025 年 1 月 5 日 | 11 分钟阅读

在数据驱动的决策制定技术中,创建交互式仪表板的能力非常宝贵。Python 是一种强大而灵活的编程语言,提供了多种工具来帮助您构建动态和交互式的仪表板效果。在本文中,我们将探讨 4 种最流行的用于开发交互式仪表板的 Python 包:Dash、Streamlit、Bokeh 和 Panel。

1. Dash

Dash 是由 Plotly 开发的一个 Web 应用程序框架。它允许您使用 Python 构建交互式 Web 应用程序和仪表板。Dash 结合了编写 HTML 和 JavaScript 的简洁性与 Python 数据处理库的强大功能,使其成为数据科学家和分析师的绝佳选择。

Dash 的主要特点

  • 交互式、基于 Web 的界面:Dash 允许创建可以通过任何 Web 浏览器访问的交互式 Web 应用程序。这使得共享和协作数据可视化变得简单方便。
  • 丰富的可视化组件:Dash 提供了广泛的组件用于构建仪表板,包括图表、表格、下拉菜单、滑块等。这些组件旨在无缝协作,让您可以创建丰富、交互式的界面。
  • 与 Plotly 集成:Dash 构建在 Plotly 之上,Plotly 是一个出色的 Python 图形库。这种集成使您可以利用 Plotly 强大的图形功能来创建令人惊叹的可视化。
  • 部署灵活性:Dash 应用程序可以轻松地部署在各种平台上,包括本地服务器、云服务和企业环境。这种灵活性确保您的仪表板可以在各种场景下进行访问和使用。

开始使用 Dash

要开始使用 Dash 构建仪表板,您首先需要安装 Dash 库。您可以使用 pip 完成此操作

安装完成后,您可以创建一个基本的 Dash 应用程序。以下是一个简单的示例,可帮助您入门

Dash 应用程序基本示例

代码解析

  • 初始化:`dash.Dash(__name__)` 初始化 Dash 应用。
  • 布局:`app.Layout` 使用 HTML 组件和 Dash 核心组件定义应用的布局。在此示例中,我们有一个输入字段(`dcc.Input`)和一个用于显示输出的 div(`html.Div`)。
  • 回调:`@app.Callback` 装饰器定义了输入和输出之间的交互。`update_output_div` 回调函数使用输入字段中的值更新输出 div。
  • 运行应用:`app.run_server(debug=True)` 命令以调试模式运行应用,让您可以实时查看更改。

Dash 高级功能

Dash 提供了许多高级功能来增强您的仪表板

  • 交互式图表:使用 Plotly 创建动态交互式图表。
  • 多重回调:定义多个回调来处理组件之间的复杂交互。
  • 数据共享:使用 `dcc.Store` 组件在回调之间共享数据。
  • 样式和主题:使用 CSS 和内置主题来自定义仪表板的外观和感觉。
  • 部署:将 Dash 应用部署到 Heroku、AWS 或您自己的服务器等平台。

1. Streamlit

Streamlit 是一个功能强大且用户友好的框架,用于在 Python 中构建交互式仪表板和 Web 应用程序。Streamlit 以其简洁性和速度而闻名,它使数据科学家、分析师和开发人员能够快速原型化和共享数据驱动型应用程序,而无需丰富的 Web 开发经验。

Streamlit 的主要特点

  • 简洁直观的 API:Streamlit 的设计宗旨是尽可能简单。学习曲线很小,您只需几行 Python 代码即可创建交互式应用程序。
  • 实时交互性:Streamlit 支持实时交互性,允许用户在与应用程序交互时立即看到更改。这对于数据探索和分析尤其有用。
  • 与流行库集成:Streamlit 与 Pandas、NumPy、Matplotlib、Plotly 等流行的 Python 库无缝集成,使您能够利用现有的工具和工作流程。
  • 部署灵活性:Streamlit 应用程序可以部署在各种平台上,包括本地计算机、云服务和企业环境。这确保了您的应用程序能够被广大受众访问。

开始使用 Streamlit

要开始使用 Streamlit 构建仪表板,您需要安装 Streamlit 库。您可以使用 pip 完成此操作

安装完成后,您可以创建一个基本的 Streamlit 应用程序。以下是一个简单的示例,可帮助您入门

Streamlit 应用程序基本示例

要运行该应用,请将代码保存到 Python 文件(例如,app.py),然后使用以下命令

代码解析

  • 标题:`st.title('My First Streamlit App')` 设置应用的名称。
  • DataFrame:创建一个简单的 Pandas DataFrame 并使用 `st.write()` 显示。
  • 滑块:使用 `st.slider()` 创建一个交互式滑块,并实时显示所选值。

Streamlit 高级功能

  • Streamlit 提供了许多高级功能来增强您的仪表板
  • 小部件:Streamlit 提供各种小部件,如按钮、复选框、选择框等,以创建交互式元素。
  • 图表:使用 Matplotlib、Plotly、Altair 等库创建交互式图表和绘图。
  • 媒体:直接在您的应用中显示图像、视频和音频文件。
  • 布局和容器:使用列、选项卡和可展开部分组织应用的布局。
  • 缓存:使用 `@st.cache` 装饰器通过缓存昂贵的计算来优化性能。

Streamlit 高级应用示例

这是一个演示 Streamlit 一些高级功能的示例

Bokeh

Bokeh 是 Python 中一个强大的可视化库,允许用户创建交互式和高性能的绘图、仪表板和数据应用程序。它旨在提供 D3.Js 风格的优雅简洁的图形,但具有 Python 的简单性和易用性的优势。Bokeh 特别适用于大型或流式数据集,并允许使用少量代码进行高级可视化。

Bokeh 的主要特点

  • 高性能交互性:Bokeh 能够以高吞吐量处理大型和流式数据集。这使其成为实时数据可视化的理想选择。
  • 丰富的可视化集:Bokeh 支持多种绘图和图表,包括线图、散点图、条形图、直方图等。它还支持地理地图和网络图等高级可视化。
  • 与 Jupyter Notebook 集成:Bokeh 与 Jupyter Notebook 无缝协作,使其成为在交互式环境中进行数据分析和探索的绝佳选择。
  • 服务器驱动的绘图:Bokeh 允许创建可以实时更新的服务器驱动的绘图,提供动态交互式仪表板。
  • 可扩展和可定制:Bokeh 是高度可扩展的,支持自定义扩展和与其他库的集成。它还提供了出色的自定义选项来定制可视化效果的外观和感觉。

开始使用 Bokeh

要开始使用 Bokeh,您需要安装该库。您可以使用 pip 完成此操作

安装完成后,您可以创建一个基本的 Bokeh 图。以下是一个简单的示例,可帮助您入门

Bokeh 图基本示例

代码解析

  • 输出文件:`output_file("simple_plot.html")` 指定将保存绘图的 HTML 文件。
  • 图对象:`figure()` 函数创建一个带有标题和轴标签的新图对象。
  • 线图:`p.line()` 方法向具有指定 x 和 y 值、图例标签和线宽的图形添加一个线图。
  • 显示绘图:`show(p)` 函数在 Web 浏览器中显示绘图。

Bokeh 高级功能

Bokeh 提供了许多高级功能,可以增强其创建复杂交互式可视化的能力

  • 交互式工具:Bokeh 包括多种交互式工具,如平移、缩放、悬停和选择,以使绘图更具交互性。
  • 小部件:Bokeh 提供滑块、按钮和下拉菜单等小部件,可用于创建可视化的交互式控件。
  • 布局:Bokeh 支持复杂的布局,包括网格和选项卡,用于在仪表板中组织多个绘图和小部件。
  • CustomJS 回调:Bokeh 允许使用自定义 JavaScript 回调,提供更强的交互性和定制性。
  • Bokeh 服务器:Bokeh 服务器允许创建交互式 Web 应用程序,这些应用程序可以根据用户交互或数据更新实时更新绘图。

Bokeh 高级应用示例

这是一个演示 Bokeh 一些高级功能的示例

高级示例解析

  • ColumnDataSource:`ColumnDataSource` 是 Bokeh 中一个关键的数据结构,用于保存绘图的数据。
  • 圆圈渲染器:`p.circle()` 方法向绘图添加一个圆圈渲染器,使用来自 `ColumnDataSource` 的数据。
  • 回调函数:`update()` 函数是一个回调,它根据滑块的值更新 `ColumnDataSource` 中的数据。
  • 滑块小部件:`Slider` 小部件允许用户交互式地更改绘图的大小。
  • 布局:`column()` 函数将绘图和滑块垂直排列。
  • Bokeh 服务器:`curdoc().add_root(layout)` 将布局添加到当前文档,使 Bokeh 服务器能够提供交互式应用程序。

Panel

Panel 是一个面向 Python 的高级应用和仪表板解决方案,它构建在 Bokeh 之上。它允许以最小的精力创建交互式 Web 应用程序和仪表板。Panel 非常灵活,并且与大量数据可视化库无缝集成,使其成为数据科学家、分析师和开发人员的强大工具。

Panel 的主要特点

  • 高级抽象:Panel 提供了一个高级接口,用于创建复杂的交互式仪表板和应用程序,而无需大量样板代码。
  • 与流行库集成:Panel 与 Matplotlib、Plotly、Bokeh、Holoviews 和 Altair 等流行数据可视化库无缝集成。这使您可以为特定需求使用最佳工具。
  • 丰富的组件:Panel 提供各种用户交互小部件,包括滑块、按钮、输入框和下拉菜单。这些小部件使创建动态交互式应用程序变得容易。
  • 灵活的布局:Panel 支持各种布局选项,包括列、行、选项卡、网格等。这种灵活性有助于有效地组织和构建仪表板的组件。
  • 部署选项:Panel 应用程序可以在本地、云平台上部署,或集成到现有 Web 框架中。这使得共享仪表板变得容易。

开始使用 Panel

使用 pip 命令安装库

创建一个基本的 Panel 应用程序。以下是一个简单的示例,可帮助您入门

Panel 应用程序基本示例

将代码保存到 Python 文件(例如,app.py),然后使用以下命令运行它

代码解析

  • 初始化:`pn.extension()` 初始化 Panel 扩展。
  • Matplotlib 绘图:创建一个简单的 Matplotlib 正弦波绘图。
  • Panel 对象:使用 `pn.pane.Matplotlib` 将 Matplotlib 绘图转换为 Panel 对象。
  • 滑块小部件:使用 `pn.widgets.FloatSlider` 创建一个交互式滑块。
  • 回调函数:`update_plot()` 函数根据滑块的值更新绘图。
  • 布局:使用 `pn.Column` 将绘图和滑块垂直排列。
  • 服务应用程序:`layout.servable()` 使应用程序可服务。

Panel 高级功能

Panel 提供了许多高级功能来创建复杂且交互式的数据应用程序

  • 链接小部件和绘图:轻松地将小部件链接到绘图和其他组件,以创建动态交互。
  • 模板支持:使用内置模板快速创建专业外观的仪表板。
  • 数据管道:与数据管道和流式数据源集成以进行实时更新。
  • 自定义:自定义小部件和布局的外观和行为以满足您的需求。
  • 与 Jupyter 集成:在 Jupyter Notebook 中使用 Panel 进行交互式数据探索和分析。

Panel 高级应用示例

这是一个演示 Panel 一些高级功能的示例

高级示例解析

  • Holoviews 散点图:使用 Holoviews 创建散点图,这是一个与 Bokeh 集成的高级可视化库。
  • 选择小部件:使用 `pn.widgets.Select` 创建一个选择小部件,用于根据选定的物种过滤数据。
  • 回调函数:`filter_species()` 函数根据选定的物种更新散点图。
  • 布局:使用 `pn.Column` 将散点图和选择小部件垂直排列。
  • 服务应用程序:`layout.servable()` 使应用程序可服务。