Анализ социальных сетей с помощью 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) Свойства края

  • Цвет , обводка или соединение со стрелкой : указывает тип связи, например настроение публикации или твита, связывающее двух пользователей.
  • Ширина : указывает силу связи, например, сколько упоминаний или ретвитов наблюдается между двумя пользователями за определенный период.

Давайте рассмотрим пример визуального элемента социальной сети, чтобы увидеть, как работают эти свойства:

Граф окружностей, соединенных линиями различной ширины, состоит из трех отдельных участков. В левой части графика есть шесть зеленых фигур разных размеров, помеченных цифрами 1, 2, 3, 4, 5 и 6 в шестиугольнике. Цифры 1-5 — это круги, а 6 — это ромбы. Они соединены между собой зелеными стрелками разной ширины и направления, причем некоторые наконечники стрелок закрашены зеленым цветом, а другие не закрашены. Справа от зеленых фигур находится следующая секция: три темно-синие фигуры, расположенные в виде треугольника, помеченные цифрами 7, 8 и 9 и соединенные между собой синими стрелками разной ширины и направления (некоторые стрелки закрашены синим цветом). Узлы 7 и 9 соединены с узлами 3 и 4 серыми стрелками разной ширины и направления (некоторые стрелки окрашены в серый цвет). В середине графика, под первыми двумя группами фигур, находится один светло-голубой ромб с номером 10. Он соединен с узлами 5, 4 и 9 пунктирными серыми стрелками разной ширины и направления (некоторые стрелки закрашены серым цветом). .
Зеленые, голубые и темно-синие узлы, а также различные круглые или ромбовидные формы демонстрируют разные типы узлов. Числа с прозрачным фоном действуют как идентификаторы изображений узлов, а более крупные узлы (например, узел 4) более важны в сети. Различные типы ребер обозначаются цветом (зеленый, синий или серый), обводкой (сплошной или пунктирной) и стрелками (пустыми или заполненными); ширина ребра показывает прочность (например, соединение между узлом 8 и узлом 9 сильное).

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

Сравнение расширений социальных сетей Power BI

Определив различные функции данных социальной сети, давайте рассмотрим плюсы и минусы четырех популярных инструментов, используемых для визуализации сетей в Power BI.

Расширение График социальной сети Артура Грауса Сетевой навигатор Расширенные сети от ZoomCharts (облегченная версия) Пользовательские визуализации с использованием R
Размер динамического узла Да Да Да Да
Динамический размер края Нет Да Нет Да
Настройка цвета узла Да Да Нет Да
Комплексная обработка социальных сетей Нет Да Да Да
Изображения профилей для узлов Да Нет Нет Да
Регулируемый зум Нет Да Да Да
Фильтрация первых N подключений Нет Нет Нет Да
Пользовательская информация при наведении Нет Нет Нет Да
Настройка цвета края Нет Нет Нет Да
Другие расширенные функции Нет Нет Нет Да


Social Network Graph от Arthur Graus, Network Navigator и Advanced Networks от ZoomCharts (Light Edition) — все это подходящие расширения для разработки простых социальных сетей и начала работы с вашим первым анализом социальных сетей.

Множество темно-синих, голубых и оранжевых кругов (более 50 кругов) соединены тонкими серыми линиями на белом фоне. Круги имеют сплошную цветную окантовку и заполнены небольшими изображениями различных покемонов, которые имеют белый фон, а круги закрывают обзор большей части серых линий. В целом они образуют круглую форму.
Пример визуализации, выполненный с использованием расширения Social Network Graph by Arthur Graus.

Множество синих, фиолетовых и серых кругов (более 50 кругов) соединены тонкими серыми линиями на белом фоне. Круги сплошные и заполненные, они закрывают вид на некоторые серые линии. В целом они образуют круговую композицию.
Пример визуализации, сделанный с помощью расширения Network Navigator.

Множество больших бирюзовых и маленьких оранжевых кругов (более 50 кругов) соединены тонкими серыми линиями на белом фоне. Круги сплошные и заполненные, и видно большинство серых линий. В целом они образуют форму горизонтального клина, с более плотными кругами, появляющимися с правой стороны. В левом нижнем углу диаграммы есть несколько значков виджетов и два круга с метками: бирюзовый круг с надписью «От пользователя» и оранжевый круг с надписью «Пользователю». В правом нижнем углу диаграммы находится логотип с надписью «zoomcharts».
Пример визуализации, сделанный с помощью расширения Advanced Networks by ZoomCharts (Light Edition).

Однако, если вы хотите оживить свои данные и открыть передовые идеи с помощью привлекающих внимание визуальных элементов или если ваша социальная сеть особенно сложна, я рекомендую разработать собственные визуальные элементы в R.

Множество зеленых, синих и фиолетовых кругов (более 50 кругов) соединены тонкими линиями разного цвета (зеленого, серого и красного) на белом фоне. Круги сплошные и заполнены изображением покемона в центре, и видно большинство тонких линий. В целом они образуют растянутую круглую форму, причем зеленые круги часто разветвляются на меньшие синие или фиолетовые круги. В правом верхнем углу диаграммы есть текст «Социальная сеть», а под диаграммой находится легенда из линий и кружков с соответствующим текстом: зеленая линия с текстом «Положительно», серая линия с текстом «Нейтрально». красная строка с текстом «Отрицательный», синий кружок с текстом «Упоминание» и фиолетовый кружок с текстом «Ретвитнуть».
Пример визуализации, выполненной с использованием пользовательских визуальных элементов в R.

Эта настраиваемая визуализация является окончательным результатом расширения социальной сети нашего руководства в R и демонстрирует большое разнообразие функций и свойств узлов/ребер, предлагаемых R.

Создание расширения социальной сети для Power BI с помощью R

Создание расширения для визуализации социальных сетей в Power BI с использованием R состоит из пяти отдельных шагов. Но прежде чем мы сможем создать расширение для нашей социальной сети, мы должны загрузить наши данные в Power BI.

Предварительное условие: сбор и подготовка данных для Power BI

Вы можете следовать этому руководству с тестовым набором данных, основанным на данных Twitter и Facebook, или продолжить работу со своей собственной социальной сетью. Наши данные были рандомизированы; при желании вы можете загрузить реальные данные Twitter. Собрав необходимые данные, добавьте их в Power BI (например, импортировав книгу Excel или добавив данные вручную). Ваш результат должен выглядеть примерно так, как показано в следующей таблице:

Появится таблица с тринадцатью чередующимися серыми и белыми строками. У него есть заголовок — «Социальная сеть» — с заголовками под ним. Первый столбец помечен как «От пользователя» и содержит восемь текстов «1», за которыми следуют пять текстов «2». Второй столбец помечен как «Пользователю» и читается (сверху вниз): 2, 3, 5, 6, 7, 8, 9, 10, 7, 8, 11, 13, 14. Третий столбец помечен как « Количество соединений» и читается (сверху вниз): 12, 46, 29, 79, 49, 11, 90, 100, 66, 29, 62, 13, 45. Четвертый столбец помечен как «Тип» и читается ( сверху вниз): Ретвит, Упоминание, Упоминание, Ретвит, Ретвит, Ретвит, Упоминание, Упоминание, Ретвит, Ретвит, Ретвит, Ретвит, Упоминание. Пятый столбец помечен как «Настроение» и читается (сверху вниз): Положительный, Положительный, Отрицательный, Нейтральный, Положительный, Отрицательный, Положительный, Нейтральный, Нейтральный, Отрицательный, Отрицательный, Отрицательный, Отрицательный. Шестой столбец помечен как «От имени пользователя» и содержит восемь текстов «Аалия», за которыми следуют пять текстов «Аарон». Седьмая колонка гласит «Кому имя пользователя» и гласит (сверху вниз): Аарон, Абель, Авраам, Эйс, Адалин, Адалинн с двумя N, Адам, Аддисон, Адалин, Адалинн с двумя N, Аделина, Адриэль, Эйдан. Восьмой столбец гласит «От аватара» и содержит восемь текстов «https://raychemmedica.com/SampleImages/Pokemon/1.png», за которыми следуют пять текстов «https://raychemmedica.com/SampleImages/Pokemon/2.png». . В девятом столбце написано «Для аватара», и каждая запись имеет текст «https://raychemmedica.com/SampleImages/Pok» и кажется обрезанной.

После того, как вы настроили свои данные, вы готовы создать пользовательскую визуализацию.

Шаг 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 .

При успешном выполнении кода вы увидите папку со следующей структурой:

Список File Explorer, содержащий восемь подпапок (.tmp, .vscode, assets, dist, node_modules, r_files, src и style) и восемь файлов (capabilities.json, dependencies.json, package.json, package-lock.json, pbiviz). .json, script.r, tsconfig.json и tslint.json). Все файлы имеют размер 1 КБ, кроме возможностей.json (2 КБ) и package-lock.json (23 КБ).

Как только у нас будет готова структура папок, мы можем написать код 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 (либо отчет для существующих данных, либо отчет, созданный на предварительном этапе с тестовыми данными) и перейдите на вкладку Визуализации . Нажмите кнопку [дополнительные параметры] и выберите Импорт визуального элемента из файла . Примечание. Возможно, вам придется сначала выбрать « Редактировать » в браузере, чтобы вкладка « Визуализации » стала видимой.

Появится панель с заголовком «Визуализации» и двумя стрелками «>» справа от нее. Внизу текст «Build visual» с двумя изображениями под ним: два желтых прямоугольника и линия слева, а также бумага и кисть справа. Выбрано изображение с двумя желтыми прямоугольниками, а под ним находится панель из более чем 30 различных графических значков. Последний значок представляет собой многоточие с текстом при наведении «Получить больше визуальных эффектов». Под панелью значков текст «Значения» со строкой текста ниже: «Добавьте сюда поля данных». Ниже текст «Детализация», за которым следует «Перекрестный отчет» с переключателем «Выкл.», выбранным рядом с ним.

Перейдите в каталог dist папки визуализации и выберите файл .pbiviz , чтобы легко загрузить визуализацию в Power BI.

Шаг 5. Создайте визуализацию в Power BI

Визуализация, которую вы импортировали, теперь доступна на панели визуализаций. Щелкните значок визуализации, чтобы добавить его в отчет, а затем добавьте соответствующие столбцы во входные данные dataset и num_records :

Появится панель с выбранным значком инструментов, на котором появится текст «toptalSocialNetworkByBharatGarg». Под значком появляется текст «набор данных» с различными выпадающими прямоугольниками под ним (сверху вниз): «От пользователя», «Пользователю», «Количество подключений», «Цвет», «Цвет», «Имя пользователя», «Имя пользователя», «Аватар», «Аватар».

Вы можете добавить в визуализацию дополнительный текст, фильтры и функции в зависимости от требований вашего проекта. Я также рекомендую вам ознакомиться с подробной документацией по трем библиотекам R, которые мы использовали для дальнейшего улучшения ваших визуализаций, поскольку наш пример проекта не может охватить все варианты использования доступных функций.

Обновление вашего следующего анализа социальных сетей

Наш окончательный результат является свидетельством мощности и эффективности R, когда речь идет о создании пользовательских визуализаций Power BI. Попробуйте анализ социальных сетей с помощью настраиваемых визуальных элементов в R в своем следующем наборе данных и принимайте более взвешенные решения с помощью всеобъемлющей аналитики данных.

Блог Toptal Engineering выражает благодарность Леандро Розеру за рассмотрение примеров кода, представленных в этой статье.

Сверху вниз появляются слова «Gold» (золотого цвета), «Microsoft» и «Partner» (оба черного цвета), за которыми следует логотип Microsoft.
Будучи золотым партнером Microsoft, Toptal — это ваша элитная сеть экспертов Microsoft. Создавайте высокоэффективные команды с нужными вам экспертами — в любом месте и именно тогда, когда они вам нужны!