Social Network Analysis Using Power BI and R: A Custom Visuals Guide
Veröffentlicht: 2022-07-22Die Analyse sozialer Netzwerke wird schnell zu einem wichtigen Werkzeug, um eine Vielzahl von beruflichen Anforderungen zu erfüllen. Es kann Unternehmensziele wie gezieltes Marketing informieren und Sicherheits- oder Reputationsrisiken identifizieren. Die Analyse sozialer Netzwerke kann Unternehmen auch dabei helfen, interne Ziele zu erreichen: Sie bietet Einblicke in das Verhalten der Mitarbeiter und die Beziehungen zwischen verschiedenen Teilen eines Unternehmens.
Organisationen können eine Reihe von Softwarelösungen für die Analyse sozialer Netzwerke einsetzen; Jedes hat seine Vor- und Nachteile und ist für unterschiedliche Zwecke geeignet. Dieser Artikel konzentriert sich auf Power BI von Microsoft, eines der heute am häufigsten verwendeten Tools zur Datenvisualisierung. Während Power BI viele Add-Ons für soziale Netzwerke bietet, untersuchen wir benutzerdefinierte Visuals in R, um überzeugendere und flexiblere Ergebnisse zu erzielen.
Dieses Tutorial setzt ein Verständnis der grundlegenden Graphentheorie voraus, insbesondere gerichteter Graphen. Außerdem eignen sich spätere Schritte am besten für Power BI Desktop, das nur unter Windows verfügbar ist. Leser können den Power BI-Browser unter Mac OS oder Linux verwenden, aber der Power BI-Browser unterstützt bestimmte Funktionen nicht, z. B. das Importieren einer Excel-Arbeitsmappe.
Daten zur Visualisierung strukturieren
Die Erstellung sozialer Netzwerke beginnt mit der Erfassung von Verbindungsdaten (Edge). Verbindungsdaten enthalten zwei primäre Felder: den Quellknoten und den Zielknoten – die Knoten an beiden Enden der Kante. Über diese Knoten hinaus können wir Daten sammeln, um umfassendere visuelle Erkenntnisse zu gewinnen, die typischerweise als Knoten- oder Kanteneigenschaften dargestellt werden:
1) Knoteneigenschaften
- Form oder Farbe : Gibt die Art des Benutzers an, z. B. Standort/Land des Benutzers
- Größe : Zeigt die Wichtigkeit im Netzwerk an, zB die Anzahl der Follower des Nutzers
- Bild : Funktioniert als individuelle Kennung, z. B. der Avatar eines Benutzers
2) Kanteneigenschaften
- Farbe , Strich oder Pfeilspitze : Zeigt die Art der Verbindung an, z. B. die Stimmung des Posts oder Tweets, die die beiden Benutzer verbindet
- Breite : Gibt die Stärke der Verbindung an, z. B. wie viele Erwähnungen oder Retweets zwischen zwei Benutzern in einem bestimmten Zeitraum beobachtet werden
Sehen wir uns ein Beispielbild für ein soziales Netzwerk an, um zu sehen, wie diese Eigenschaften funktionieren:
Wir können auch Schwebetext verwenden, um die obigen Parameter zu ergänzen oder zu ersetzen, da er andere Informationen unterstützen kann, die nicht einfach durch Knoten- oder Kanteneigenschaften ausgedrückt werden können.
Vergleich der Erweiterungen für soziale Netzwerke von Power BI
Nachdem wir die verschiedenen Datenfeatures eines sozialen Netzwerks definiert haben, untersuchen wir die Vor- und Nachteile von vier beliebten Tools, die zur Visualisierung von Netzwerken in Power BI verwendet werden.
Verlängerung | Social Network Graph von Arthur Graus | Netzwerknavigator | Erweiterte Netzwerke von ZoomCharts (Light Edition) | Benutzerdefinierte Visualisierungen mit R |
---|---|---|---|---|
Dynamische Knotengröße | Ja | Ja | Ja | Ja |
Dynamische Randgröße | Nein | Ja | Nein | Ja |
Anpassung der Knotenfarbe | Ja | Ja | Nein | Ja |
Komplexe Verarbeitung sozialer Netzwerke | Nein | Ja | Ja | Ja |
Profilbilder für Knoten | Ja | Nein | Nein | Ja |
Einstellbarer Zoom | Nein | Ja | Ja | Ja |
Top-N-Verbindungsfilterung | Nein | Nein | Nein | Ja |
Benutzerdefinierte Informationen beim Hover | Nein | Nein | Nein | Ja |
Anpassung der Kantenfarbe | Nein | Nein | Nein | Ja |
Andere erweiterte Funktionen | Nein | Nein | Nein | Ja |
Social Network Graph von Arthur Graus, Network Navigator und Advanced Networks von ZoomCharts (Light Edition) sind alle geeignete Erweiterungen, um einfache soziale Netzwerke zu entwickeln und mit Ihrer ersten Analyse sozialer Netzwerke zu beginnen.
Wenn Sie jedoch Ihre Daten zum Leben erwecken und bahnbrechende Erkenntnisse mit aufmerksamkeitsstarken Visuals aufdecken möchten oder wenn Ihr soziales Netzwerk besonders komplex ist, empfehle ich Ihnen, Ihre benutzerdefinierten Visuals in R zu entwickeln.
Diese benutzerdefinierte Visualisierung ist das Endergebnis der Social-Network-Erweiterung unseres Tutorials in R und demonstriert die große Vielfalt an Features und Knoten-/Edge-Eigenschaften, die von R angeboten werden.
Erstellen einer Erweiterung für soziale Netzwerke für Power BI mit R
Das Erstellen einer Erweiterung zur Visualisierung sozialer Netzwerke in Power BI mit R umfasst fünf verschiedene Schritte. Aber bevor wir unsere Erweiterung für soziale Netzwerke erstellen können, müssen wir unsere Daten in Power BI laden.
Voraussetzung: Sammeln und Vorbereiten von Daten für Power BI
Sie können diesem Tutorial mit einem Testdatensatz folgen, der auf Twitter- und Facebook-Daten basiert, oder mit Ihrem eigenen sozialen Netzwerk fortfahren. Unsere Daten wurden randomisiert; Sie können auf Wunsch echte Twitter-Daten herunterladen. Nachdem Sie die erforderlichen Daten erfasst haben, fügen Sie sie Power BI hinzu (z. B. durch Importieren einer Excel-Arbeitsmappe oder manuelles Hinzufügen von Daten). Ihr Ergebnis sollte der folgenden Tabelle ähneln:
Sobald Sie Ihre Daten eingerichtet haben, können Sie eine benutzerdefinierte Visualisierung erstellen.
Schritt 1: Richten Sie die Visualisierungsvorlage ein
Die Entwicklung einer Power BI-Visualisierung ist nicht einfach – selbst einfache Visualisierungen erfordern Tausende von Dateien. Glücklicherweise bietet Microsoft eine Bibliothek namens pbiviz
an, die die erforderlichen infrastrukturunterstützenden Dateien mit nur wenigen Codezeilen bereitstellt. Die pbiviz
Bibliothek verpackt auch alle unsere endgültigen Dateien in eine .pbiviz
-Datei, die wir als Visualisierung direkt in Power BI laden können.
Am einfachsten lässt sich pbiviz
mit Node.js installieren. Sobald pbiviz
installiert ist, müssen wir unser benutzerdefiniertes R-Visual über die Befehlszeilenschnittstelle unseres Computers initialisieren:
pbiviz new toptalSocialNetworkByBharatGarg -t rhtml cd toptalSocialNetworkByBharatGarg npm install pbiviz package
Vergessen Sie nicht, toptalSocialNetworkByBharatGarg
durch den gewünschten Namen für Ihre Visualisierung zu ersetzen. -t rhtml
informiert das pbiviz
Paket, dass es eine Vorlage erstellen soll, um R-basierte HTML-Visualisierungen zu entwickeln. Sie werden Fehler sehen, weil wir noch keine Felder wie den Namen und die E-Mail-Adresse des Autors in unserem Paket angegeben haben, aber wir werden diese später im Tutorial beheben. Wenn das pbiviz
Skript überhaupt nicht in PowerShell ausgeführt wird, müssen Sie möglicherweise zuerst Skripts mit Set-ExecutionPolicy RemoteSigned
.
Bei erfolgreicher Ausführung des Codes sehen Sie einen Ordner mit folgender Struktur:
Sobald wir die Ordnerstruktur fertig haben, können wir den R-Code für unsere benutzerdefinierte Visualisierung schreiben.
Schritt 2: Codieren Sie die Visualisierung in R
Das im ersten Schritt erstellte Verzeichnis enthält eine Datei namens script.r
, die aus Standardcode besteht. (Der Standardcode erstellt eine einfache Power BI-Erweiterung, die die in R verfügbare iris
-Beispieldatenbank verwendet, um ein Histogramm von Petal.Length
nach Petal.Species
zu zeichnen.) Wir aktualisieren den Code, behalten aber seine Standardstruktur bei, einschließlich der kommentierten Abschnitte.
Unser Projekt verwendet drei R-Bibliotheken:
- DiagrammeR: Erstellt Diagramme aus Text
- visNetwork: Bietet interaktive Netzwerkvisualisierungen
- data.table: Hilft bei der Datenorganisation, ähnlich wie data.frame
Lassen Sie uns den Code im Abschnitt „ Library Declarations
“ von script.r
, um unsere Bibliotheksnutzung widerzuspiegeln:
libraryRequireInstall("DiagrammeR") libraryRequireInstall("visNetwork") libraryRequireInstall("data.table")
Als nächstes ersetzen wir den Code im Abschnitt Actual code
durch unseren R-Code. Bevor wir unsere Visualisierung erstellen, müssen wir zunächst unsere Daten lesen und verarbeiten. Wir nehmen zwei Eingaben von Power BI:
-
num_records
: Die numerische Eingabe N , sodass wir nur die Top- N -Verbindungen aus unserem Netzwerk auswählen (um die Anzahl der angezeigten Verbindungen zu begrenzen) -
dataset
: Unsere sozialen Netzwerkknoten und -kanten
Um die N Verbindungen zu berechnen, die wir darstellen werden, müssen wir den Wert num_records
aggregieren, da Power BI standardmäßig einen Vektor anstelle eines einzelnen numerischen Werts bereitstellt. Eine Aggregationsfunktion wie max
erreicht dieses Ziel:
limit_connection <- max(num_records)
Wir werden dataset
jetzt als data.table
Objekt mit benutzerdefinierten Spalten lesen. Wir sortieren den Datensatz nach Wert in absteigender Reihenfolge, um die häufigsten Verbindungen oben in der Tabelle zu platzieren. Dadurch wird sichergestellt, dass wir die wichtigsten Datensätze zum Plotten auswählen, wenn wir unsere Verbindungen mit 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))]
Als nächstes müssen wir unsere Benutzerinformationen vorbereiten, indem wir jedem Benutzer eindeutige Benutzer-IDs ( uid
) erstellen und zuweisen und diese in einer neuen Tabelle speichern. Wir berechnen auch die Gesamtzahl der Benutzer und speichern diese Informationen in einer separaten Variablen namens num_nodes
:
user_ids <- data.table(id = unique(c(dataset$from, dataset$to)))[, uid := 1:.N] num_nodes <- nrow(user_ids)
Aktualisieren wir unsere Benutzerinformationen mit zusätzlichen Eigenschaften, darunter:
- Die Anzahl der Follower (Größe des Knotens).
- Die Anzahl der Datensätze.
- Der Benutzertyp (Farbcodes).
- Avatar-Links.
Wir werden die merge
von R verwenden, um die Tabelle zu aktualisieren:
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')
Wir fügen auch unsere erstellte uid
zum ursprünglichen Datensatz hinzu, damit wir die Benutzer-IDs from
und to
später im Code abrufen können:
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)]
Als nächstes erstellen wir Knoten- und Kantendatenrahmen für die Visualisierung. Wir wählen den style
und die shape
unserer Knoten (gefüllte Kreise) und wählen die richtigen Spalten unserer Tabelle user_ids
aus, um die Attribute color
, data
, value
und image
unserer Knoten zu füllen:
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>") )
Auf ähnliche Weise wählen wir die Spalten der dataset
aus, die den Attributen from
, to
und color
unserer Kanten entsprechen:
edges <- create_edge_df(from = dataset$uid, to = dataset$uid_retweet, arrows = "to", color = dataset$col_sentiment)
Nachdem die Knoten- und Kantendatenrahmen fertig sind, erstellen wir schließlich unsere Visualisierung mit der visNetwork
Bibliothek und speichern sie in einer Variablen namens p
, die der Standardcode später verwenden wird:
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))
Hier passen wir einige Netzwerkvisualisierungskonfigurationen in visOptions und visPhysics an. Fühlen Sie sich frei, die Dokumentationsseiten durchzusehen und diese Optionen nach Bedarf zu aktualisieren. Unser Abschnitt Actual code
ist jetzt vollständig, und wir sollten den Abschnitt Create and save widget
aktualisieren, indem wir die Zeile p = ggplotly(g);
da wir unsere eigene Visualisierungsvariable p
kodiert haben.
Schritt 3: Bereiten Sie die Visualisierung für Power BI vor
Nachdem wir die Codierung in R abgeschlossen haben, müssen wir bestimmte Änderungen an unseren unterstützenden JSON-Dateien vornehmen, um die Visualisierung für die Verwendung in Power BI vorzubereiten.
Beginnen wir mit der capabilities.json
-Datei. Es enthält die meisten Informationen, die Sie auf der Registerkarte „ Visualisierungen “ für ein Visual sehen, z. B. die Datenquellen unserer Erweiterung und andere Einstellungen. Zuerst müssen wir dataRoles
aktualisieren und den vorhandenen Wert durch neue Datenrollen für unsere dataset
und num_records
Eingaben ersetzen:
# ... "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" } ], # ...
In unserer capabilities.json
-Datei aktualisieren wir auch den Abschnitt dataViewMappings
. Wir fügen conditions
hinzu, denen unsere Eingaben entsprechen müssen, und aktualisieren scriptResult
, damit es unseren neuen Datenrollen und ihren Bedingungen entspricht. Änderungen finden Sie im Abschnitt " conditions
" zusammen mit dem Abschnitt " select
" unter scriptResult
:
# ... "dataViewMappings": [ { "conditions": [ { "dataset": { "max": 20 }, "num_records": { "max": 1 } } ], "scriptResult": { "dataInput": { "table": { "rows": { "select": [ { "for": { "in": "dataset" } }, { "for": { "in": "num_records" } } ], "dataReductionAlgorithm": { "top": {} } } } }, # ...
Kommen wir zu unserer Datei " dependencies.json
". Hier fügen wir drei zusätzliche Pakete unter cranPackages
, damit Power BI die erforderlichen Bibliotheken identifizieren und installieren kann:
{ "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" },
Hinweis: Power BI sollte diese Bibliotheken automatisch installieren, aber wenn Bibliotheksfehler auftreten, versuchen Sie, den folgenden Befehl auszuführen:
install.packages(c("DiagrammeR", "htmlwidgets", "visNetwork", "data.table", "xml2"))
Zuletzt fügen wir der Datei pbiviz.json
relevante Informationen für unser Visual hinzu. Ich würde empfehlen, die folgenden Felder zu aktualisieren:
- Das Beschreibungsfeld des Visuals
- Die Support-URL des Visuals
- Die GitHub-URL des Visuals
- Der Name des Autors
- E-Mail des Autors
Jetzt wurden unsere Dateien aktualisiert und wir müssen die Visualisierung über die Befehlszeile neu packen:
pbiviz package
Bei erfolgreicher Ausführung des Codes sollte eine .pbiviz
-Datei im dist
-Verzeichnis erstellt werden. Der gesamte in diesem Tutorial behandelte Code kann auf GitHub angezeigt werden.
Schritt 4: Importieren Sie die Visualisierung in Power BI
Um Ihre neue Visualisierung in Power BI zu importieren, öffnen Sie Ihren Power BI-Bericht (entweder einen für vorhandene Daten oder einen, der während unseres Schritts Voraussetzung mit Testdaten erstellt wurde) und navigieren Sie zur Registerkarte Visualisierungen . Klicken Sie auf die Schaltfläche … [weitere Optionen] und wählen Sie Visual aus einer Datei importieren aus . Hinweis: Möglicherweise müssen Sie zuerst in einem Browser Bearbeiten auswählen, damit die Registerkarte „ Visualisierungen “ angezeigt wird.
Navigieren Sie zum dist
-Verzeichnis Ihres Visualisierungsordners und wählen Sie die .pbiviz
-Datei aus, um Ihr Visual nahtlos in Power BI zu laden.
Schritt 5: Erstellen Sie die Visualisierung in Power BI
Die importierte Visualisierung ist jetzt im Visualisierungsbereich verfügbar. Klicken Sie auf das Visualisierungssymbol, um es zu Ihrem Bericht hinzuzufügen, und fügen Sie dann relevante Spalten zu den Eingaben dataset
und num_records
:
Je nach Ihren Projektanforderungen können Sie Ihrer Visualisierung zusätzlichen Text, Filter und Funktionen hinzufügen. Ich empfehle Ihnen außerdem, die ausführliche Dokumentation zu den drei von uns verwendeten R-Bibliotheken durchzugehen, um Ihre Visualisierungen weiter zu verbessern, da unser Beispielprojekt nicht alle Anwendungsfälle der verfügbaren Funktionen abdecken kann.
Aktualisieren Sie Ihre nächste Analyse sozialer Netzwerke
Unser Endergebnis ist ein Beweis für die Leistungsfähigkeit und Effizienz von R bei der Erstellung benutzerdefinierter Power BI-Visualisierungen. Probieren Sie die Analyse sozialer Netzwerke mit benutzerdefinierten Visualisierungen in R für Ihren nächsten Datensatz aus und treffen Sie intelligentere Entscheidungen mit umfassenden Datenerkenntnissen.
Der Toptal Engineering Blog dankt Leandro Roser für die Überprüfung der in diesem Artikel vorgestellten Codebeispiele.