Я новичок в flask и python и создаю проект, который извлекает данные из Twitter для выполнения анализа настроений по поисковым запросам, используя TextBlob для отображения некоторой визуальной статистики. Я сохранил некоторые статистические данные в виде переменных (процент положительных, отрицательных и нейтральных твитов) и пытаюсь передать их в функцию для создания круговой диаграммы. Эта функция оформлена так, что она передает полученный файл PNG на страницу HTML. Кажется, у меня проблемы с передачей этих переменных в мою функцию построения графиков.
Вот часть моего анализа настроений:
def sentiment(userinput):
# creating object of TwitterClient Class
api = TwitterClient(userinput)
# calling function to get tweets
#searchterm = input("Enter query: ")
tweets = api.get_tweets(query=api.searchterm, count=10)
# picking positive tweets from tweets
ptweets = [tweet for tweet in tweets if tweet['sentiment'] == 'positive']
# percentage of positive tweets
ptweet_analyses_pie = 100 * len(ptweets) / len(tweets)
# picking negative tweets from tweets
ntweets = [tweet for tweet in tweets if tweet['sentiment'] == 'negative']
# percentage of negative tweets
ntweets_analyses_pie = (100 * len(ntweets) / len(tweets))
# percentage of neutral tweets
#leftoverTweets = tweets - ntweets - ptweets
nut_tweet_analyses_pie = (100 * (len(tweets) - len(ntweets) - len(ptweets)) / len(tweets))
pie_chart_img = pie_chart(ptweet_analyses_pie, nut_tweet_analyses_pie, ntweets_analyses_pie)
return ptweets, ntweets, ptweet_analyses, ntweets_analyses, nut_tweet_analyses, pie_chart_img
Вот где вызывается чувство ():
@app.route('/render_Data', methods = ['GET', 'POST'])
def render_Data():
if request.method == 'POST':
tweets=request.form['tweets']
ptweets, ntweets, ptweet_analyses, ntweets_analyses, nut_tweet_analyses, pie_chart_img = sentiment(tweets)
return render_template('render_Data.html', ptweets = ptweets, ntweets = ntweets, ptweet_analyses = ptweet_analyses,
ntweets_analyses = ntweets_analyses, nut_tweet_analyses = nut_tweet_analyses, pie_chart_img = pie_chart_img)
Здесь я делаю pie_chart.png и даю ему URL, который будет отображаться как html без сохранения в static.
@app.route('/pie_chart.png')
def pie_chart(x,y,z):
labels = 'Positive', 'Negative', 'Neutral'
sizes = [x,y,z]
colors = ['gold', 'pink', 'lightskyblue']
explode = (0, 0, 0) # explode 1st slice
# Plot
plt.axis('equal')
plt.pie(sizes, explode=explode, labels=labels, colors=colors,
autopct='%1.1f%%', shadow=True, startangle=140)
img = BytesIO()
plt.savefig(img)
response = make_response(img.getvalue())
response.mimetype = 'image/png'
return response
И, наконец, HTML:
<img src='{{url_for('pie_chart')}}'>
К сожалению, я получаю сообщение об ошибке при попытке отобразить результаты: pie_chart () отсутствует 3 обязательных позиционных аргумента: 'x', 'y' и 'z'
Заранее спасибо! Я знаю, что мой код немного элементарен, так как я все еще нахожусь на начальных этапах кодирования, поэтому, пожалуйста, будьте спокойны в своем ответе!