Базовый анализ данных в Twitter с помощью Python

1656636489 bazovyj analiz dannyh v twitter s pomoshhyu python

Лукас Кохорст

После создания бота Free Wtr с помощью Tweepy и Python и этого кода я хотел увидеть, как пользователи Twitter воспринимают бота и какие у них настроения. Поэтому я создал простую программу анализа данных, которая берёт заданное количество твитов, анализирует их и отображает данные на диаграмме рассеяния.

Oi2DdKx2eKA9W5Pc8KtXO3aEFBWDVOvYdNiW
Автор изображения.

Настройка

Мне пришлось установить несколько пакетов, чтобы создать это: Твипи, Tkinter, Textblob и matplotlib. Вы можете установить каждый из них с помощью менеджера пакетов pip. Например:

pip install tweepy

или вы можете клонировать в репозитории Github таким образом.

git clone  textblobpython setup.py install

Дальше вам нужно будет создать новый Python файл и импортируйте следующие пакеты.

import tweepy #The Twitter APIfrom Tkinter import * #For the GUIfrom time import sleepfrom datetime import datetimefrom textblob import TextBlob #For Sentiment Analysisimport matplotlib.pyplot as plt #For Graphing the Data

Учетные данные Twitter

Теперь нам нужно привязать аккаунт Twitter к нашему сценарию. Если у вас его нет, создайте его.

Перейдите на страницу apps.twitter.com и войдите в свой аккаунт. Создайте приложение Twitter и сгенерируйте ключ потребителя, секрет потребителя, маркер доступа и секрет маркера доступа.

Под операторами импорта сохраните свои учетные данные в переменных, а затем используйте второй блок кода для проверки подлинности учетной записи с помощью Tweepy.

consumer_key = 'consumer key'consumer_secret="consumer secrets"access_token = 'access token'access_token_secret="access token secret"
auth = tweepy.OAuthHandler(consumer_key, consumer_secret)auth.set_access_token(access_token, access_token_secret)api = tweepy.API(auth)

Если вы хотите проверить, правильно ли аутентифицирована ваша учетная запись, вы можете просто напечатать свое имя пользователя на консоли.

user = api.me()print (user.name)

Создание GUI

Для интерфейса мы будем использовать две метки: одну для Поиск а другой для объем выборки или количество твитов для анализа. Нам также понадобится кнопка «Отправить», чтобы по нажатию мы могли вызвать наш getData функция.

root = Tk()
label1 = Label(root, text="Search")E1 = Entry(root, bd =5)
label2 = Label(root, text="Sample Size")E2 = Entry(root, bd =5)
submit = Button(root, text ="Submit", command = getData)

Чтобы компьютер знал, что GUI на экране, нам нужно пакет наши этикетки, а затем петля корневой дисплей.

label1.pack()E1.pack()
label2.pack()E2.pack()
submit.pack(side =BOTTOM)
root.mainloop()

Просто запустив этот код, вы должны увидеть окно, которое выглядит примерно так:

7Zb3LMvzGDc1Aryk2mlEMqwglNSEHBKsxIJ-

Однако, когда текст вводится в метки или подать кнопка нажата, ничего не происходит. Мы должны собрать данные.

Анализ твитов

Во-первых, мы должны ввести текст в метки.

def getE1():    return E1.get()
def getE2():    return E2.get()

Теперь мы готовы к кодированию getData функция. Теперь весь код находится в этой функции:

def getData():    #Code

Нам нужно использовать GetE1() и GetE2() функции. Эти хранят наши Поиск и объем выборки в переменных, которые мы можем прокрутить.

getE1()    keyword = getE1()
getE2()    numberOfTweets = getE2()    numberOfTweets = int(numberOfTweets)

Для сохранения наших данных мы можем использовать списки. Один список предназначен для полярности или настроения твитов, а другой для номера твита (чтобы мы могли построить данные на графике).

    polarity_list = []    numbers_list = []    number = 1

Количество твитов должно быть объявлено как 1, поскольку значение по умолчанию равно 0.

Теперь мы можем начать просматривать твиты и анализировать их. Используя TextBlob, мы можем найти настроения каждого твита и сохранить их в переменной polarity . Затем мы можем добавить эту переменную к нашей polarity_list вместе с добавлением номера в наш number_list.

analysis = TextBlob(tweet.text)analysis = analysis.sentimentpolarity = analysis.polarity            polarity_list.append(polarity)            numbers_list.append(number)number = number + 1

Берем этот код и, используя a for петля и try мы проверяем количество твитов для поиска ключевое слово.

for tweet in tweepy.Cursor(api.search, keyword, lang="en").items(numberOfTweets):        try:            analysis = TextBlob(tweet.text)            analysis = analysis.sentiment            polarity = analysis.polarity            polarity_list.append(polarity)            numbers_list.append(number)            number = number + 1
except tweepy.TweepError as e:            print(e.reason)
except StopIteration:            break

Графическая диаграмма рассеяния

Чтобы построить график нашей диаграммы рассеяния с помощью matplotlib, сначала мы должны определить ось

axes = plt.gca()axes.set_ylim([-1, 2])

затем построить наши списки данных.

plt.scatter(numbers_list, polarity_list)

Основная информация отображается в поле. Чтобы показать общее настроение собранных нами твитов, мы вычисляем среднее значение всех собранных твитов. Кроме того, поскольку мы отображаем настроение в определенное время, мы хотим отобразить дату и время.

averagePolarity = (sum(polarity_list))/(len(polarity_list))averagePolarity = "{0:.0f}%".format(averagePolarity * 100)time  = datetime.now().strftime("At: %H:%M\nOn: %m-%d-%y")
plt.text(0, 1.25, "Average Sentiment:  " + str(averagePolarity) + "\n" + time, fontsize=12, bbox = dict(facecolor="none", edgecolor="black", boxstyle="square, pad = 1"))
dqJLeSkMRD4JgICY25kJ6BzmEGboBKCEtiyh

Для названия мы можем использовать это

plt.title("Sentiment of " + keyword + " on Twitter") plt.xlabel("Number of Tweets")plt.ylabel("Sentiment")

и наконец использовать plot.show() чтобы отобразить график.

vIddFG0xozfQTtwIstdIRKg5zCzYVQTZCtaE

Пример

Проверяю это для себя Бесплатный Wtr бот, настроение было заоблачное!

IOQQg59OGPt-yHb7lsOewrUtnwEsxXFI5ELn
Размер выборки 250 твитов

как для Дональд Трамп, Я не могу сказать то же самое:

RYhlPLyIbna6XdhRUoV7TT2x8yX6t7Yi3Mfk

Вот полный исходный код на Github.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *