Планируется, что в этом году в конкурсе данков (только что объявленном) примут участие два популярных и прославленных данкера и два относительно неизвестных новичка. Многие люди испытывают смешанные чувства по этому поводу (особенно учитывая, что многие думали, что трофей был «украден» у Аарона Гордона на прошлогоднем конкурсе данков). Давайте обратимся к 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)

  1. Джонс младший
  2. Гордон
  3. Иордания
  4. Робинзон III

Эти выборочные результаты основаны на анализе 1818 твитов. Похоже, Аарон Гордон и Деррик Джонс в этом году должны показать хорошие результаты :)

Обновление (через неделю после исходного сообщения): только что заметил опрос, проведенный в прямом эфире на TNT, который подтверждает следующие результаты: