Визуализация Twitter социальной сети HRanalytics

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

В нашем последнем посте мы провели исследование тематического моделирования с использованием ленты Twitter #HRTechConf и обучили модель изучать темы всех твитов. В этой статье мы проанализируем взаимодействия пользователей Twitter и визуализируем их на интерактивном графике. Вот ссылка на веб-страницу интерактивного графика.

Социальная сеть - это сеть социальных взаимодействий и личных отношений.

Оксфордский словарь

Я использую Python 3.6 и следующие пакеты:

  • Tweepy: библиотека Python для доступа к Twitter API.
  • NetworkX: пакет Python для изучения структуры сложных сетей.
  • PyVis: библиотека Python для создания и визуализации интерактивных сетевых графиков.

Если вас интересует анализ организационной сети, ознакомьтесь с этой статьей, которую мы написали.

Сбор данных

Мы используем Tweepy (библиотека Python для доступа к Twitter API) для извлечения всех твитов, в которых упоминается HRanalytics. Только твиты, опубликованные со 2 по 11 ноября 2019 года, могли быть получены из-за ограничений Twitter API. Всего 333 твита.

Мы считаем, что в Твиттере происходит взаимодействие с пользователем, когда на твит ретвитируют или отвечают, или когда пользователь Твиттера упоминается в твите другого пользователя. Идея состоит в том, что кто-то имеет большее влияние на тему HR-аналитики, если его твиты или имя чаще появляются в сети.

В следующем примере ретвита мы рассматриваем взаимодействие между пользователем Twitter Sonianasher и HRCurator.

RT @HRCurator: Как Bosch использует геймификацию для развития навыков #HRAnalytics (пример из практики) https://t.co/8IjyO1HdUe @DigitalHRTech @ AnalyticsinHR…

Sonianasher

Графическое моделирование

Социальная сеть, например Граф Twitter состоит из узлов и ребер. Узлы - это учетная запись Twitter, а края - взаимодействие между пользователями Twitter.

Социальная сеть, например Граф Twitter состоит из узлов и ребер. Узлы - это учетная запись Twitter, а края - взаимодействие между пользователями Twitter.

Кроме того, весьма вероятно, что пользователь Twitter A имеет некоторое влияние на пользователя B, если B ретвитит, отвечает или упоминает твит A. Таким образом, сеть Twitter представляет собой направленный граф. В приведенном выше примере пользователь Sonianasher не только связан с HRCurator, но также "находится под влиянием" твита HRCurator.

import networkx as nx
graph = nx.DiGraph()

Для построения нашей сети Twitter мы используем NetworkX, пакет Python для изучения структуры сложных сетей.

degrees = [(node, val) for (node, val) in graph.degree()]
degrees_df = pd.DataFrame(degrees, columns=['node', 'degree']).sort_values(
        by='degree',ascending=False)
degrees_df.head(10)

Все взаимодействия в 333 извлеченных твитах добавляются в ориентированный граф. Давайте посмотрим, насколько хорошо подключена наша сеть Twitter.

degrees_df.describe()

У учетной записи Twitter HRCurator больше всего взаимодействий (40), а у martinhoyes - 15.

nx.number_connected_components(graph.to_undirected())
22

Вау, у нас есть 22 несвязанных подграфа, и это нехорошо. Нас больше всего интересует большой полносвязный граф.

nodes = max(nx.connected_component_subgraphs(graph.to_undirected()), key=len)
largest_subgraph = graph.subgraph(nodes)
print(nx.info(largest_subgraph))

Name:
Type: DiGraph
Number of nodes: 84
Number of edges: 100
Average in degree: 1.1905
Average out degree: 1.1905

Самый большой подграф имеет 84 узла и 100 ребер. Убедимся, что все узлы на этом графе связаны.

nx.number_connected_components(largest_subgraph.to_undirected())
1

Здорово! У него только один связный граф.

Визуализация сети

Теперь мы можем построить нашу сеть взаимодействия с Twitter.

node_degree = largest_subgraph.degree()
pos = nx.spring_layout(largest_subgraph, k=0.4)
plt.figure(figsize=(18,16))
nx.draw(largest_subgraph, pos=pos, 
        linewidths=0.2, node_color=range(len(node_degree)), 
        node_size=60, alpha=0.6, with_labels=True)
nx.draw_networkx_nodes(largest_subgraph, pos=pos, node_size=10, alpha=0.3)
plt.show()

Теперь мы можем построить нашу сеть взаимодействия с Twitter.

Та же сеть в круговой схеме.

Похоже, что многие стрелки указывают на узел HRCurator и martinhoyes, что подтверждает то, что было обнаружено ранее в нашем анализе выше, что пользователь HRCurator и martinhoyes имеют наибольшее влияние в этой сети.

from pyvis.network import Network
net = Network(height="850px", width="100%", bgcolor="#222222", 
              font_color="white", directed=True)
net.from_nx(largest_subgraph)
net.show("interactive_graph.html")

Это круто, но сложно визуализировать связи каждого узла. Не беспокойся. Мы используем библиотеку PyVis для построения интерактивного веб-графа, который позволяет пользователю перетаскивать, наводить курсор и выбирать узлы и ребра. Вот ссылка на веб-страницу интерактивного графика.

Заключительные примечания

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

Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.

Удачного машинного обучения!

Первоначально опубликовано на https://ai-journey.com 17 ноября 2019 г.