Analiza sieci społecznościowych za pomocą Power BI i R: przewodnik po niestandardowych wizualizacjach
Opublikowany: 2022-07-22Analiza sieci społecznościowych szybko staje się ważnym narzędziem służącym do zaspokajania różnorodnych potrzeb zawodowych. Może informować o celach korporacyjnych, takich jak ukierunkowany marketing i identyfikować zagrożenia bezpieczeństwa lub reputacji. Analiza sieci społecznościowych może również pomóc firmom osiągnąć cele wewnętrzne: zapewnia wgląd w zachowania pracowników i relacje między różnymi częściami firmy.
Organizacje mogą wykorzystywać szereg rozwiązań programowych do analizy sieci społecznościowych; każdy ma swoje plusy i minusy i nadaje się do różnych celów. Ten artykuł koncentruje się na Power BI firmy Microsoft, jednym z najczęściej używanych obecnie narzędzi do wizualizacji danych. Chociaż usługa Power BI oferuje wiele dodatków do sieci społecznościowych, będziemy badać niestandardowe wizualizacje w języku R, aby tworzyć bardziej atrakcyjne i elastyczne wyniki.
Ten samouczek zakłada zrozumienie podstawowej teorii grafów, w szczególności grafów skierowanych. Ponadto późniejsze kroki najlepiej nadają się do programu Power BI Desktop, który jest dostępny tylko w systemie Windows. Czytelnicy mogą używać przeglądarki Power BI w systemie Mac OS lub Linux, ale przeglądarka Power BI nie obsługuje niektórych funkcji, takich jak importowanie skoroszytu programu Excel.
Strukturyzacja danych do wizualizacji
Tworzenie sieci społecznościowych zaczyna się od zebrania danych o połączeniach (krawędzi). Dane dotyczące połączeń zawierają dwie podstawowe zmienne: węzeł źródłowy i węzeł docelowy — węzły na każdym końcu krawędzi. Poza tymi węzłami możemy zbierać dane w celu uzyskania bardziej kompleksowych informacji wizualnych, zwykle reprezentowanych jako właściwości węzła lub krawędzi:
1) Właściwości węzła
- Kształt lub kolor : wskazuje typ użytkownika, np. lokalizację/kraj użytkownika
- Rozmiar : wskazuje na znaczenie w sieci, np. liczbę obserwujących użytkownika
- Obraz : działa jako indywidualny identyfikator, np. awatar użytkownika
2) Właściwości krawędzi
- Połączenie koloru , obrysu lub grotu strzałki : wskazuje rodzaj połączenia, np. nastroje posta lub tweeta łączące dwóch użytkowników
- Szerokość : wskazuje siłę połączenia, np. ile wzmianek lub retweetów jest obserwowanych między dwoma użytkownikami w danym okresie
Przyjrzyjmy się przykładowej wizualizacji sieci społecznościowej, aby zobaczyć, jak działają te właściwości:
Możemy również użyć tekstu najechania kursorem, aby uzupełnić lub zastąpić powyższe parametry, ponieważ może on obsługiwać inne informacje, których nie można łatwo wyrazić za pomocą właściwości węzła lub krawędzi.
Porównanie rozszerzeń sieci społecznościowych Power BI
Po zdefiniowaniu różnych funkcji danych sieci społecznościowej przyjrzyjmy się zaletom i wadom czterech popularnych narzędzi używanych do wizualizacji sieci w Power BI.
Rozbudowa | Wykres sieci społecznościowej autorstwa Arthura Grausa | Nawigator sieci | Zaawansowane sieci od ZoomCharts (Light Edition) | Wizualizacje niestandardowe za pomocą R |
---|---|---|---|---|
Dynamiczny rozmiar węzła | TAk | TAk | TAk | TAk |
Dynamiczny rozmiar krawędzi | Nie | TAk | Nie | TAk |
Dostosowanie koloru węzła | TAk | TAk | Nie | TAk |
Kompleksowe przetwarzanie sieci społecznościowych | Nie | TAk | TAk | TAk |
Obrazy profilowe dla węzłów | TAk | Nie | Nie | TAk |
Regulowany zoom | Nie | TAk | TAk | TAk |
Filtrowanie najlepszych N połączeń | Nie | Nie | Nie | TAk |
Informacje niestandardowe po najechaniu kursorem | Nie | Nie | Nie | TAk |
Dostosowanie koloru krawędzi | Nie | Nie | Nie | TAk |
Inne zaawansowane funkcje | Nie | Nie | Nie | TAk |
Social Network Graph autorstwa Arthura Grausa, Network Navigator i Advanced Networks autorstwa ZoomCharts (Light Edition) to rozszerzenia odpowiednie do tworzenia prostych sieci społecznościowych i rozpoczęcia pierwszej analizy sieci społecznościowych.
Jeśli jednak chcesz ożywić swoje dane i odkryć przełomowe spostrzeżenia za pomocą przyciągających uwagę wizualizacji lub jeśli Twoja sieć społecznościowa jest szczególnie złożona, zalecamy opracowanie niestandardowych wizualizacji w języku R.
Ta niestandardowa wizualizacja jest końcowym wynikiem rozszerzenia sieci społecznościowej naszego samouczka w języku R i demonstruje dużą różnorodność funkcji i właściwości węzłów/krawędzi oferowanych przez R.
Tworzenie rozszerzenia sieci społecznościowej dla usługi Power BI przy użyciu R
Tworzenie rozszerzenia do wizualizacji sieci społecznościowych w usłudze Power BI przy użyciu języka R składa się z pięciu odrębnych kroków. Ale zanim będziemy mogli zbudować nasze rozszerzenie sieci społecznościowej, musimy załadować nasze dane do usługi Power BI.
Warunek wstępny: zbieranie i przygotowywanie danych dla usługi Power BI
Możesz śledzić ten samouczek z testowym zestawem danych opartym na danych z Twittera i Facebooka lub kontynuować własną sieć społecznościową. Nasze dane zostały zrandomizowane; w razie potrzeby możesz pobrać prawdziwe dane z Twittera. Po zebraniu wymaganych danych dodaj je do usługi Power BI (na przykład importując skoroszyt programu Excel lub ręcznie dodając dane). Twój wynik powinien wyglądać podobnie do poniższej tabeli:
Po skonfigurowaniu danych możesz przystąpić do tworzenia niestandardowej wizualizacji.
Krok 1: Skonfiguruj szablon wizualizacji
Tworzenie wizualizacji usługi Power BI nie jest proste — nawet podstawowe wizualizacje wymagają tysięcy plików. Na szczęście Microsoft oferuje bibliotekę o nazwie pbiviz
, która dostarcza wymagane pliki wspierające infrastrukturę za pomocą zaledwie kilku linijek kodu. Biblioteka pbiviz
również wszystkie nasze końcowe pliki do pliku .pbiviz
, który możemy załadować bezpośrednio do usługi Power BI jako wizualizację.
Najprostszym sposobem na zainstalowanie pbiviz
jest użycie Node.js. Po zainstalowaniu pbiviz
musimy zainicjować naszą niestandardową wizualizację R za pomocą interfejsu wiersza poleceń naszej maszyny:
pbiviz new toptalSocialNetworkByBharatGarg -t rhtml cd toptalSocialNetworkByBharatGarg npm install pbiviz package
Nie zapomnij zastąpić toptalSocialNetworkByBharatGarg
żądaną nazwą wizualizacji. -t rhtml
informuje pakiet pbiviz
, że powinien utworzyć szablon do tworzenia wizualizacji HTML opartych na języku R. Zobaczysz błędy, ponieważ nie określiliśmy jeszcze pól, takich jak imię i nazwisko autora i adres e-mail w naszym pakiecie, ale rozwiążemy je w dalszej części samouczka. Jeśli skrypt pbiviz
w ogóle nie będzie działał w PowerShell, może być konieczne zezwolenie na skrypty za pomocą Set-ExecutionPolicy RemoteSigned
.
Po pomyślnym wykonaniu kodu zobaczysz folder o następującej strukturze:
Gdy mamy już gotową strukturę folderów, możemy napisać kod R dla naszej niestandardowej wizualizacji.
Krok 2: Zakoduj wizualizację w R
Katalog utworzony w pierwszym kroku zawiera plik o nazwie script.r
, który składa się z domyślnego kodu. (Kod domyślny tworzy proste rozszerzenie usługi Power BI, które używa przykładowej bazy danych iris
dostępnej w języku R do wykreślenia histogramu Petal.Length
według Petal.Species
). Zaktualizujemy kod, ale zachowamy jego domyślną strukturę, w tym sekcje z komentarzami.
Nasz projekt wykorzystuje trzy biblioteki R:
- DiagrammeR: Tworzy wykresy z tekstu
- visNetwork: Zapewnia interaktywne wizualizacje sieci
- data.table: Pomaga w organizacji danych, podobnie jak data.frame
Zamieńmy kod w sekcji Library Declarations
script.r
, aby odzwierciedlić nasze wykorzystanie biblioteki:
libraryRequireInstall("DiagrammeR") libraryRequireInstall("visNetwork") libraryRequireInstall("data.table")
Następnie zastąpimy kod w sekcji Actual code
naszym kodem R. Przed stworzeniem naszej wizualizacji musimy najpierw przeczytać i przetworzyć nasze dane. Z Power BI weźmiemy dwa dane wejściowe:
-
num_records
: numeryczne wejście N , takie, że wybierzemy tylko N najlepszych połączeń z naszej sieci (aby ograniczyć liczbę wyświetlanych połączeń) -
dataset
: nasze węzły i krawędzie sieci społecznościowych
Aby obliczyć N połączeń, które wykreślimy, musimy zagregować wartość num_records
, ponieważ usługa Power BI domyślnie udostępnia wektor zamiast pojedynczej wartości liczbowej. Funkcja agregacji, taka jak max
, osiąga ten cel:
limit_connection <- max(num_records)
Będziemy teraz czytać dataset
jako obiekt data.table
z niestandardowymi kolumnami. Zbiór danych sortujemy według wartości w porządku malejącym, aby najczęstsze połączenia znajdowały się na górze tabeli. Gwarantuje to, że wybieramy najważniejsze rekordy do wykreślenia, gdy ograniczamy nasze połączenia za pomocą 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))]
Następnie musimy przygotować nasze informacje o użytkowniku, tworząc i przydzielając każdemu użytkownikowi unikalne identyfikatory użytkownika ( uid
), przechowując je w nowej tabeli. Obliczamy również całkowitą liczbę użytkowników i przechowujemy te informacje w oddzielnej zmiennej o nazwie num_nodes
:
user_ids <- data.table(id = unique(c(dataset$from, dataset$to)))[, uid := 1:.N] num_nodes <- nrow(user_ids)
Zaktualizujmy nasze informacje o użytkownikach o dodatkowe właściwości, w tym:
- Liczba obserwujących (rozmiar węzła).
- Liczba rekordów.
- Typ użytkownika (kody kolorów).
- Linki awatara.
Użyjemy funkcji merge
R, aby zaktualizować tabelę:
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')
Dodajemy również nasz utworzony uid
do oryginalnego zestawu danych, dzięki czemu możemy później pobrać identyfikatory użytkowników from
to
kodu:
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)]
Następnie tworzymy ramki danych węzła i krawędzi do wizualizacji. Wybieramy style
i shape
naszych węzłów (wypełnione kółka) i wybieramy prawidłowe kolumny naszej tabeli user_ids
, aby wypełnić atrybuty color
, data
, value
i image
naszych węzłów:
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>") )
Podobnie wybieramy kolumny tabeli dataset
, które odpowiadają naszym atrybutom edge' from
, to
i color
:
edges <- create_edge_df(from = dataset$uid, to = dataset$uid_retweet, arrows = "to", color = dataset$col_sentiment)
Na koniec, mając gotowe ramki danych węzła i krawędzi, stwórzmy naszą wizualizację za pomocą biblioteki visNetwork
i przechowajmy ją w zmiennej, której później użyje domyślny kod o nazwie 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))
Tutaj dostosowujemy kilka konfiguracji wizualizacji sieci w visOptions i visPhysics. Zachęcamy do przeglądania stron dokumentacji i aktualizowania tych opcji zgodnie z potrzebami. Nasza sekcja Actual code
jest już gotowa i powinniśmy zaktualizować sekcję Create and save widget
, usuwając wiersz p = ggplotly(g);
ponieważ zakodowaliśmy naszą własną zmienną wizualizacyjną, p
.
Krok 3: Przygotuj wizualizację dla usługi Power BI
Teraz, gdy zakończyliśmy kodowanie w języku R, musimy wprowadzić pewne zmiany w obsługiwanych przez nas plikach JSON, aby przygotować wizualizację do użycia w usłudze Power BI.
Zacznijmy od pliku capabilities.json
. Zawiera większość informacji wyświetlanych na karcie Wizualizacje wizualizacji, takich jak źródła danych naszego rozszerzenia i inne ustawienia. Najpierw musimy zaktualizować dataRoles
i zastąpić istniejącą wartość nowymi rolami danych dla naszego dataset
i danych wejściowych 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" } ], # ...
W naszym pliku dataViewMappings
capabilities.json
Dodamy conditions
, które muszą spełniać nasze dane wejściowe, a także zaktualizujemy scriptResult
, aby pasował do naszych nowych ról danych i ich warunków. Zobacz sekcję conditions
wraz z sekcją select
w scriptResult
, aby uzyskać informacje o zmianach:
# ... "dataViewMappings": [ { "conditions": [ { "dataset": { "max": 20 }, "num_records": { "max": 1 } } ], "scriptResult": { "dataInput": { "table": { "rows": { "select": [ { "for": { "in": "dataset" } }, { "for": { "in": "num_records" } } ], "dataReductionAlgorithm": { "top": {} } } } }, # ...
Przejdźmy do naszego pliku dependencies.json
. W tym miejscu dodamy trzy dodatkowe pakiety w ramach cranPackages
, aby usługa Power BI mogła zidentyfikować i zainstalować wymagane biblioteki:
{ "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" },
Uwaga: usługa Power BI powinna automatycznie zainstalować te biblioteki, ale w przypadku wystąpienia błędów bibliotek spróbuj uruchomić następujące polecenie:
install.packages(c("DiagrammeR", "htmlwidgets", "visNetwork", "data.table", "xml2"))
Na koniec dodajmy odpowiednie informacje dotyczące naszej wizualizacji do pliku pbiviz.json
. Polecam zaktualizować następujące pola:
- Pole opisu wizualizacji
- Pomocniczy adres URL wizualizacji
- Adres URL GitHub wizualizacji
- Nazwisko autora
- E-mail autora
Teraz nasze pliki zostały zaktualizowane i musimy przepakować wizualizację z wiersza poleceń:
pbiviz package
Po pomyślnym wykonaniu kodu w katalogu dist
należy utworzyć plik .pbiviz
. Cały kod omówiony w tym samouczku można wyświetlić w serwisie GitHub.
Krok 4: Zaimportuj wizualizację do usługi Power BI
Aby zaimportować nową wizualizację w usłudze Power BI, otwórz raport usługi Power BI (albo jeden dla istniejących danych, albo jeden utworzony w kroku Wymagania wstępne z danymi testowymi) i przejdź do karty Wizualizacje . Kliknij przycisk … [więcej opcji] i wybierz opcję Importuj wizualizację z pliku . Uwaga: może być konieczne najpierw wybranie w przeglądarce opcji Edytuj , aby karta Wizualizacje była widoczna.
Przejdź do katalogu dist
folderu wizualizacji i wybierz plik .pbiviz
, aby bezproblemowo załadować wizualizację do usługi Power BI.
Krok 5: Utwórz wizualizację w Power BI
Zaimportowana wizualizacja jest teraz dostępna w okienku wizualizacji. Kliknij ikonę wizualizacji, aby dodać ją do raportu, a następnie dodaj odpowiednie kolumny do dataset
i danych wejściowych num_records
:
Możesz dodać do wizualizacji dodatkowy tekst, filtry i funkcje w zależności od wymagań projektu. Zalecam również przejrzenie szczegółowej dokumentacji trzech bibliotek R, których użyliśmy do dalszego ulepszania wizualizacji, ponieważ nasz przykładowy projekt nie może objąć wszystkich przypadków użycia dostępnych funkcji.
Uaktualnianie następnej analizy sieci społecznościowych
Nasz wynik końcowy jest świadectwem mocy i wydajności języka R, jeśli chodzi o tworzenie niestandardowych wizualizacji usługi Power BI. Wypróbuj analizę sieci społecznościowych przy użyciu niestandardowych wizualizacji w języku R na następnym zestawie danych i podejmuj mądrzejsze decyzje dzięki wszechstronnym analizom danych.
Blog Toptal Engineering wyraża wdzięczność Leandro Roserowi za przejrzenie próbek kodu przedstawionych w tym artykule.