[英]Python Bokeh - How to update calculation results in Data Table using Slider?
我有一个数据列表,我想使用前 X 个数据点运行一些统计数据。 X 可以是 12 到最大数据数之间的任何整数。 我想使用 Bokeh Slider 来控制 X 的值。输出是一个 Bokeh 数据表。 每个统计信息代表一列。 问题是我的代码不会更新表格。
为了简化我的问题,我使用 [0,1,2,3, ...,49](按顺序排列 50 个数字)作为数据列表。 我想计算两个基本统计数据:(1)计数:观察次数,以及(2)平均值:所有观察的平均值。 Slider 的默认值是最大点,即 50。如果我将值更改为 10,我应该会看到 Count = 10 和 Average = 5(= 0 到 10 的平均值)。
import pandas as pd
from bokeh.io import show, output_file
from bokeh.models import Slider, ColumnDataSource
from bokeh.models.widgets import DataTable, TableColumn
from bokeh.layouts import column
output_file('Slider_Controlled_Calculation.html')
sample_data = [i for i in range(50)]
max_count = len(sample_data)
partial_data = sample_data[:]
df_table = pd.DataFrame(columns = ['Count', 'Average'])
df_table['Count'] = [len(partial_data)]
df_table['Average'] = [sum(partial_data) / len(partial_data)]
mySource = ColumnDataSource(data=df_table)
# Define a callback
def update_table(attr, old, new):
i = slider.value
partial_data = sample_data[:i]
df_table['Count'] = [len(partial_data)]
df_table['Average'] = [sum(partial_data) / len(partial_data)]
columns = [TableColumn(field=Ci, title=Ci) for Ci in df_table.columns]
data_table = DataTable(source=mySource, columns=columns, width=400, height=280)
# Create a slider
slider = Slider(start = 12, end = max_count, step = 1, value = max_count, title = 'Select Calc Range')
slider.on_change('value', update_table)
layout = column(slider, data_table)
show(layout)
from bokeh.io import curdoc
from bokeh.layouts import column
from bokeh.models import Slider, ColumnDataSource, DataTable, TableColumn
N = 50
sample_data = list(range(N))
def get_new_data(i):
partial_data = sample_data[:i]
return dict(Count=[len(partial_data)],
Average=[sum(partial_data) / len(partial_data)])
ds = ColumnDataSource(data=get_new_data(None))
def update_table(attr, old, new):
ds.data = get_new_data(new)
columns = [TableColumn(field=Ci, title=Ci) for Ci in ['Count', 'Average']]
data_table = DataTable(source=ds, columns=columns, width=400, height=280)
slider = Slider(start=12, end=N, step=1, value=N, title='Select Calc Range')
slider.on_change('value', update_table)
# `show` will not work with Python callbacks. You have to use `bokeh serve`.
curdoc().add_root(column(slider, data_table))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.