Столбцы диаграммы Pandas DataFrame с использованием Holoviews DynamicMap, обслуживаемые через Flask

Следуя этому руководству, я пытаюсь визуализировать набор данных, используя Holoviews вместо Bokeh (пример данных доступен здесь в виде CSV-файла), предоставляя результаты с помощью Flask. Я решил использовать Flask, а не Bokeh Server, потому что я создаю более крупный рабочий процесс, используя первый.

Мой код следующий:

from flask import Flask, render_template, request
import numpy as np
import pandas as pd
from datetime import datetime
from bokeh.embed import components
from bokeh.io import curdoc
import holoviews as hv
hv.extension("bokeh")

app = Flask(__name__)

renderer = hv.renderer('bokeh')
infile = "./uploads/test.csv"

def loadRegionData(regionProperty, **kwargs):
    df = pd.read_csv(infile, parse_dates=['Datetime'])
    df1 = df[regionProperty]
    df = pd.concat([df['Datetime'],df1], axis=1)

    return hv.Curve(df)

colNames = ((pd.read_csv(infile, nrows=1)).drop(['Datetime'], axis=1)).columns.values

dmap = hv.DynamicMap(loadRegionData, kdims='RegionProperty').redim.values(RegionProperty=colNames)

hvplot = renderer.get_plot(dmap)
plot = hvplot.state
plot.name = 'plot'
curdoc().add_root(plot)

@app.route("/")
def index():
    # Embed plot into HTML via Flask Render
    script, div = components(plot)
    return render_template("index.html", script=script, div=div)

if __name__ == '__main__':
    app.run(port=5000, debug=True)

Я сталкиваюсь со следующими (не связанными проблемами)

  1. Когда я развертываю с помощью Flask, раскрывающиеся списки для выбора столбцов не отображаются. Я подозреваю, что это потому, что я не возвращаю/не ссылаюсь на правильные переменные из функции index() в свой index.html:

<html>
<head>
    <link
        href="http://cdn.bokeh.org/bokeh/release/bokeh-1.0.2.min.css"
        rel="stylesheet" type="text/css">
    <link
        href="http://cdn.bokeh.org/bokeh/release/bokeh-widgets-1.0.2.min.css"
        rel="stylesheet" type="text/css">

    <script src="http://cdn.bokeh.org/bokeh/release/bokeh-1.0.2.min.js"></script>
    <script src="http://cdn.bokeh.org/bokeh/release/bokeh-widgets-1.0.2.min.js"></script>

</head>
<body>
    <h1>Holoview test</h1>
    {{ script|safe }}
    {{ div|safe }}
</body>
</html>

Как я могу заставить Flask также отображать раскрывающийся список?

  1. Несвязанная проблема, которую я обнаружил при тестировании этого приложения с помощью Bokeh Server и которая также может возникнуть в реализации Flask, заключается в том, что масштабы не настраиваются динамически в зависимости от выбора столбца. Возможно, это может быть отдельным вопросом на SO, но я решил включить его здесь, чтобы все было вместе.

person avg    schedule 10.12.2018    source источник
comment
Привет, ты продвинулся с этим?   -  person Andi Anderle    schedule 13.06.2019
comment
К сожалению, нет, @AndiAnderle. Мне пришлось приостановить этот небольшой проект, потому что в то время я не мог заставить его работать. Я хотел бы услышать, если вы найдете решение. Взгляните на github.com/QuantStack/voila — я только что прочитал об этом, и это может сработать.   -  person avg    schedule 14.06.2019