哪些网站有搜索引擎作弊的,东莞市建设监督网站,电脑自带的网页制作软件,做的比较唯美的网站有哪些探索 Bokeh#xff1a;轻松创建交互式数据可视化的强大工具
在数据科学和数据分析领域#xff0c;交互式数据可视化是一项不可或缺的技能。Bokeh 是一个强大的 Python 库#xff0c;它可以帮助我们快速构建高质量的交互式图表和仪表盘#xff0c;同时兼具高性能和灵活性。…探索 Bokeh轻松创建交互式数据可视化的强大工具
在数据科学和数据分析领域交互式数据可视化是一项不可或缺的技能。Bokeh 是一个强大的 Python 库它可以帮助我们快速构建高质量的交互式图表和仪表盘同时兼具高性能和灵活性。本文将带您了解 Bokeh 的核心功能并通过实际示例展示它的应用。 什么是 Bokeh
Bokeh 是一个用于创建交互式、Web 优化数据可视化的 Python 库。它的核心特点包括
交互性用户可以通过缩放、平移、悬停工具动态探索图表。易集成支持嵌入 HTML 页面或 Jupyter Notebook。多功能性提供从简单图表到复杂仪表盘的构建能力。高性能适合处理大规模数据。 安装和入门
在开始使用 Bokeh 前请先确保已安装库
pip install bokeh接下来我们通过简单示例体验 Bokeh 的基本功能。 创建一个简单的折线图
以下代码展示了如何使用 Bokeh 创建一个交互式折线图
from bokeh.plotting import figure, show
from bokeh.io import output_notebook# 在 Jupyter Notebook 中显示输出
output_notebook()# 数据
x [1, 2, 3, 4, 5]
y [6, 7, 2, 4, 5]# 创建图形对象
p figure(titleSimple Line Plot, x_axis_labelX-Axis, y_axis_labelY-Axis)# 添加折线
p.line(x, y, legend_labelLine, line_width2)# 显示图表
show(p)运行代码后您将看到一个可以交互的折线图。通过工具栏您可以缩放、平移并悬停查看详细数据。 使用 Pandas 数据快速绘图
Bokeh 与 Pandas 集成得很好您可以直接将 Pandas DataFrame 作为数据源来绘图。例如
import pandas as pd
from bokeh.plotting import figure, show# 创建示例 DataFrame
data {Month: [Jan, Feb, Mar, Apr, May],Sales: [100, 200, 150, 300, 400]
}
df pd.DataFrame(data)# 创建柱状图
p figure(x_rangedf[Month], titleMonthly Sales, x_axis_labelMonth, y_axis_labelSales)# 添加柱状图
p.vbar(xdf[Month], topdf[Sales], width0.5, colorblue)# 显示图表
show(p)这段代码生成了一个按月份显示销售额的柱状图直观展现了数据变化。 添加交互工具
Bokeh 的强大之处在于它的交互工具。以下示例展示了如何添加悬停提示和缩放功能
from bokeh.models import HoverTool# 创建图形对象
p figure(titleInteractive Plot, x_axis_labelX, y_axis_labelY, toolspan,box_zoom,reset)# 添加数据
p.circle(x, y, size10, colornavy, alpha0.5, legend_labelData Points)# 添加悬停工具
hover HoverTool()
hover.tooltips [(X Value, x), (Y Value, y)]
p.add_tools(hover)# 显示图表
show(p)通过悬停您可以动态查看每个数据点的详细信息。 构建多子图布局
Bokeh 提供了 gridplot 来构建多图布局这在创建仪表盘时非常有用。例如
from bokeh.layouts import gridplot# 创建多个图表
p1 figure(titleLine Plot)
p1.line(x, y, colorblue, legend_labelLine)p2 figure(titleScatter Plot)
p2.scatter(x, y, size10, colorgreen, legend_labelPoints)# 使用 gridplot 布局
layout gridplot([[p1, p2]])
show(layout)运行代码后您将看到两个图表并排显示。 动态数据更新
Bokeh 允许实时更新图表适合处理动态数据。例如绘制一个实时更新的折线图
from bokeh.plotting import curdoc
from bokeh.models import ColumnDataSource
from bokeh.layouts import column
from bokeh.plotting import figure
import random# 数据源
source ColumnDataSource(datadict(x[], y[]))# 创建图表
p figure(titleReal-Time Plot, x_axis_labelTime, y_axis_labelValue)
p.line(x, y, sourcesource)# 更新数据的回调函数
def update():new_data dict(x[source.data[x][-1] 1 if source.data[x] else 0], y[random.randint(0, 10)])source.stream(new_data, rollover50)# 每秒更新一次数据
curdoc().add_periodic_callback(update, 1000)# 显示布局
curdoc().add_root(column(p))在运行这段代码时图表会自动更新显示实时生成的数据。 构建交互式仪表盘
以下代码展示了如何创建一个交互式仪表盘包含下拉菜单和滑块控件
from bokeh.models import Select, Slider
from bokeh.layouts import row, column# 创建图表
p figure(titleInteractive Dashboard)
line p.line(x, y, legend_labelLine, line_width2)# 创建交互控件
select Select(titleLine Color, valueblue, options[blue, green, red])
slider Slider(titleLine Width, value2, start1, end10, step1)# 控件回调函数
def update(attr, old, new):line.glyph.line_color select.valueline.glyph.line_width slider.value# 将控件与回调关联
select.on_change(value, update)
slider.on_change(value, update)# 布局
layout column(row(select, slider), p)
curdoc().add_root(layout)运行代码后您可以通过下拉菜单和滑块动态更改折线的颜色和宽度。 基础总结
Bokeh 是一个功能丰富且灵活的交互式可视化工具非常适合快速开发 Web 优化的可视化应用。通过 Bokeh您可以轻松完成以下任务
生成各种交互式图表。构建多视图仪表盘。实现实时数据更新。
Bokeh 实战从数据分析到交互式仪表盘开发
在本节中我们将通过一个完整的实战项目展示如何用 Bokeh 构建一个交互式仪表盘实时可视化和分析销售数据。 实战场景
假设我们有一个电商平台的销售数据集其中包含以下字段
订单日期Order Date订单的日期。销售额Sales订单金额。类别Category商品类别如 “Electronics”、“Clothing” 等。地区Region订单所属地区。
目标是通过 Bokeh 构建一个交互式仪表盘完成以下功能
按时间查看销售趋势。对比不同商品类别的销售额占比。显示各地区销售分布。通过滑块和下拉菜单动态过滤数据。 数据准备
首先我们模拟一个数据集
import pandas as pd
import numpy as np# 生成示例数据
np.random.seed(42)
dates pd.date_range(start2023-01-01, end2023-12-31, freqD)
data {Order Date: np.random.choice(dates, 1000),Sales: np.random.randint(100, 2000, 1000),Category: np.random.choice([Electronics, Clothing, Home Appliances], 1000),Region: np.random.choice([North, South, East, West], 1000)
}
df pd.DataFrame(data)# 转换日期格式
df[Order Date] pd.to_datetime(df[Order Date])
df[Month] df[Order Date].dt.to_period(M).astype(str) # 生成月度字段构建图表
1. 月销售趋势图
from bokeh.plotting import figure
from bokeh.models import ColumnDataSource# 数据聚合
monthly_sales df.groupby(Month)[Sales].sum().reset_index()
monthly_sales_source ColumnDataSource(monthly_sales)# 绘制折线图
trend_plot figure(titleMonthly Sales Trend,x_rangemonthly_sales[Month],x_axis_labelMonth,y_axis_labelTotal Sales,toolspan,box_zoom,reset,hover
)
trend_plot.line(xMonth,ySales,sourcemonthly_sales_source,line_width2,colorblue,legend_labelMonthly Sales
)
trend_plot.legend.location top_left2. 商品类别销售额占比图
from bokeh.models import ColumnDataSource
from bokeh.plotting import figure# 数据聚合
category_sales df.groupby(Category)[Sales].sum().reset_index()
category_source ColumnDataSource(category_sales)# 绘制饼图
from math import pi
from bokeh.transform import cumsum
from bokeh.palettes import Category20ccategory_sales[angle] category_sales[Sales] / category_sales[Sales].sum() * 2 * pi
category_sales[color] Category20c[len(category_sales)]category_pie_plot figure(titleSales by Category,toolshover,tooltipsCategory: Sales,x_range(-0.5, 1.0)
)
category_pie_plot.wedge(x0,y1,radius0.4,start_anglecumsum(angle, include_zeroTrue),end_anglecumsum(angle),line_colorwhite,fill_colorcolor,legend_fieldCategory,sourceColumnDataSource(category_sales)
)
category_pie_plot.axis.visible False
category_pie_plot.grid.visible False3. 地区销售分布柱状图
# 数据聚合
region_sales df.groupby(Region)[Sales].sum().reset_index()
region_source ColumnDataSource(region_sales)# 绘制柱状图
region_bar_plot figure(titleSales by Region,x_rangeregion_sales[Region],x_axis_labelRegion,y_axis_labelTotal Sales,toolspan,box_zoom,reset
)
region_bar_plot.vbar(xRegion,topSales,width0.5,colorblue,sourceregion_source
)添加交互控件
1. 滑块控件按销售额过滤
from bokeh.models import Slider# 创建滑块
sales_slider Slider(titleMinimum Sales Filter,start100,end2000,value100,step100
)# 滑块回调函数
def update_data(attr, old, new):filtered_data df[df[Sales] sales_slider.value]updated_monthly_sales filtered_data.groupby(Month)[Sales].sum().reset_index()monthly_sales_source.data updated_monthly_salesupdated_region_sales filtered_data.groupby(Region)[Sales].sum().reset_index()region_source.data updated_region_salessales_slider.on_change(value, update_data)2. 下拉菜单按类别过滤
from bokeh.models import Select# 创建下拉菜单
category_select Select(titleSelect Category,valueAll,options[All] list(df[Category].unique())
)# 下拉菜单回调函数
def filter_category(attr, old, new):filtered_data df[df[Category] category_select.value] if category_select.value ! All else dfupdated_monthly_sales filtered_data.groupby(Month)[Sales].sum().reset_index()monthly_sales_source.data updated_monthly_salesupdated_region_sales filtered_data.groupby(Region)[Sales].sum().reset_index()region_source.data updated_region_salescategory_select.on_change(value, filter_category)构建仪表盘布局
利用 Bokeh 的 layout 布局工具将图表和控件组合在一起
from bokeh.layouts import column, row
from bokeh.io import curdoc# 布局
dashboard column(row(category_select, sales_slider),trend_plot,row(category_pie_plot, region_bar_plot)
)# 添加到文档
curdoc().add_root(dashboard)
curdoc().title Sales Dashboard启动 Bokeh 服务
将上述代码保存为 dashboard.py 文件然后在终端运行以下命令
bokeh serve --show dashboard.py浏览器将自动打开您可以通过滑块和下拉菜单动态过滤数据并实时查看图表的更新。 总结
通过本次实战我们完成了一个交互式仪表盘的开发展示了 Bokeh 的以下强大功能
快速创建各种图表折线图、饼图、柱状图。利用控件滑块、下拉菜单动态过滤数据。构建多视图仪表盘并实时更新。
下一步您可以尝试
将仪表盘部署到云端让更多用户访问。添加更多控件和图表丰富数据分析维度。与 Flask 或 Django 集成构建完整的数据应用。
赶快用 Bokeh 动手构建属于自己的交互式数据可视化项目吧