Получить недавний Твиттер Трампа
Помимо использования поисковых роботов для получения 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 твитов.В фактической полученной сумме будут некоторые различия, но разница невелика.
Экспортированные данные выглядят следующим образом:
предварительная обработка данных
- использовать
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 Вт.
Эпилог
Эта статья в основном посвящена многомерной объективной статистике и не слишком много интерпретирует. Его можно рассматривать как введение, читатели и друзья могут использовать свое воображение, чтобы провести более глубокий анализ и глубокую интерпретацию.