Планируется, что в этом году в конкурсе данков (только что объявленном) примут участие два популярных и прославленных данкера и два относительно неизвестных новичка. Многие люди испытывают смешанные чувства по этому поводу (особенно учитывая, что многие думали, что трофей был «украден» у Аарона Гордона на прошлогоднем конкурсе данков). Давайте обратимся к twitter и python, чтобы узнать, как люди относятся к новой области…
Я использую пакет Tweepy для потоковой передачи твитов в свой анализатор и использую TextBlob для оценки настроения в каждом твите (т. е. полярность). Я также буду использовать пакет dataset для сохранения результатов атрибутов каждого твита в локальной базе данных SQLite. Для простоты я просто сравню среднюю полярность твитов, содержащих имена каждого участника.
import tweepy import tweepy.streaming as TS import dataset from textblob import TextBlob as TB # authenticate auth = tweepy.OAuthHandler(twitter_app_key, twitter_app_secret) auth.set_access_token(token_key, token_secret) api = tweepy.API(auth) tweetdb = dataset.connect("sqlite:///tweets3.db")
Примечание: приложение должно быть зарегистрировано в Твиттере для аутентификации, чтобы получить доступ к API потоковой передачи в Твиттере.
Далее, класс StreamListener из tweepy должен быть подклассом и настроен для наших целей:
# stream listener class class streamListener(TS.StreamListener): def on_status(self, status): if hasattr(status, ‘retweeted_status’): return print(status.text) description = status.user.description loc = status.user.location text = status.text coords = status.coordinates if coords is not None: coords = json.dumps(coords) name = status.user.screen_name user_created = status.user.created_at followers = status.user.followers_count id_str = status.id_str created = status.created_at retweets = status.retweet_count bg_color = status.user.profile_background_color blob = TB(text) sentim = blob.sentiment polar = sentim.polarity subj = sentim.subjectivity table = tweetdb[“tweets3”] table.insert(dict( user_description = description, user_location = loc, text = text, coordinates = coords, user_name = name, user_created = user_created, user_followers = followers, id_str = id_str, created = created, retweets = retweets, user_bg_color = bg_color, polarity = polar, subjectivity = subj, )) def on_error(self, status_code): if status_code == 420: return False
Примечание: мы стараемся не анализировать твиты, которые являются просто ретвитами от кого-то другого, поскольку это может создать нежелательную предвзятость.
Затем создайте экземпляр класса и предоставьте список строк для фильтрации соответствующих твитов из потока твитов (в данном случае имен участников).
# instantiate our class and listen to tweets streamer = streamListener() stream = tweepy.Stream(auth = api.auth, listener = streamer) track_terms = [“aaron gordon”, “derrick jones”, “deandre jordan”, “glen robinson”] stream.filter(track=track_terms)
Мы можем позволить этому работать столько времени, сколько необходимо, и анализировать результаты в нашей базе данных, чтобы найти ответы, которые мы ищем.
# find total number of tweets analyzed and stored result = tweetdb.query(‘SELECT Count(*) FROM tweets3;’) for row in result: print(row) # find average polarity scores for name in track_terms: qry = name.split() result = tweetdb.query(‘SELECT AVG(polarity) FROM tweets3 WHERE text LIKE “%{0}%”;’.format(qry[0])) for row in result: print(qry[0]) print (row)
- Джонс младший
- Гордон
- Иордания
- Робинзон III
Эти выборочные результаты основаны на анализе 1818 твитов. Похоже, Аарон Гордон и Деррик Джонс в этом году должны показать хорошие результаты :)
Обновление (через неделю после исходного сообщения): только что заметил опрос, проведенный в прямом эфире на TNT, который подтверждает следующие результаты: