Анализ социальных сетей с помощью Power BI и R: Руководство по пользовательским визуальным элементам
Опубликовано: 2022-07-22Анализ социальных сетей быстро становится важным инструментом для удовлетворения различных профессиональных потребностей. Он может информировать корпоративные цели, такие как целевой маркетинг, и выявлять риски безопасности или репутации. Анализ социальных сетей также может помочь компаниям достичь внутренних целей: он дает представление о поведении сотрудников и отношениях между различными подразделениями компании.
Организации могут использовать ряд программных решений для анализа социальных сетей; каждый имеет свои плюсы и минусы и подходит для разных целей. Эта статья посвящена Microsoft Power BI, одному из наиболее часто используемых сегодня инструментов визуализации данных. Хотя Power BI предлагает множество надстроек для социальных сетей, мы рассмотрим настраиваемые визуальные элементы в R, чтобы создавать более привлекательные и гибкие результаты.
Этот учебник предполагает понимание основ теории графов, в частности ориентированных графов. Кроме того, более поздние шаги лучше всего подходят для Power BI Desktop, который доступен только в Windows. Читатели могут использовать браузер Power BI в Mac OS или Linux, но браузер Power BI не поддерживает определенные функции, например импорт книги Excel.
Структурирование данных для визуализации
Создание социальных сетей начинается со сбора данных о соединениях (пограничных). Данные соединений содержат два основных поля: исходный узел и целевой узел — узлы на обоих концах ребра. Помимо этих узлов, мы можем собирать данные для получения более полной визуальной информации, обычно представленной в виде свойств узлов или ребер:
1) Свойства узла
- Форма или цвет : указывает тип пользователя, например, местоположение/страну пользователя.
- Размер : указывает на важность в сети, например, количество подписчиков пользователя.
- Изображение : действует как индивидуальный идентификатор, например, аватар пользователя.
2) Свойства края
- Цвет , обводка или соединение со стрелкой : указывает тип связи, например настроение публикации или твита, связывающее двух пользователей.
- Ширина : указывает силу связи, например, сколько упоминаний или ретвитов наблюдается между двумя пользователями за определенный период.
Давайте рассмотрим пример визуального элемента социальной сети, чтобы увидеть, как работают эти свойства:
Мы также можем использовать текст при наведении, чтобы дополнить или заменить вышеуказанные параметры, поскольку он может поддерживать другую информацию, которую нелегко выразить через свойства узла или ребра.
Сравнение расширений социальных сетей Power BI
Определив различные функции данных социальной сети, давайте рассмотрим плюсы и минусы четырех популярных инструментов, используемых для визуализации сетей в Power BI.
Расширение | График социальной сети Артура Грауса | Сетевой навигатор | Расширенные сети от ZoomCharts (облегченная версия) | Пользовательские визуализации с использованием R |
---|---|---|---|---|
Размер динамического узла | Да | Да | Да | Да |
Динамический размер края | Нет | Да | Нет | Да |
Настройка цвета узла | Да | Да | Нет | Да |
Комплексная обработка социальных сетей | Нет | Да | Да | Да |
Изображения профилей для узлов | Да | Нет | Нет | Да |
Регулируемый зум | Нет | Да | Да | Да |
Фильтрация первых N подключений | Нет | Нет | Нет | Да |
Пользовательская информация при наведении | Нет | Нет | Нет | Да |
Настройка цвета края | Нет | Нет | Нет | Да |
Другие расширенные функции | Нет | Нет | Нет | Да |
Social Network Graph от Arthur Graus, Network Navigator и Advanced Networks от ZoomCharts (Light Edition) — все это подходящие расширения для разработки простых социальных сетей и начала работы с вашим первым анализом социальных сетей.
Однако, если вы хотите оживить свои данные и открыть передовые идеи с помощью привлекающих внимание визуальных элементов или если ваша социальная сеть особенно сложна, я рекомендую разработать собственные визуальные элементы в R.
Эта настраиваемая визуализация является окончательным результатом расширения социальной сети нашего руководства в R и демонстрирует большое разнообразие функций и свойств узлов/ребер, предлагаемых R.
Создание расширения социальной сети для Power BI с помощью R
Создание расширения для визуализации социальных сетей в Power BI с использованием R состоит из пяти отдельных шагов. Но прежде чем мы сможем создать расширение для нашей социальной сети, мы должны загрузить наши данные в Power BI.
Предварительное условие: сбор и подготовка данных для Power BI
Вы можете следовать этому руководству с тестовым набором данных, основанным на данных Twitter и Facebook, или продолжить работу со своей собственной социальной сетью. Наши данные были рандомизированы; при желании вы можете загрузить реальные данные Twitter. Собрав необходимые данные, добавьте их в Power BI (например, импортировав книгу Excel или добавив данные вручную). Ваш результат должен выглядеть примерно так, как показано в следующей таблице:
После того, как вы настроили свои данные, вы готовы создать пользовательскую визуализацию.
Шаг 1. Настройте шаблон визуализации
Разработать визуализацию Power BI непросто — даже для базовых визуализаций требуются тысячи файлов. К счастью, Microsoft предлагает библиотеку под названием pbiviz
, которая предоставляет необходимые файлы для поддержки инфраструктуры всего за несколько строк кода. Библиотека pbiviz
также переупаковывает все наши окончательные файлы в файл .pbiviz
, который мы можем загрузить непосредственно в Power BI в качестве визуализации.
Самый простой способ установить pbiviz
— использовать Node.js. После pbiviz
нам нужно инициализировать наш пользовательский визуальный элемент R через интерфейс командной строки нашей машины:
pbiviz new toptalSocialNetworkByBharatGarg -t rhtml cd toptalSocialNetworkByBharatGarg npm install pbiviz package
Не забудьте заменить toptalSocialNetworkByBharatGarg
на желаемое имя для вашей визуализации. -t rhtml
сообщает пакету pbiviz
, что он должен создать шаблон для разработки визуализаций HTML на основе R. Вы увидите ошибки, потому что мы еще не указали такие поля, как имя автора и адрес электронной почты в нашем пакете, но мы исправим их позже в этом руководстве. Если сценарий pbiviz
не запускается в PowerShell, вам сначала может потребоваться разрешить сценарии с помощью Set-ExecutionPolicy RemoteSigned
.
При успешном выполнении кода вы увидите папку со следующей структурой:
Как только у нас будет готова структура папок, мы можем написать код R для нашей пользовательской визуализации.
Шаг 2: Закодируйте визуализацию в R
Каталог, созданный на первом этапе, содержит файл с именем script.r
, который состоит из кода по умолчанию. (Код по умолчанию создает простое расширение Power BI, которое использует базу данных образцов iris
, доступную в R, для построения гистограммы Petal.Length
по Petal.Species
.) Мы обновим код, но сохраним его структуру по умолчанию, включая разделы с комментариями.
В нашем проекте используются три библиотеки R:
- DiagrammeR: создает графики из текста
- visNetwork: обеспечивает интерактивную визуализацию сети.
- data.table: Помогает в организации данных, подобно data.frame.
Давайте заменим код в разделе « Library Declarations
» script.r
, чтобы отразить использование нашей библиотеки:
libraryRequireInstall("DiagrammeR") libraryRequireInstall("visNetwork") libraryRequireInstall("data.table")
Далее мы заменим код в разделе Actual code
нашим R-кодом. Перед созданием нашей визуализации мы должны сначала прочитать и обработать наши данные. Мы возьмем два входа из Power BI:
-
num_records
: числовой ввод N , чтобы мы выбирали только первые N подключений из нашей сети (чтобы ограничить количество отображаемых подключений) -
dataset
: узлы и ребра нашей социальной сети
Чтобы вычислить N подключений, которые мы будем отображать, нам нужно агрегировать значение num_records
, поскольку Power BI по умолчанию предоставит вектор вместо одного числового значения. Функция агрегирования, такая как max
, достигает этой цели:
limit_connection <- max(num_records)
Теперь мы будем читать dataset
как объект data.table
с настраиваемыми столбцами. Мы сортируем набор данных по значению в порядке убывания, чтобы разместить наиболее частые соединения в верхней части таблицы. Это гарантирует, что мы выберем наиболее важные записи для построения, когда мы ограничиваем наши соединения с помощью num_records
:
dataset <- data.table(from = dataset[[1]] ,to = dataset[[2]] ,value = dataset[[3]] ,col_sentiment = dataset[[4]] ,col_type = dataset[[5]] ,from_name = dataset[[6]] ,to_name = dataset[[7]] ,from_avatar = dataset[[8]] ,to_avatar = dataset[[9]])[ order(-value)][ seq(1, min(nrow(dataset), limit_connection))]
Затем мы должны подготовить нашу информацию о пользователе, создав и назначив уникальные идентификаторы пользователей ( uid
) каждому пользователю, сохранив их в новой таблице. Мы также вычисляем общее количество пользователей и сохраняем эту информацию в отдельной переменной с именем num_nodes
:
user_ids <- data.table(id = unique(c(dataset$from, dataset$to)))[, uid := 1:.N] num_nodes <- nrow(user_ids)
Давайте обновим нашу информацию о пользователе дополнительными свойствами, в том числе:
- Количество подписчиков (размер узла).
- Количество записей.
- Тип пользователя (цветовые коды).
- Ссылки на аватар.
Мы будем использовать функцию merge
R для обновления таблицы:
user_ids <- merge(user_ids, dataset[, .(num_follower = uniqueN(to)), from], by.x = 'id', by.y = 'from', all.x = T)[is.na(num_follower), num_follower := 0][, size := num_follower][num_follower > 0, size := size + 50][, size := size + 10] user_ids <- merge(user_ids, dataset[, .(sum_val = sum(value)), .(to, col_type)][order(-sum_val)][, id := 1:.N, to][id == 1, .(to, col_type)], by.x = 'id', by.y = 'to', all.x = T) user_ids[id %in% dataset$from, col_type := '#42f548'] user_ids <- merge(user_ids, unique(rbind(dataset[, .('id' = from, 'Name' = from_name, 'avatar' = from_avatar)], dataset[, .('id' = to, 'Name' = to_name, 'avatar' = to_avatar)])), by = 'id')
Мы также добавляем наш созданный uid
в исходный набор данных, чтобы позже в коде можно было получить идентификаторы from
и to
пользователя:
dataset <- merge(dataset, user_ids[, .(id, uid)], by.x = "from", by.y = "id") dataset <- merge(dataset, user_ids[, .(id, uid_retweet = uid)], by.x = "to", by.y = "id") user_ids <- user_ids[order(uid)]
Затем мы создаем фреймы данных узла и края для визуализации. Мы выбираем style
и shape
наших узлов (закрашенные круги) и выбираем правильные столбцы нашей таблицы user_ids
для заполнения атрибутов color
, data
, value
и image
наших узлов:
nodes <- create_node_df(n = num_nodes, type = "lower",, color = user_ids$col_type, shape = 'circularImage', data = user_ids$uid, value = user_ids$size, image = user_ids$avatar, title = paste0("<p>Name: <b>", user_ids$Name,"</b><br>", "Super UID <b>", user_ids$id, "</b><br>", "# followers <b>", user_ids$num_follower, "</b><br>", "</p>") )
Точно так же мы выбираем столбцы таблицы dataset
, которые соответствуют атрибутам from
, to
и color
наших ребер:
edges <- create_edge_df(from = dataset$uid, to = dataset$uid_retweet, arrows = "to", color = dataset$col_sentiment)
Наконец, когда кадры данных node и edge готовы, давайте создадим нашу визуализацию с помощью библиотеки visNetwork
и сохраним ее в переменной, которую код по умолчанию будет использовать позже, с именем p
:
p <- visNetwork(nodes, edges) %>% visOptions(highlightNearest = list(enabled = TRUE, degree = 1, hover = T)) %>% visPhysics(stabilization = list(enabled = FALSE, iterations = 10), adaptiveTimestep = TRUE, barnesHut = list(avoidOverlap = 0.2, damping = 0.15, gravitationalConstant = -5000))
Здесь мы настраиваем несколько конфигураций визуализации сети в visOptions и visPhysics. Не стесняйтесь просматривать страницы документации и обновлять эти параметры по своему усмотрению. Наш раздел Actual code
завершен, и мы должны обновить раздел « Create and save widget
», удалив строку p = ggplotly(g);
так как мы закодировали нашу собственную переменную визуализации, p
.
Шаг 3. Подготовьте визуализацию для Power BI
Теперь, когда мы закончили кодирование в R, мы должны внести определенные изменения в наши вспомогательные файлы JSON, чтобы подготовить визуализацию для использования в Power BI.
Начнем с файла capabilities.json
. Он включает в себя большую часть информации, которую вы видите на вкладке Визуализации для визуального элемента, например источники данных нашего расширения и другие настройки. Во-первых, нам нужно обновить dataRoles
и заменить существующее значение новыми ролями данных для нашего dataset
и входных данных num_records
:
# ... "dataRoles": [ { "displayName": "dataset", "description": "Connection Details - From, To, # of Connections, Sentiment Color, To Node Type Color", "kind": "GroupingOrMeasure", "name": "dataset" }, { "displayName": "num_records", "description": "number of records to keep", "kind": "Measure", "name": "num_records" } ], # ...
В нашем файле capabilities.json
давайте также обновим раздел dataViewMappings
. Мы добавим conditions
, которым должны соответствовать наши входные данные, а также обновим scriptResult
, чтобы он соответствовал нашим новым ролям данных и их условиям. См. раздел conditions
вместе с разделом select
в scriptResult
для изменений:
# ... "dataViewMappings": [ { "conditions": [ { "dataset": { "max": 20 }, "num_records": { "max": 1 } } ], "scriptResult": { "dataInput": { "table": { "rows": { "select": [ { "for": { "in": "dataset" } }, { "for": { "in": "num_records" } } ], "dataReductionAlgorithm": { "top": {} } } } }, # ...
Давайте перейдем к нашему файлу dependencies.json
. Здесь мы добавим три дополнительных пакета в cranPackages
, чтобы Power BI мог определить и установить необходимые библиотеки:
{ "name": "data.table", "displayName": "data.table", "url": "https://cran.r-project.org/web/packages/data.table/index.html" }, { "name": "DiagrammeR", "displayName": "DiagrammeR", "url": "https://cran.r-project.org/web/packages/DiagrammeR/index.html" }, { "name": "visNetwork", "displayName": "visNetwork", "url": "https://cran.r-project.org/web/packages/visNetwork/index.html" },
Примечание. Power BI должен автоматически установить эти библиотеки, но если вы столкнулись с ошибками библиотек, попробуйте выполнить следующую команду:
install.packages(c("DiagrammeR", "htmlwidgets", "visNetwork", "data.table", "xml2"))
Наконец, давайте добавим соответствующую информацию для нашего визуального элемента в файл pbiviz.json
. Я бы рекомендовал обновить следующие поля:
- Поле описания визуального элемента
- URL-адрес поддержки визуального элемента
- URL-адрес визуального элемента GitHub
- Имя автора
- Электронная почта автора
Теперь наши файлы обновлены, и мы должны переупаковать визуализацию из командной строки:
pbiviz package
При успешном выполнении кода в каталоге dist
должен быть создан файл .pbiviz
. Весь код, описанный в этом руководстве, можно просмотреть на GitHub.
Шаг 4. Импортируйте визуализацию в Power BI
Чтобы импортировать новую визуализацию в Power BI, откройте отчет Power BI (либо отчет для существующих данных, либо отчет, созданный на предварительном этапе с тестовыми данными) и перейдите на вкладку Визуализации . Нажмите кнопку … [дополнительные параметры] и выберите Импорт визуального элемента из файла . Примечание. Возможно, вам придется сначала выбрать « Редактировать » в браузере, чтобы вкладка « Визуализации » стала видимой.
Перейдите в каталог dist
папки визуализации и выберите файл .pbiviz
, чтобы легко загрузить визуализацию в Power BI.
Шаг 5. Создайте визуализацию в Power BI
Визуализация, которую вы импортировали, теперь доступна на панели визуализаций. Щелкните значок визуализации, чтобы добавить его в отчет, а затем добавьте соответствующие столбцы во входные данные dataset
и num_records
:
Вы можете добавить в визуализацию дополнительный текст, фильтры и функции в зависимости от требований вашего проекта. Я также рекомендую вам ознакомиться с подробной документацией по трем библиотекам R, которые мы использовали для дальнейшего улучшения ваших визуализаций, поскольку наш пример проекта не может охватить все варианты использования доступных функций.
Обновление вашего следующего анализа социальных сетей
Наш окончательный результат является свидетельством мощности и эффективности R, когда речь идет о создании пользовательских визуализаций Power BI. Попробуйте анализ социальных сетей с помощью настраиваемых визуальных элементов в R в своем следующем наборе данных и принимайте более взвешенные решения с помощью всеобъемлющей аналитики данных.
Блог Toptal Engineering выражает благодарность Леандро Розеру за рассмотрение примеров кода, представленных в этой статье.