这里需要一些帮助。有一个Flask应用程序正在引发此错误,并且不知道如何改进此错误。任何帮助深表感谢!似乎是从绘图应用程序如何使用反应并将事物呈现到DOM的方式中出现了一些错误。我正在做的是将一些数据保存到数据库中,并从数据库中创建一个图形,该图形显示必须由应用程序相应地呈现到DOM中的索引。
这是整个错误:
TypeError: null is not an object (evaluating 'figure.data')
plot — Graph.react.js:108
componentWillReceiveProps — Graph.react.js:230
Zf — react-dom@16.8.6.min.js:67:396
qg — react-dom@16.8.6.min.js:95:339
Qg — react-dom@16.8.6.min.js:144:296
Rg — react-dom@16.8.6.min.js:145:171
Sc — react-dom@16.8.6.min.js:158:112
Z — react-dom@16.8.6.min.js:156:495
Kc — react-dom@16.8.6.min.js:155
ya — react-dom@16.8.6.min.js:153:188
enqueueSetState — react-dom@16.8.6.min.js:202:412
setState — react@16.8.6.min.js:20:449
handleChange — connect.js:302
handleChange
dispatch — createStore.js:173
handleResponse — index.js:742
handleJson — index.js:913
promiseReactionJob
这是我的python flask代码
import dash
from dash.dependencies import Output, Input
#Event
import dash_core_components as dcc
import dash_html_components as html
import plotly
import random
import plotly.graph_objs as go
from collections import deque
import sqlite3
import pandas as pd
import time
#popular topics: google, olympics, trump, gun, usa
app = dash.Dash(__name__)
app.layout = html.Div(
[ html.H2('Live Twitter Sentiment'),
dcc.Input(id='sentiment_term', value='olympic', type='text'),
dcc.Graph(id='live-graph', animate=False),
dcc.Interval(
id='graph-update',
interval=1*1000
),
]
)
@app.callback(Output('live-graph', 'figure'),
[Input(component_id='sentiment_term', component_property='value')],
# events=[Event('graph-update', 'interval')]
)
def update_graph_scatter(sentiment_term):
try:
conn = sqlite3.connect('twitter.db')
c = conn.cursor()
df = pd.read_sql("SELECT * FROM sentiment WHERE tweet LIKE ? ORDER BY unix DESC LIMIT 200", conn ,params=('%' + sentiment_term + '%',))
df.sort_values('unix', inplace=True)
df['sentiment_smoothed'] = df['sentiment'].rolling(int(len(df)/2)).mean()
df['date'] = pd.to_datetime(df['unix'],unit='ms')
df.set_index('date', inplace=True)
df = df.resample('1min').mean()
df.dropna(inplace=True)
X = df.index
Y = df.sentiment_smoothed
data = plotly.graph_objs.Scatter(
x=X,
y=Y,
name='Scatter',
mode= 'lines+markers'
)
return {'data': [data],'layout' : go.Layout(xaxis=dict(range=[min(X),max(X)]),
yaxis=dict(range=[min(Y),max(Y)]),
title='Term: {}'.format(sentiment_term))}
except Exception as e:
with open('errors.txt','a') as f:
f.write(str(e))
f.write('\n')
if __name__ == '__main__':
app.run_server(debug=True)
答案 0 :(得分:0)
由于我无权访问您的数据库,因此我替换了一个虚拟数据框。该代码运行并正确显示了与我的数据框对应的图形,因此我强烈怀疑ETL代码是否有问题。
您的错误消息报告data
道具的figure
部分为null
,这也让我认为ETL流程出了点问题。尝试检查整个过程中每个步骤的内容,看看是否在某个时候以None
值结尾。