朋友们,我正在使用dash应用程序调用一个包含大约250000个值和351列的大型数据集,这样我就可以显示它,但是当我运行一个应用程序时,它需要很长时间才能运行,我认为这是因为我调用的数据来自另一个我用来收集数据的应用程序Redcap。现在我想知道是否有一个聪明的更好的方法,使我的应用程序运行更快,即使数据来自不同的应用程序。请参见下面的代码:
import dash
import dash_core_components as dcc
import dash_html_components as html
import pandas as pd
from redcap import Project
import pandas as pd
#redcap api and key
api_url = "enter link"
api_key = "enter key"
project = Project(api_url, api_key)
#call data from redcap
def data():
df = project.export_records(format="df", df_kwargs={"index_col": project.field_names[1]})
return df
df = data()
#generate table
def generate_table(dataframe, max_rows=10):
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='US Agriculture Exports (2011)'),
generate_table(df)
])
if __name__ == '__main__':
app.run_server(debug=True)
请协助我如何使应用程序运行更快,因为我调用数据的部分正在减慢它
这里有几件事:
1)用
project.export_records
从redcap导出数据可能是不必要的步骤。我不能百分之百确定您正在使用的数据结构,但我建议将对象转换为pandas数据帧–pandas处理结构化数据的速度非常快。你知道吗2)假设您不打算显示所有数据,我建议将数据帧的大小限制为所需的最小大小。你知道吗
3)为数据帧生成html的计算量很大,而且有点循环,依赖于索引。我将对那里的代码做以下更改:
4)或者,我建议使用Plotly的内置datatable。它是一个比典型的表更具交互性的对象+它允许非常整洁的排序和查询。datatable的数据输入是一个类似json的字典,因此一旦数据被访问,速度就会提高。你知道吗
5)同样,我建议只向应用程序加载所需的数据。我无法想象350个字段对任何人都有用——同样,250000行。你知道吗
相关问题 更多 >
编程相关推荐