首页 > 解决方案 > Django 上的散景 + Holoviews + Datashader

问题描述

我们正在尝试构建一个 Web 应用程序——仪表板——在 DJango 上使用 Bokeh + Holoviews + Datashader 显示不同的交互(包括点击回调、获取新数据等)图表。

由于数据非常大并且可能有 10+ 百万个点,我们正在使用数据着色器。我们可以从 Bokeh + Holoviews + Datashader 从后端获得一个来自后端的静态 html,并使用 Django REST api 将其传递给前端:

视图.py

import numpy as np
import holoviews as hv
import datashader as ds
from dask import dataframe as dd
from bokeh.io import show, curdoc
from bokeh.layouts import layout
from bokeh.models import Slider, Button
from holoviews.operation.datashader import datashade

renderer = hv.renderer('bokeh').instance(mode='server')

def home(request):
    def plot_info(y_col):
        from vaex import dataframe as datafm
        df_dask = dd.read_parquet(r"C:\Dropbox\1mln.parquet", engine='pyarrow',
                                  columns=['nest11', 'nest21', 'first_element', 'second_element', 'timestamp'])
        df_dask['timestamp'] = dd.to_datetime(df_dask.timestamp, unit='ns')
        return hv.Curve((df_dask['timestamp'], df_dask[y_col]))


    def bearer():
        stream = hv.streams.Stream.define('y-axis', y_col="nest11")()
        dmap = hv.DynamicMap(plot_info, streams=[stream])
        vmap = datashade(dmap).opts(width=1200, height=600, responsive=True)
        html = renderer.static_html(vmap)

        return html
context = {
        'seq_num': bearer(),

  }

return render(request, 'home/welcome.html', context)

工作正常。但是,由于我们使用了 Datashader,因此当我们放大时,数据会在静态 html 中聚合和转换,我们不会从端侧获得我们正在寻找的数据。为此,我的猜测是我们需要 Bokeh 服务器。

我的疑问是:(因为大型数据集必须使用 Datashader)

  1. 我如何将 Bokeh 服务器与 Django REST api 一起使用?另外我想在前端有一个自定义的 html 页面,所以我使用 Django 模板。
  2. 使用 Bokeh + Datashader 是否可以替代 Django 进行 REST apis 开发?
  3. Bokeh 是否支持 REST API?如何 ?请分享一些 REST API 和回调的例子?例如,我有一个仪表板,当我单击一个图表时,我应该获取有关该图表的更多详细信息并在仪表板中播放这些图表?下拉等

标签: djangobokehholoviewsdatashader

解决方案


  1. 我强烈建议使用基于 Bokeh 并支持 HoloViews 的 Panel 对于 Django 集成,请查看这些文档

  2. / 3. Bokeh 服务器建立在 Tornado 之上,这意味着它可以轻松扩展,例如在 Panel 的下一版本 (0.10) 中,您将能够轻松注册自定义 REST API 以与您的应用程序一起提供服务。由于它尚未发布,因此还没有任何示例,但我会及时处理一些示例,以便在大约两周后发布的下一个版本中发布。


推荐阅读