python - Pandas 数据框和散景图未使用滑块小部件更新
问题描述
我正在尝试使用散景可视化从熊猫数据框中绘制摘要统计信息。我的目标是使用滑块过滤要绘制的数据并相应地更新绘图。但是,当我启动我的散景应用程序时,两者都没有发生。
这是我正在使用的一些模拟数据:-
Device,Column1,Column2,Column3,Column4,Hour,Day
aaa,98,59,56,57,22,Day one
aaa,29,10,22,14,15,Day one
aaa,21,4,72,25,13,Day one
aaa,87,87,13,83,1,Day one
aaa,41,46,81,25,9,Day one
aaa,85,42,16,12,15,Day one
aaa,73,5,32,19,12,Day one
aaa,84,16,30,34,5,Day one
aaa,28,11,46,63,15,Day one
aaa,50,86,83,48,17,Day one
aaa,74,37,79,48,19,Day one
aaa,40,88,67,79,17,Day one
bbb,1,19,34,6,2,Day one
bbb,5,26,75,25,13,Day one
bbb,27,1,10,84,19,Day one
bbb,62,87,4,51,2,Day one
bbb,71,24,66,6,9,Day one
bbb,49,75,18,67,7,Day one
bbb,51,15,74,35,12,Day one
bbb,38,94,65,32,8,Day one
bbb,23,1,21,26,2,Day one
bbb,83,67,76,7,1,Day one
bbb,87,25,5,86,12,Day one
bbb,58,28,33,71,22,Day one
bbb,18,8,16,13,14,Day one
bbb,89,20,71,39,19,Day one
bbb,60,22,69,79,10,Day one
bbb,93,9,9,9,12,Day one
bbb,76,34,60,21,21,Day one
bbb,39,37,52,23,15,Day one
bbb,45,87,61,96,20,Day one
ccc,92,96,29,97,8,Day one
ccc,62,72,83,45,15,Day one
ccc,42,58,28,94,12,Day one
ccc,45,76,78,24,18,Day one
ccc,58,11,33,55,8,Day one
ccc,4,14,86,9,2,Day one
ccc,21,22,2,78,22,Day one
ccc,11,3,33,41,6,Day one
ccc,57,96,72,48,10,Day one
ddd,28,59,23,66,13,Day one
ddd,62,93,71,42,11,Day one
ddd,6,96,67,50,19,Day one
ddd,4,61,28,29,7,Day one
ddd,71,80,78,2,13,Day one
ddd,59,88,19,56,5,Day one
eee,78,44,27,46,13,Day one
eee,70,54,62,31,14,Day one
eee,4,54,6,12,11,Day one
eee,49,82,37,10,1,Day one
eee,44,81,1,69,17,Day two
eee,59,60,19,9,11,Day two
eee,60,37,40,82,12,Day two
eee,8,17,26,52,18,Day two
eee,10,98,48,24,11,Day two
eee,79,85,73,54,19,Day two
eee,25,82,66,73,6,Day two
eee,8,50,21,28,18,Day two
eee,95,26,14,8,20,Day two
eee,57,22,77,68,5,Day two
eee,77,11,87,35,20,Day two
eee,13,13,16,19,17,Day two
fff,36,81,30,61,7,Day two
fff,24,66,75,94,9,Day two
fff,21,34,46,52,16,Day two
fff,44,92,2,40,0,Day two
fff,6,68,15,34,17,Day two
fff,41,68,16,57,12,Day two
fff,12,84,30,81,0,Day two
fff,42,8,38,43,2,Day two
fff,4,22,66,64,20,Day two
fff,95,37,96,36,21,Day two
fff,44,71,94,39,2,Day two
fff,7,69,28,4,0,Day two
fff,59,63,52,64,16,Day two
fff,29,3,24,83,14,Day two
fff,32,67,74,93,21,Day two
fff,6,73,15,49,14,Day two
fff,70,83,86,90,5,Day two
fff,16,73,82,72,2,Day two
fff,97,72,5,53,10,Day two
fff,36,83,12,58,12,Day two
fff,67,58,2,91,12,Day two
fff,19,81,28,64,11,Day two
fff,2,53,74,11,8,Day two
fff,68,27,78,8,19,Day two
fff,34,77,9,15,12,Day two
fff,50,51,23,88,22,Day two
fff,79,38,14,26,10,Day two
fff,4,41,50,85,9,Day two
fff,41,29,66,49,18,Day two
fff,34,3,51,17,5,Day two
fff,87,79,48,97,4,Day two
fff,66,41,51,16,12,Day two
fff,29,84,22,38,5,Day two
fff,51,50,87,29,2,Day two
fff,63,33,2,61,12,Day two
fff,38,6,20,86,1,Day two
fff,31,87,38,93,20,Day two
ggg,80,93,77,96,3,Day two
编辑
我已经修改了我的代码以添加其他功能,例如交换列,但我的问题仍然存在。我无法更新源数据以按小时过滤,然后相应地更新绘图。
from bokeh.util.sampledata import DataFrame
import numpy as np
import pandas as pd
from bokeh.io import curdoc, show
from bokeh.plotting import figure
from bokeh.layouts import row, column, widgetbox
from bokeh.palettes import Category20 as palette
from bokeh.models import Select,CustomJS, CheckboxButtonGroup, ColumnDataSource,IndexFilter,Slider,CDSView,WidgetBox ### Widgets
df = pd.read_csv("exampledata.csv")
#getting grouped means
grouped_devices=df.groupby(['Device','Day','Hour'])['Column1','Column2','Column3','Column4'].mean()
grouped_devices_counts=df.groupby(['Device','Day','Hour']).size()#get counts of devices
grouped_devices_counts=grouped_devices_counts.reset_index()
grouped_devices_counts = grouped_devices_counts.rename(columns= {0: 'Count'})#works
#merge
group_device_summary=pd.merge(grouped_devices,grouped_devices_counts, on=['Day','Hour','Device'])#works
hournum=11
group_device_summary_dayone=group_device_summary[(group_device_summary['Day']=="Day one")]
data=group_device_summary_dayone.to_dict()
source=ColumnDataSource(group_device_summary_dayone)
p=figure(toolbar_location="above")
# Add a circle glyph to the figure p
scatter=p.circle('Column1', 'Column2', source=source,color='red',legend_label='Day one')
handlerx = CustomJS(args=dict(scatter=scatter), code="""
scatter.glyph.x = {field: cb_obj.value};
""")
handlery = CustomJS(args=dict(scatter=scatter), code="""
scatter.glyph.y = {field: cb_obj.value};
""")
#slider=Slider(start=0,end=23, step=1,value=hournum)
sliderhour=Slider(start=0,end=23,step=1,value=hournum)
sliderhandler = CustomJS(
#### THIS IS THE PART I NEED HELP WITH ######
args=dict(source=source),code="""
data = source.data;
hournum=cb_obj.value;
newdata = group_device_summary_dayone[(group_device_summary_dayone['Hour']==hournum)];
source.data = newdata;
"""
)
selectx = Select(title="df-column:", options=list(group_device_summary_dayone.columns))
selectx.js_on_change('value', handlerx)
selecty = Select(title="df-column:", options=list(group_device_summary_dayone.columns))
selecty.js_on_change('value', handlery)
sliderhour.js_on_change('value',sliderhandler)
show(column(selectx,selecty,sliderhour,p))
谁能指出我需要修改哪些允许滑块功能更新我的数据框?
解决方案
推荐阅读
- kibana - 如何在kibana KQL中找到存在但为空的文件?
- azure - 如何访问 Azure 上的站点文件
- docker - 无法通过 HTTP 请求从单独的容器访问 Jenkins 容器
- r - 在 R 中读取向量的元素时出错
- sql - 下表的 SQL 查询
- node.js - 使用redis brpop时节点内存泄漏
- c# - Microsoft 安装程序项目错误
- awk - bash 或 awk - 从复杂数据集中生成报告
- python - 如何确保首先找到我的 python venv 中的包(在 PYTHONPATH 之前)
- javascript - 按下删除按钮不会删除项目而按下删除按钮不会删除项目的主要原因是什么?