0

最近我开始使用 dash 进行数据可视化,我正在使用 qunadle API 分析股票数据,但无法使用这样的 for 循环获得多个下拉仪表板显示每个数据集的选项

import dash
import dash_core_components as dcc
import dash_html_components as html
from dash.dependencies import Input, Output
import pandas as pd
import quandl
import plotly.graph_objs as go
import auth

api_key = auth.key

def easy_analysis(quandl_datasets):

    try:
        for dataset in quandl_datasets:
            df = quandl.get(dataset,authtoken=api_key)
            df = df.reset_index()

            app = dash.Dash(__name__)

            app.layout = html.Div([
                html.H3(dataset),
                dcc.Dropdown(
                        id=dataset,
                        options=[{'label' : s,'value' : s} for s in df.columns[1:]],
                        value=['Open'],
                        multi=True
                    ),
                dcc.Graph(id='dataset' + str(dataset))
            ])

            @app.callback(
                Output('dataset' + str(dataset),'figure'),
                [Input(dataset,'value')]
            )

            def draw_graph(dataset):
                graphs = []

                for column in dataset:
                    graphs.append(go.Scatter(
                        x=list(df.Date),
                        y=list(df[column]),
                        name=str(column),
                        mode='lines'
                    ))

                return {'data' : graphs}

        app.run_server(debug=True)

    except Exception as e:
        print(str(e))


easy_analysis(['NSE/KOTAKNIFTY','NSE/ZENSARTECH','NSE/BSLGOLDETF'])

我期望的输出有多个仪表板,其中一个接一个地包含所有下拉选项。但是我得到的结果是,easy_analysis() 函数列表中的最后一项只有一个仪表板

easy_analysis(['NSE/KOTAKNIFTY','NSE/ZENSARTECH','NSE/BSLGOLDETF']), considered only 'NSE/BSLGOLDETF'

我应该怎么做才能解决这个问题并获得列表中提供的每个数据集的多个仪表板。我还查看了 Dash 用户指南,但找不到我想要的东西。

但是,当只为一个带有 for 循环的数据集传递一个参数时,代码可以正常工作,并且图形会根据下拉菜单中选择的选项而变化。

代码在这里

4

1 回答 1

1

该代码不起作用,因为您在for循环的每次迭代中都重新定义了 Dash 应用程序。

即使您有三个数据集,您也只需定义一次 Dash 应用程序及其布局。

您可以向 Quandl API 发出三个请求,并且 - 如果可能的话 - 将所有内容保存在同一个 pandas Dataframe 中。

一个问题是您是想显示所有下拉列表和图表(即每个 Quandl 数据集的下拉列表 + 图表)还是只显示一个下拉列表和一个图表。我建议从第一种方法开始,因为它更容易。无论如何,对于第二种方法,您可以看看这个解决方案

于 2018-04-23T09:31:08.717 回答