簡體   English   中英

使用新數據框更新 Python Dash 應用程序

[英]Python Dash App updating with new dataframe

我是破折號的新手,並試圖制作一個基本表格以顯示在 IP 上供每個人查看。 這可以防止需要電子郵件或將數據放置在任何特定的地方。 我使用以下代碼從文檔中創建一個非常簡單的破折號表,但我想定期更新儀表板。 為此,我使用任務調度程序每 30 分鍾運行一次代碼,殺死舊實例。 這樣,當“data.csv”更新時,表中將顯示一個新的數據框。

import dash
import dash_core_components as dcc
import dash_html_components as html
import pandas as pd

df = pd.read_csv('data.csv')


def generate_table(dataframe, max_rows=30):
    return html.Table(
        # Header
        [html.Tr([html.Th(col) for col in dataframe.columns])] +

        # Body
        [html.Tr([
            html.Td(dataframe.iloc[i][col]) for col in dataframe.columns
        ]) for i in range(min(len(dataframe), max_rows))]
    )


external_stylesheets = ['https://codepen.io/chriddyp/pen/bWLwgP.css']

app = dash.Dash(__name__, external_stylesheets=external_stylesheets)

app.layout = html.Div(children=[
    html.H4(children='Title'),
    generate_table(df, max_rows=len(df))
])


if __name__ == '__main__':
    ADDRESS='100.100.100.100'  #ipv4 address for computer code is run on
    PORT=int(1000)
    app.run_server(debug=True, host=ADDRESS, port=PORT)

我的問題是,盡管重新啟動了實例並更改了 csv,但只會顯示原始 csv 數據。 我只能通過更改端口並啟動新應用程序來修復它,這不是我想要的選項。 我怎樣才能讓同一個應用程序更新新的 csv 信息?

我認為您不需要每隔幾分鍾殺死“舊”應用程序實例並運行一個新應用程序實例。 您只需啟動一次應用程序並將“更新間隔”設置為所需的時間(以毫秒為單位),以便應用程序在保持運行時在回調函數中下載新數據。

此代碼演示了這一點(Dash v1.6.0):

import dash
import dash_core_components as dcc
import dash_html_components as html
import dash_table
import pandas as pd

app = dash.Dash(__name__)

df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/solar.csv')

app.layout = html.Div([
      html.H4('Dashboard'),
      dcc.Interval('graph-update', interval = 2000, n_intervals = 0),
      dash_table.DataTable(
          id = 'table',
          data = df.to_dict('records'),
          columns=[{"name": i, "id": i} for i in df.columns])])

@app.callback(
        dash.dependencies.Output('table','data'),
        [dash.dependencies.Input('graph-update', 'n_intervals')])
def updateTable(n):
    df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/solar.csv')
    return df.to_dict('records')

if __name__ == '__main__':
     app.run_server(debug=True, port=10451)

無需再次創建圖形即可更新數據。 這減少了渲染延遲。

@app.callback(
    Output(component_id='graph_map', component_property='figure'),
    Input(component_id='scale_slider', component_property='value'),
    State(component_id='graph_map', component_property='figure')
)
def update_output(set_scale, map_fig):
    df = df_original[df_original['scale'] == set_scale]
    
    map_fig['data'][0]['locations'] = df['cell_id'].tolist()
    map_fig['data'][0]['z'] = df['color_id'].tolist()

    return map_fig

cell_id - 列名,用於 choropleth_mapbox 'locations'
color_id - 列名,在 choropleth_mapbox 'color' 中使用

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM