Dash - полностью нулевой - это не объект (оценка 'figure.data') - PullRequest
1 голос
/ 22 июня 2019

Нужна помощь здесь.Имейте приложение 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

Это мой код фляги питона

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)

1 Ответ

0 голосов
/ 22 июня 2019

Я заменил фиктивный фрейм данных, поскольку у меня нет доступа к вашей базе данных.Код запускается и правильно отображает график с моим фреймом данных, поэтому я сильно подозреваю, что с кодом ETL что-то не так.

Ваше сообщение об ошибке сообщает, что секция data реквизита figure равна null, что также заставляет меня думать, что что-то пошло не так с процессом ETL.Попробуйте проверить содержимое каждого шага по пути и посмотреть, если в какой-то момент вы где-то получите значение None.

...