Простой способ анализа отношений с использованием известных аккаунтов в Твиттере.
Анализ социальных сетей - одна из актуальных тем в науке о данных. Людям нравятся эти анализы и они интересны, потому что все знакомы с этим миром. Большую часть времени мы уходим в Twitter, Instagram, Facebook и некоторые другие приложения для социальных сетей.
Как энтузиаста данных, эта тема не удивительно привлекла мое внимание. Однако получить доступ к официальному Twitter API очень сложно. Поэтому я поискал другое решение и обнаружил twint. Это библиотека Python, которая позволяет удалять данные Twitter без доступа к API.
В этой статье я кратко объясню, как очистить данные Twitter с помощью twint, и проанализирую некоторые отношения, основанные на подписках и упоминаниях среди группы пользователей Twitter.
Инициализация кода Python
Нам нужна библиотека twint для очистки данных, панды для создания фреймов данных и коллекции для получения сгруппированных значений счетчиков в списке.
import twint import pandas as pd from collections import Counter
Затем мы начинаем с создания списка пользователей, который состоит из учетных записей Twitter. Наш анализ будет включать отношения этих пользователей. Я не рекомендую добавлять в этот список пользователей с более чем 5K подписок из-за большого времени выполнения кода. Точно так же длинный список может столкнуться с той же проблемой.
Я выбрал нескольких популярных пользователей Твиттера, которых все знают, чтобы сделать наш анализ более интересным.
users = [ 'shakira', 'KimKardashian', 'rihanna', 'jtimberlake', 'KingJames', 'neymarjr', ]
После анализа отношений
Давайте начнем с анализа отношений и для этой цели напишем функцию с именем get_followings, которая отправляет запрос в библиотеку twint с именем пользователя. Эта функция вернет список пользователей, за которыми следует наш входящий пользователь.
def get_followings(username): c = twint.Config() c.Username = username c.Pandas = True twint.run.Following(c) list_of_followings = twint.storage.panda.Follow_df return list_of_followings['following'][username]
Используя функцию get_followings, мы получим разные списки подписок для каждого человека в нашем списке пользователей и сохраним результаты в словаре (подписок) и списке (following_list ). following_list - это объединенная версия всех подписок, и мы будем использовать ее для расчета наиболее популярных учетных записей Twitter в следующем разделе.
Цикл for ниже создает эти две переменные. Иногда Twitter не отвечает на наш запрос, и в этом случае мы получаем ошибку индекса. Для таких случаев я добавил исключение в код, чтобы пропустить этих пользователей.
followings = {} following_list = [] for person in users: print('#####\nStarting: ' + person + '\n#####') try: followings[person] = get_followings(person) following_list = following_list + followings[person] except KeyError: print('IndexError')
На кого больше всего следят наши пользователи?
Получив все следующие списки, мы можем просто вычислить наиболее распространенные значения в переменной following_list, чтобы получить самые популярные учетные записи среди наших пользователей. Чтобы получить самые популярные 10 аккаунтов, мы будем использовать функцию Счетчик из библиотеки коллекций.
Counter(following_list).most_common(10)
Результат этой функции показан ниже. За Рианной, похоже, следуют все остальные, и в нашей группе пользователей она определенно самая популярная.
[('rihanna', 5), ('RyanSeacrest', 3), ('BarackObama', 3), ('Oprah', 3), ('TheEllenShow', 3), ('kendricklamar', 3), ('KDTrey5', 3), ('Drake', 3), ('Nike', 3), ('NBA', 3)]
Слежение за отношениями между пользователями
Что, если мы хотим увидеть, кто за кем подписан в нашей группе пользователей? Чтобы исследовать это, я написал цикл for, который проверяет, есть ли кто-нибудь из пользователей в следующем списке другого человека. В результате он создает словарь списков, показывающий следующие статусы, представленные Истинно и Ложно.
follow_relations ={} for following_user in followings.keys(): follow_relation_list = [] for followed_user in followings.keys(): if followed_user in followings[following_user]: follow_relation_list.append(True) else: follow_relation_list.append(False) follow_relations[following_user] = follow_relation_list
В приведенном ниже коде словарь результатов преобразован в фрейм данных pandas для более удобной визуализации. Строки фрейма данных показывают пользователей, которые подписаны, тогда как столбцы указывают пользователей, на которых подписаны.
following_df = pd.DataFrame.from_dict(follow_relations, orient='index', columns=followings.keys())
Вы можете увидеть результат анализа ниже. Мы еще раз подтверждаем популярность Рианны в этой таблице. За ней следуют все остальные. Однако в отношении Ким Кардашьян мы не можем говорить подобным образом, согласно анализу, только Джастин Тимберлейк в нашей группе пользователей следует за ней.
Анализ количества упоминаний
Количество упоминаний - еще один надежный индикатор отношений между пользователями Twitter. Функция ниже (get_mention_count) написана для этой цели и возвращает количество упоминаний между двумя пользователями в одном направлении. Мы должны поместить упомянутое имя пользователя в упомянуть_слово, а в функции в его начало добавляется символ «@» для более точного разделения упоминаний.
def get_mention_count(user, mention_word): c = twint.Config() c.Username = user c.Search = '@' + mention_word c.Store_object = True twint.run.Search(c) tweets = twint.output.tweets_list mention_count = len(tweets) tweets.clear() return mention_count
В анализе мы будем использовать два вложенных цикла for, чтобы получить количество упоминаний каждого пользователя для всех остальных в нашей группе. В результате мы получим словарь упоминания_отношений.
mention_relations = {} for mentioning_user in users: print('#####\nStarting: ' + mentioning_user + '\n#####') mention_count_list = [] for mentioned_user in users: mention_count = get_mention_count(mentioning_user, mentioned_user) mention_count_list.append(mention_count) mention_relations[mentioning_user] = mention_count_list
Наконец, мы конвертируем этот словарь в фреймворк pandas, и он становится понятной и более легко интерпретируемой таблицей.
mention_df = pd.DataFrame.from_dict(mention_relations, orient='index', columns=mention_relations.keys())
И мы видим вывод таблицы количества упоминаний ниже. Опять же, строки показывают упомянутых пользователей, а столбцы - упомянутых. Значения по диагонали показывают, сколько раз пользователи упомянули себя, и это было вызвано ретвитами. Если проигнорировать эти значения, мы увидим, что Леброн Джеймс упоминается всеми в группе, а Рианна, похоже, упоминается всеми, кроме Неймара. С другой стороны, никто в группе никогда не упоминал Неймара в своих твитах. Другой интересный вывод может заключаться в том, что Шакира упомянула Рианну 52 раза в своих твитах, однако Рианна упомянула ее только 7 раз.
Заключение
Я попытался объяснить некоторые базовые анализы социальных сетей об известных пользователях Твиттера просто для развлечения, а тем временем стремился подготовить их с помощью несложных кодов Python. Надеюсь, они вам пригодятся. Наконец, несомненно, что эти анализы открыты для улучшения, и если у вас есть какие-либо советы или дополнения к статье, пожалуйста, не стесняйтесь поделиться ими.