Супермногомерный анализ Трампа в Твиттере

искусственный интеллект

Получить недавний Твиттер Трампа

Помимо использования поисковых роботов для получения Twitter, еще одним простым и стабильным решением является передача официального API, однако официальный Twitter в последнее время относительно строг, и подать заявку на открытую платформу сложно. К счастью, автор уже подавал заявку на получение учетной записи разработчика в Твиттере.

  • Установите стороннюю библиотеку python-twitter, чтобы получить Twitter
pip install python-twitter
  • Сбросить недавний твиттер Трампа
import twitter

proxies = {
    'http': '',
    'https': ''
}

api = twitter.Api(consumer_key='',
                  consumer_secret='',
                  access_token_key='',
                  access_token_secret='', proxies=proxies)
                  
count = 200
max_id = None
fp = open('Trump-twitter.txt', encoding='utf-8', mode='w')
while True:
    statuses = api.GetUserTimeline(screen_name="realDonaldTrump", count=count, max_id=max_id)
    if len(statuses) < 1:
        break
    for s in statuses:
        print(s)
        fp.write(str(s) + "\n")
        max_id = s.id

    max_id = max_id - 1

fp.close()

Следует отметить, что этот API необходимо использовать в сетевой среде, где есть доступ к Twitter, поэтому конфигурацияproxy

В настоящее время API Twitter ограничен, и можно получить только последние 3200 твитов.В фактической полученной сумме будут некоторые различия, но разница невелика.

Экспортированные данные выглядят следующим образом:

IMAGE

предварительная обработка данных

  • использоватьpandasОбрабатывать таблицы очень удобно, здесь важная информация в основном обрабатывается в поля таблицы, что удобно для последующего статистического анализа.
  • Здесь сосредоточьтесь на следующих полях
имя поля Объяснение поля
id Twitter ID Twitter.com/i/Web/ — это Кролик…
created_at время выпуска
favorite_count Нравится
hashtags ТЕГ темы
retweet_count количество ретвитов
source Опубликованный источник, например, с iPhone
text Содержание твита
media_type Тип носителя контента, например видео
ret_user_name оригинальный издатель
ret_user_verified Аутентифицирован ли первоначальный издатель?
quoted_user_name Автор цитируемого твита
quoted_user_verified Сертифицирован ли автор цитируемого твита
created_day Дата выхода, легко сосчитать по дням
created_day_hour Дата выпуска с точностью до часа, например: 2020-06-14 02
created_hour Время публикации, удобное для подсчета регулярности времени публикации
  • сегмент кода
# 把发布时间转换成特定的格式
def get_created_info(row):
    created_at = row.created_at
    day,time_str = created_at.split(' ')
    hour = time_str.split(':')[0]
    day_hour = day+" "+hour
    return day,day_hour,hour

# 应用到多个字段上    
DF[['created_day','created_day_hour','created_hour']] = DF.apply(get_created_info,axis=1,result_type='expand')    

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

Сначала загрузите предварительно обработанные данные на предыдущем шаге и преобразуйте их вpandasизDataFrame, что удобно для последующей обработки

df = pd.read_excel('./Trump-twitter.xlsx')

Затем введите супер многомерный анализ

Ежедневная статистика постов

 df[['id','created_day']].groupby(by=['created_day']).count().sort_values(by=['id'],ascending=False).head(20).plot.bar(figsize=(12,4))

Розыгрыш по топ-20 от общего количества ежедневных постов

Можно обнаружить, что в день 05.06.2020 было опубликовано больше всего сообщений - 153 сообщения. Давайте подробно рассмотрим количество постов в час в этот день.

df1 = df[df.created_day=='2020-06-05']
df1[['id','created_hour']].groupby(by=['created_hour']).count().plot.bar(figsize=(12,4))

В два часа 11 и 12 часов дня публикуется больше всего постов, проанализируйте весь контент твитов этого дня и нарисуйте карту облака слов, которая используется здесьWordCloudОтносительно простая в использовании библиотека для рисования карт облака слов.

Анализ настроений по содержанию твитов

def get_sentiment(row):
    polarity = tb(row.text).polarity
    if polarity < 0:
        tag = 'negative'
    elif polarity < 0.3:
        tag = 'neutral'
    else:
        tag = 'positive'
    return tag,polarity
df[['text_polarity','polarity_prob']] = df.apply(get_sentiment,axis=1,result_type='expand')    

Здесь используется библиотека textblob, простая библиотека обработки текста, которая может легко выполнять анализ тональности, маркировку частей речи, исправление орфографии и т. д. для английского текста.

Видно, твиты Трампа в основном нейтральные, конечно, негатива тоже немало, не буду здесь распространяться...

Статистика периода публикации

df[['id','created_hour']].groupby(by=['created_hour']).count().plot.bar(figsize=(12,4))

На картинке интуитивно видно, что Трамп публикует статьи 24 часа в сутки, около 12:00 он твитит больше всего, он достоин того, чтобы столкнуться с твиттером, чтобы управлять страной, а количество твитов зашкаливает.

Проанализируйте все твиты за этот период и нарисуйте карту облака слов.

Из карты облаков слов видно, что «Белый дом», «Коронавирус», «Обама» и «Байден» — объекты, которые он часто упоминает, и не забывает «Великий американец»…

Статистика облака слов для «FAKE NEWS», упомянутого в твите

Нет объяснения

Переадресация и исходная статистика

explode = (0, 0.1)
df[['id','tweet_status']].groupby(by=['tweet_status']).count()\
.plot.pie(y='id',figsize=(5,5),explode=explode,autopct='%1.1f%%',shadow=True, startangle=0,label='')

Много репостов и оригиналов

Статистика переведенных авторов

rt_df = df[['id','ret_user_name']].groupby(by=['ret_user_name']).count().sort_values(by=['id'],ascending=False)
rt_df.head(20).plot.bar(figsize=(16,4))

  • В основном ретвитил твиты Белого дома, за которыми следовал его собственный

Опубликовать исходную статистику

explode = (0, 0.1)
df[['id','source']].groupby(by=['source']).count()\
.plot.pie(y='id',figsize=(5,5),explode=explode,autopct='%1.1f%%',shadow=True, startangle=0,label='')

В основном с айфона

Твитнуть тему TAG Статистический анализ

  • Видно, что Трампа больше беспокоит новая эпидемия короны и «Программа защиты зарплаты», связанная с эпидемией в это время.
  • Далее идет MAGA (Сделаем Америку снова великой)

Кластеризация контента твитов

Есть категории твитов Трампа 10. Из рисунка видно, что типы твитов Трампа в основном сконцентрированы в определенных аспектах.

сделать с содержанием твитаword2vec

model.similar_by_word('Trump')
# output

[('coronavirus', 0.6097418069839478),
 ('great', 0.5778061151504517),
 ('realDonaldTrump', 0.554646909236908),
 ('Great', 0.5381245613098145),
 ('National', 0.49641942977905273),
 ('America', 0.47522449493408203),
 ('today', 0.4736398458480835),
 ('people', 0.469297856092453),
 ('Democrats', 0.45948123931884766),
 ('time', 0.4551768898963928)]

Как подсчитать гистограмму

df[df.favorite_count > 0][['id','favorite_count']].plot.hist(y='favorite_count',bins=50,figsize=(12,4))

Количество лайков в основном сосредоточено вокруг 5w

Гистограмма количества ретвитов

df[df.retweet_count > 0][['id','retweet_count']].plot.hist(y='retweet_count',bins=50,figsize=(12,4))

Количество переадресации в основном сосредоточено примерно в 1 Вт.

Эпилог

Эта статья в основном посвящена многомерной объективной статистике и не слишком много интерпретирует. Его можно рассматривать как введение, читатели и друзья могут использовать свое воображение, чтобы провести более глубокий анализ и глубокую интерпретацию.