新闻详情

新闻详情

首页 / 资讯中心 / 详情

Bokeh Movies 示例:基于 Bokeh Server 的电影数据交互查询可视化仪表盘

发布时间:2026/9/14 10:08:25来源:尧图网络
Bokeh Movies 示例:基于 Bokeh Server 的电影数据交互查询可视化仪表盘
Bokeh Movies 示例基于 Bokeh Server 的电影数据交互查询可视化仪表盘【免费下载链接】bokehInteractive Data Visualization in the browser, from Python项目地址: https://gitcode.com/GitHub_Trending/bo/bokeh导读本文围绕 Bokeh 官方仓库中的 Movies 示例应用 展开讲解如何用 Bokeh Server 构建一个可交互的电影数据查询与可视化仪表盘左侧是一组滑块、下拉框与文本输入控件用于按年份、票房、评分、类型、导演、演员等条件过滤数据右侧散点图随筛选条件实时更新并支持切换 X/Y 轴、悬停查看影片详情。读完本文你将掌握示例的数据准备、运行方式、完整的仪表盘实现结构以及 Bokeh 响应式回调与ColumnDataSource数据驱动更新的底层机制。应用概览Movies 示例的目标是「为一组电影数据创建一个交互式查询与可视化仪表盘」。数据源于 OMDBOpen Movie Database与烂番茄Rotten Tomatoes评分信息灵感来自 R 语言 Shiny 社区经典的 Movie Explorer 示例。该应用位于 examples/server/app/movies/包含以下文件文件作用main.py应用主体数据加载、控件定义、散点图与回调逻辑query.sql从本地 SQLite 数据库读取电影数据的 SQL 查询description.html页面顶部说明区标题、交互提示与内联样式genres.txt类型下拉框的候选项含Allrazzies-clean.csv金酸莓奖获奖影片的 IMDb ID 列表用于特殊着色README.md安装与运行说明从结构上看这是一个典型的 Bokeh Server 单文件应用main.py内的代码在服务端每次会话启动时执行通过curdoc()把控件与绘图挂载到文档上浏览器端的所有交互都会通过 WebSocket 回传到服务端触发重算这正是 Bokeh Server 应用与静态bokeh.plotting输出的核心区别。环境准备与数据安装安装示例数据集该示例依赖 Bokeh 官方示例数据集需要单独安装。在命令行执行pip install bokeh_sampledata安装后所有数据文件会被下载到用户主目录下的一个子文件夹中Linux 下通常位于~/bokehdata。这些数据集通过bokeh.sampledata模块暴露给用户src/bokeh/sampledata/init.py 的文档字符串明确说明部分数据集需要单独安装使用pip install bokeh_sampledata即可且要求数据集版本不低于SAMPLEDATA_MIN_VERSION 2025.0。仓库内 src/bokeh/sampledata/movies_data.py 是一个 shim 模块通过_create_sampledata_shim动态导入bokeh_sampledata.movies_data并以movie_path暴露 SQLite 数据库文件路径类型声明见 movies_data.pyi。也就是说示例中的from bokeh.sampledata.movies_data import movie_path实际读取的是单独安装的bokeh_sampledata包里的电影数据库。安装 Pandas示例使用 Pandas 的 SQL 读取接口加载数据因此还需要安装 Pandasconda install pandas或使用 pippip install pandas在 main.py 中pandas.io.sql as psql与numpy as np被用于查询 SQLite、执行向量化条件计算和缺失值填充。运行应用进入examples/server/app目录该目录下还包含其他 Bokeh Server 示例应用执行bokeh serve --show movies--show会让 Bokeh Server 启动后自动在浏览器中打开应用页面应用标题在 main.py 中通过curdoc().title Movies设置。也可以使用 Bokeh 提供的--dev等开发模式参数或指定端口如bokeh serve movies --port 5006以满足部署需求更完整的服务选项可通过bokeh serve --help查看。数据加载与预处理SQL 查询电影数据应用启动时先用sqlite3连接movie_path指向的 SQLite 数据库再读取同目录下的 query.sql 并交给psql.read_sql执行conn sql.connect(movie_path) query (Path(__file__).parent / query.sql).read_text(utf8) movies psql.read_sql(query, conn)query.sql将omdb与tomatoes两张表按 ID 关联字段覆盖片名、年份、MPAA 分级、时长、类型、导演、编剧、演员、IMDb 评分与票数、Oscars 获奖数、烂番茄新鲜度Meter/Reviews/Fresh/Rotten以及票房BoxOffice等并以WHERE omdb.ID tomatoes.ID AND Reviews 10过滤掉评论数过少的影片。数据着色与缺失值处理加载完成后代码用 NumPy 做向量化标注为散点图区分三类影片movies[color] np.where(movies[Oscars] 0, orange, grey) movies[alpha] np.where(movies[Oscars] 0, 0.9, 0.25) movies.fillna({BoxOffice: 0}, inplaceTrue) # replace missing values with zero movies[revenue] movies.BoxOffice.apply(lambda x: f{int(x)})获过奥斯卡奖的影片显示为橙色、透明度 0.9未获奖影片为灰色、透明度 0.25票房缺失值统一填充为 0并派生revenue字符串列用于悬停提示。随后读取razzies-clean.csv内容为一列TITLE_ID共 35 行 IMDb ID如tt4009460、tt1333125把命中金酸莓奖 ID 的影片标记为紫色、透明度 0.9with open(join(dirname(__file__), razzies-clean.csv)) as f: razzies f.read().splitlines() movies.loc[movies.imdbID.isin(razzies), color] purple movies.loc[movies.imdbID.isin(razzies), alpha] 0.9由此散点图上同一图例下呈现三种视觉语义橙色奥斯卡获奖、紫色金酸莓获奖、灰色普通影片。交互控件与坐标轴映射输入控件定义main.py 共定义 10 个控件构成查询面板控件类型默认值范围/选项说明reviewsSlider8010–300步长 10最少评论数min_yearSlider19701940–2014上映起始年份max_yearSlider20141940–2014上映结束年份oscarsSlider00–4最少奥斯卡获奖数boxofficeSlider00–800百万美元最低票房genreSelectAllgenres.txt 中的 24 个类型类型过滤directorTextInput空—导演名包含匹配castTextInput空—演员名包含匹配x_axisSelectTomato Meter6 个可选字段X 轴字段y_axisSelectNumber of Reviews6 个可选字段Y 轴字段genres.txt提供了 Action、Adventure、Animation、Drama、Sci-Fi、Western 等类型列表axis_map字典把轴标签映射到数据列名axis_map { Tomato Meter: Meter, Numeric Rating: numericRating, Number of Reviews: Reviews, Box Office (dollars): BoxOffice, Length (minutes): Runtime, Year: Year, }散点图与提示绘图部分使用figure(height600, ...)禁用默认工具栏toolbar_locationNone通过tooltips定义悬停信息TOOLTIPS [ (Title, title), (Year, year), ($, revenue), ] p figure(height600, title, toolbar_locationNone, tooltipsTOOLTIPS, sizing_modestretch_width) p.scatter(xx, yy, sourcesource, size7, colorcolor, line_colorNone, fill_alphaalpha)注意散点图的数据源是空的ColumnDataSource初始x[]、y[]数据完全由后续update()填充这体现了 Bokeh「先建空数据源、后更新数据」的常见模式。sizing_modestretch_width与页面描述 description.html 中的提示「移动左侧控件查询电影子集悬停圆圈查看影片详情」相配合。过滤逻辑与回调更新多条件过滤核心过滤函数select_movies()对 DataFrame 做链式布尔索引def select_movies(): genre_val genre.value director_val director.value.strip() cast_val cast.value.strip() selected movies[ (movies.Reviews reviews.value) (movies.BoxOffice (boxoffice.value * 1e6)) (movies.Year min_year.value) (movies.Year max_year.value) (movies.Oscars oscars.value) ] if genre_val ! All: selected selected[selected.Genre.str.contains(genre_val)] if director_val ! : selected selected[selected.Director.str.contains(director_val)] if cast_val ! : selected selected[selected.Cast.str.contains(cast_val)] return selected数值滑块条件直接作用于列类型、导演、演员使用str.contains子串匹配boxoffice以百万美元为单位比较时乘以1e6转为实际美元。数据驱动刷新update()将过滤结果写入source.data同时同步轴标签与图标题def update(): df select_movies() x_name axis_map[x_axis.value] y_name axis_map[y_axis.value] p.xaxis.axis_label x_axis.value p.yaxis.axis_label y_axis.value p.title.text f{len(df)} movies selected source.data dict(xdf[x_name], ydf[y_name], colordf[color], titledf[Title], yeardf[Year], revenuedf[revenue], alphadf[alpha])标题实时显示「N movies selected」让用户直观感知过滤强度。事件绑定与布局每个控件都通过on_change(value, ...)绑定更新回调任意控件值变化都会触发重算controls [reviews, boxoffice, genre, min_year, max_year, oscars, director, cast, x_axis, y_axis] for control in controls: control.on_change(value, lambda attr, old, new: update())布局为「顶部说明 左侧控件列 右侧散点图」并设置整体高度inputs column(*controls, width320, height800) layout column(desc, row(inputs, p, sizing_modeinherit), sizing_modestretch_width, height800) update() # initial load of the data curdoc().add_root(layout) curdoc().title Movies最后手动调用一次update()完成首次数据渲染再将根布局挂到curdoc()。整个「控件变化 → 回调 → 更新ColumnDataSource→ 浏览器端图形重绘」的闭环就是 Bokeh Server 交互应用的标准范式。扩展方向在示例基础上可以低成本地演进增加更多轴选项在axis_map中追加imdbRating、userMeter等字段即可替换数据源把query.sql换成自己业务的查询语句或改用其他数据库驱动如pandas.read_sql搭配 PostgreSQL联动其他图形用js_link或新增on_change回调让柱状图、表格与散点图联动构成多视图仪表盘部署bokeh serve支持--allow-websocket-origin等参数用于反向代理场景可参考仓库内其他 server 应用示例 了解部署方式。小结Movies 示例完整展示了 Bokeh Server 应用的核心开发链路数据准备bokeh_sampledata Pandas SQL→ 界面搭建Slider/Select/TextInputfigure.scatter→ 状态管理与响应式回调on_changeupdate→ 数据驱动渲染ColumnDataSource。其中用单一source.data同时驱动颜色、透明度与悬停字段的设计以及「空数据源 初始化 update」的模式是构建复杂交互仪表盘时可以反复借鉴的实践。无论用于数据分析演示、数据产品原型还是教学示例这套「查询面板 散点图 实时标题反馈」的组合都具备很强的可移植性。【免费下载链接】bokehInteractive Data Visualization in the browser, from Python项目地址: https://gitcode.com/GitHub_Trending/bo/bokeh创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

AI Agent架构解析:Model与Harness协同设计 2026/9/14 11:02:34

AI Agent架构解析:Model与Harness协同设计

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
专科生论文降AI率工具与技巧全解析 2026/9/14 11:02:34

专科生论文降AI率工具与技巧全解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
Krokiet 磁盘清理工具:一条命令装好,14 类问题文件一次扫清 2026/9/14 11:02:34

Krokiet 磁盘清理工具:一条命令装好,14 类问题文件一次扫清

Krokiet 磁盘清理工具:一条命令装好,14 类问题文件一次扫清 【免费下载链接】czkawka Multi functional app to find duplicates, empty folders, similar images etc. 项目地址: https://gitcode.com/GitHub_Trending/cz/czkawka 照片库、下载目…

阅读更多 →
OpenMetadata Java SDK 测试策略详解:Mock 测试与集成测试的分层设计 2026/9/14 11:02:34

OpenMetadata Java SDK 测试策略详解:Mock 测试与集成测试的分层设计

OpenMetadata Java SDK 测试策略详解:Mock 测试与集成测试的分层设计 【免费下载链接】OpenMetadata The Open Context Layer for Data and AI , OpenMetadata is the open platform for building trusted data context and business semantics for humans, AI assi…

阅读更多 →
私有协议与SIP广播对讲技术对比与应用选型 2026/9/14 11:02:34

私有协议与SIP广播对讲技术对比与应用选型

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
Haystack × Ragas 集成指南:用 RagasEvaluator 构建 LLM 驱动的 RAG 质量评估 2026/9/14 10:59:33

Haystack × Ragas 集成指南:用 RagasEvaluator 构建 LLM 驱动的 RAG 质量评估

Haystack Ragas 集成指南:用 RagasEvaluator 构建 LLM 驱动的 RAG 质量评估 【免费下载链接】haystack Open-source AI orchestration framework for building context-engineered, production-ready LLM applications. Design modular pipelines and agent workfl…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞