使用管道数据过滤构建 holoviz 仪表板

问题描述

我正在查看 Holoviz 教程练习,以使用 Panel 构建仪表板:https://holoviz.org/tutorial/exercises/Building_a_Dashboard.html

我希望将最后一个练习的解决方案转化为使用 piped data filtering方法,以便 year_df = df[df.time.dt.year == year].compute() 每次滑块值更新时,语句只需计算一次。

提供的解决方案如下(注意数据过滤在三个不同的地方是如何发生的):

year_slider = pn.widgets.IntSlider(name='Year',start=2000,end=2018,value=2000)

@pn.depends(year_slider.param.value)
def title_fn(year):
    return '## Strongest Earthquakes in the Year {year}'.format(year=year)

@pn.depends(year_slider.param.value)
def strongest_earthquakes_fn(year):
    year_df = df[df.time.dt.year == year].compute()
    return year_df.sort_values('mag',ascending=False).iloc[:5][['time','place','mag']].reset_index(drop=True)

@pn.depends(year_slider.param.value)
def gmap_fn(year):
    yearly_df = df[(df.time.dt.year == year)].compute()
    index = np.argmax(yearly_df.mag.values)
    strongest = yearly_df.iloc[index]
    lon,lat = strongest.longitude,strongest.latitude
    return pn.pane.HTML("""
    <iframe width="300" height="300" src="https://maps.google.com/maps?q={lat},{lon}&z=6&output=embed"
    frameborder="0" scrolling="no" marginheight="0" marginwidth="0"></iframe>
    """.format(lat=lat,lon=lon),height=300,width=300)

@pn.depends(year_slider.param.value)
def plot_fn(year):
    year_df = df[df.time.dt.year == year].compute()
    return hv.Violin(year_df,'type',('mag','Magnitude'))

logo = pn.panel(logo_url,width=200)
equation = pn.pane.LaTeX(equation_string)

header = pn.Row(title_fn,pn.layout.HSpacer(),logo)

body = pn.Row(

    pn.Column('### Strongest Earthquakes',strongest_earthquakes_fn),pn.Column('### Map',gmap_fn),pn.Column('### Magnitude Plot',plot_fn)
)

pn.Column(header,year_slider,body)

在这是我到目前为止所得到的:

dataset = hv.Dataset(df)
year_slider2 = pn.widgets.IntSlider(name='Year',value=2000)

def filter_ds_fn(ds,year):
    year_df = dataset.data[dataset.data.time.dt.year == year].compute()
    return hv.Dataset(year_df)

filtered_ds = dataset.apply(filter_ds_fn,year=year_slider2.param.value)

def plot_fn(ds):
    year_df = ds.data
    return hv.Violin(year_df,'Magnitude'))

dynamic_plot = filtered_ds.apply(plot_fn)

有两件事我想不通:

  1. 如何显示来自 DynamicMap 的数据框,即上面解决方案中的 strongest_earthquakes_fn 等价物。特别是,filtered_ds.data 不是我所期望的(它是 OrderedDict 而不是 DataFrame)。
  2. 如何从 DynamicMap 显示降价,即上面解决方案中的 gmap_fn 等价物。

非常感谢建议!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)