Analisi dei social network con Power BI e R: una guida agli elementi visivi personalizzati
Pubblicato: 2022-07-22L'analisi dei social network sta rapidamente diventando uno strumento importante per soddisfare una varietà di esigenze professionali. Può informare gli obiettivi aziendali come il marketing mirato e identificare i rischi per la sicurezza o la reputazione. L'analisi dei social network può anche aiutare le aziende a raggiungere gli obiettivi interni: fornisce informazioni dettagliate sui comportamenti dei dipendenti e sulle relazioni tra le diverse parti di un'azienda.
Le organizzazioni possono utilizzare una serie di soluzioni software per l'analisi dei social network; ognuno ha i suoi pro e contro ed è adatto a scopi diversi. Questo articolo è incentrato su Power BI di Microsoft, uno degli strumenti di visualizzazione dei dati più comunemente utilizzati oggi. Sebbene Power BI offra molti componenti aggiuntivi di social network, esploreremo gli oggetti visivi personalizzati in R per creare risultati più accattivanti e flessibili.
Questo tutorial presuppone una comprensione della teoria dei grafi di base, in particolare dei grafi diretti. Inoltre, i passaggi successivi sono più adatti per Power BI Desktop, disponibile solo in Windows. I lettori possono usare il browser Power BI su Mac OS o Linux, ma il browser Power BI non supporta alcune funzionalità, come l'importazione di una cartella di lavoro di Excel.
Strutturazione dei dati per la visualizzazione
La creazione di social network inizia con la raccolta dei dati di connessione (edge). I dati di Connections contengono due campi primari: il nodo di origine e il nodo di destinazione , i nodi alle due estremità del bordo. Oltre a questi nodi, possiamo raccogliere dati per produrre approfondimenti visivi più completi, tipicamente rappresentati come proprietà del nodo o del bordo:
1) Proprietà del nodo
- Forma o colore : indica il tipo di utente, ad esempio la località/paese dell'utente
- Dimensione : Indica l'importanza nella rete, ad esempio il numero di follower dell'utente
- Immagine : funziona come un identificatore individuale, ad esempio l'avatar di un utente
2) Proprietà del bordo
- Colore , tratto o connessione a punta di freccia : indica il tipo di connessione, ad esempio il sentimento del post o del tweet che collega i due utenti
- Larghezza : indica la forza della connessione, ad esempio quante menzioni o retweet vengono osservate tra due utenti in un determinato periodo
Esaminiamo un esempio visivo di social network per vedere come funzionano queste proprietà:
Possiamo anche utilizzare il testo al passaggio del mouse per integrare o sostituire i parametri precedenti, poiché può supportare altre informazioni che non possono essere facilmente espresse tramite le proprietà del nodo o del bordo.
Confronto delle estensioni dei social network di Power BI
Dopo aver definito le diverse caratteristiche dei dati di un social network, esaminiamo i pro ei contro di quattro strumenti popolari usati per visualizzare le reti in Power BI.
Estensione | Grafico dei social network di Arthur Graus | Navigatore di rete | Reti avanzate di ZoomCharts (edizione leggera) | Visualizzazioni personalizzate utilizzando R |
---|---|---|---|---|
Dimensione del nodo dinamico | sì | sì | sì | sì |
Dimensione bordo dinamico | No | sì | No | sì |
Personalizzazione del colore del nodo | sì | sì | No | sì |
Elaborazione complessa dei social network | No | sì | sì | sì |
Immagini del profilo per i nodi | sì | No | No | sì |
Zoom regolabile | No | sì | sì | sì |
Filtraggio delle prime N connessioni | No | No | No | sì |
Informazioni personalizzate al passaggio del mouse | No | No | No | sì |
Personalizzazione del colore del bordo | No | No | No | sì |
Altre funzionalità avanzate | No | No | No | sì |
Social Network Graph di Arthur Graus, Network Navigator e Advanced Networks di ZoomCharts (Light Edition) sono tutte estensioni adatte per sviluppare semplici social network e iniziare con la tua prima analisi del social network.
Tuttavia, se vuoi dare vita ai tuoi dati e scoprire intuizioni rivoluzionarie con elementi visivi che catturano l'attenzione, o se il tuo social network è particolarmente complesso, ti consiglio di sviluppare i tuoi elementi visivi personalizzati in R.
Questa visualizzazione personalizzata è il risultato finale dell'estensione del social network del nostro tutorial in R e dimostra l'ampia varietà di funzionalità e proprietà nodo/bordo offerte da R.
Creazione di un'estensione di social network per Power BI utilizzando R
La creazione di un'estensione per visualizzare i social network in Power BI usando R comprende cinque passaggi distinti. Ma prima di poter creare la nostra estensione di social network, dobbiamo caricare i nostri dati in Power BI.
Prerequisito: raccogliere e preparare i dati per Power BI
Puoi seguire questo tutorial con un set di dati di prova basato sui dati di Twitter e Facebook o procedere con il tuo social network. I nostri dati sono stati randomizzati; puoi scaricare dati reali di Twitter se lo desideri. Dopo aver raccolto i dati richiesti, aggiungili a Power BI (ad esempio, importando una cartella di lavoro di Excel o aggiungendo dati manualmente). Il risultato dovrebbe essere simile alla tabella seguente:
Una volta impostati i dati, sei pronto per creare una visualizzazione personalizzata.
Passaggio 1: imposta il modello di visualizzazione
Lo sviluppo di una visualizzazione Power BI non è semplice, anche gli oggetti visivi di base richiedono migliaia di file. Fortunatamente, Microsoft offre una libreria chiamata pbiviz
, che fornisce i file di supporto dell'infrastruttura richiesti con solo poche righe di codice. La libreria pbiviz
anche tutti i nostri file finali in un file con .pbiviz
che possiamo caricare direttamente in Power BI come visualizzazione.
Il modo più semplice per installare pbiviz
è con Node.js. Una volta installato pbiviz
, dobbiamo inizializzare il nostro visual R personalizzato tramite l'interfaccia della riga di comando della nostra macchina:
pbiviz new toptalSocialNetworkByBharatGarg -t rhtml cd toptalSocialNetworkByBharatGarg npm install pbiviz package
Non dimenticare di sostituire toptalSocialNetworkByBharatGarg
con il nome desiderato per la visualizzazione. -t rhtml
informa il pacchetto pbiviz
che dovrebbe creare un modello per sviluppare visualizzazioni HTML basate su R. Vedrai errori perché non abbiamo ancora specificato campi come il nome dell'autore e l'e-mail nel nostro pacchetto, ma li risolveremo più avanti nel tutorial. Se lo script pbiviz
non viene eseguito affatto in PowerShell, potrebbe essere necessario prima consentire gli script con Set-ExecutionPolicy RemoteSigned
.
Al termine dell'esecuzione del codice, vedrai una cartella con la seguente struttura:
Una volta che abbiamo la struttura delle cartelle pronta, possiamo scrivere il codice R per la nostra visualizzazione personalizzata.
Passaggio 2: codificare la visualizzazione in R
La directory creata nel primo passaggio contiene un file denominato script.r
, che consiste nel codice predefinito. (Il codice predefinito crea una semplice estensione Power BI, che usa il database di esempio iris
disponibile in R per tracciare un istogramma di Petal.Length
di Petal.Species
.) Aggiorneremo il codice ma manterremo la sua struttura predefinita, incluse le sezioni commentate.
Il nostro progetto utilizza tre librerie R:
- DiagrammeR: crea grafici dal testo
- visNetwork: fornisce visualizzazioni di rete interattive
- data.table: aiuta con l'organizzazione dei dati, simile a data.frame
Sostituiamo il codice nella sezione Library Declarations
della libreria di script.r
per riflettere l'utilizzo della nostra libreria:
libraryRequireInstall("DiagrammeR") libraryRequireInstall("visNetwork") libraryRequireInstall("data.table")
Successivamente, sostituiremo il codice nella sezione Actual code
con il nostro codice R. Prima di creare la nostra visualizzazione, dobbiamo prima leggere ed elaborare i nostri dati. Prenderemo due input da Power BI:
-
num_records
: l'input numerico N , tale da selezionare solo le prime N connessioni dalla nostra rete (per limitare il numero di connessioni visualizzate) -
dataset
di dati: i nostri nodi e bordi del social network
Per calcolare le N connessioni che verranno tracciate, è necessario aggregare il valore num_records
perché Power BI fornirà un vettore per impostazione predefinita anziché un singolo valore numerico. Una funzione di aggregazione come max
raggiunge questo obiettivo:
limit_connection <- max(num_records)
Ora leggeremo il set di dataset
come un oggetto data.table
con colonne personalizzate. Ordiniamo il set di dati per valore in ordine decrescente per posizionare le connessioni più frequenti in cima alla tabella. Ciò garantisce che scegliamo i record più importanti da tracciare quando limitiamo le nostre connessioni con 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))]
Successivamente, dobbiamo preparare le nostre informazioni sull'utente creando e assegnando ID utente univoci ( uid
) a ciascun utente, memorizzandoli in una nuova tabella. Calcoliamo anche il numero totale di utenti e memorizziamo tali informazioni in una variabile separata chiamata num_nodes
:
user_ids <- data.table(id = unique(c(dataset$from, dataset$to)))[, uid := 1:.N] num_nodes <- nrow(user_ids)
Aggiorniamo le nostre informazioni sull'utente con proprietà aggiuntive, tra cui:
- Il numero di follower (dimensione del nodo).
- Il numero di record.
- Il tipo di utente (codici colore).
- Collegamenti avatar.
Useremo la funzione di merge
di R per aggiornare la tabella:
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')
Aggiungiamo anche il nostro uid
creato al set di dati originale in modo da poter recuperare gli ID utente from
e to
più avanti nel codice:
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)]
Successivamente, creiamo frame di dati di nodi e bordi per la visualizzazione. Scegliamo lo style
e la shape
dei nostri nodi (cerchi pieni) e selezioniamo le colonne corrette della nostra tabella user_ids
per popolare gli attributi color
, data
, value
e image
dei nostri nodi:
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>") )
Allo stesso modo, selezioniamo le colonne della tabella del dataset
di dati che corrispondono agli attributi from
, to
e color
dei nostri bordi:
edges <- create_edge_df(from = dataset$uid, to = dataset$uid_retweet, arrows = "to", color = dataset$col_sentiment)
Infine, con i frame di dati del nodo e del bordo pronti, creiamo la nostra visualizzazione utilizzando la libreria visNetwork
e memorizziamola in una variabile che il codice di default utilizzerà in seguito, chiamata 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))
Qui personalizziamo alcune configurazioni di visualizzazione della rete in visOptions e visPhysics. Sentiti libero di guardare le pagine della documentazione e aggiornare queste opzioni come desideri. La nostra sezione Actual code
è ora completa e dovremmo aggiornare la sezione Create and save widget
rimuovendo la riga p = ggplotly(g);
poiché abbiamo codificato la nostra variabile di visualizzazione, p
.
Passaggio 3: preparare la visualizzazione per Power BI
Ora che abbiamo terminato la codifica in R, dobbiamo apportare alcune modifiche ai nostri file JSON di supporto per preparare la visualizzazione per l'uso in Power BI.
Iniziamo con il capabilities.json
. Include la maggior parte delle informazioni che vedi nella scheda Visualizzazioni per un oggetto visivo, come le origini dati della nostra estensione e altre impostazioni. Innanzitutto, dobbiamo aggiornare dataRoles
e sostituire il valore esistente con nuovi ruoli dati per il nostro dataset
di dati e input 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" } ], # ...
Nel nostro capabilities.json
capacity.json, aggiorniamo anche la sezione dataViewMappings
. Aggiungeremo le conditions
a cui i nostri input devono attenersi e aggiorneremo lo scriptResult
in modo che corrisponda ai nostri nuovi ruoli dati e alle relative condizioni. Vedere la sezione delle conditions
, insieme alla sezione select
in scriptResult
, per le modifiche:
# ... "dataViewMappings": [ { "conditions": [ { "dataset": { "max": 20 }, "num_records": { "max": 1 } } ], "scriptResult": { "dataInput": { "table": { "rows": { "select": [ { "for": { "in": "dataset" } }, { "for": { "in": "num_records" } } ], "dataReductionAlgorithm": { "top": {} } } } }, # ...
Passiamo al nostro file dependencies.json
. Qui aggiungeremo tre pacchetti aggiuntivi in cranPackages
in modo che Power BI possa identificare e installare le librerie richieste:
{ "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" },
Nota: Power BI dovrebbe installare automaticamente queste librerie, ma se si verificano errori di libreria, provare a eseguire il comando seguente:
install.packages(c("DiagrammeR", "htmlwidgets", "visNetwork", "data.table", "xml2"))
Infine, aggiungiamo le informazioni rilevanti per il nostro visual al file pbiviz.json
. Ti consiglio di aggiornare i seguenti campi:
- Il campo della descrizione dell'oggetto visivo
- URL di supporto dell'oggetto visivo
- L'URL GitHub dell'oggetto visivo
- Il nome dell'autore
- L'e-mail dell'autore
Ora i nostri file sono stati aggiornati e dobbiamo riconfezionare la visualizzazione dalla riga di comando:
pbiviz package
Dopo aver eseguito correttamente il codice, è necessario creare un file .pbiviz
nella directory dist
. L'intero codice trattato in questo tutorial può essere visualizzato su GitHub.
Passaggio 4: importa la visualizzazione in Power BI
Per importare la tua nuova visualizzazione in Power BI, apri il tuo report Power BI (uno per i dati esistenti o uno creato durante il nostro passaggio Prerequisito con dati di test) e vai alla scheda Visualizzazioni . Fare clic sul pulsante … [altre opzioni] e selezionare Importa un oggetto visivo da un file . Nota: potrebbe essere necessario selezionare prima Modifica in un browser affinché la scheda Visualizzazioni sia visibile.
Passare alla directory dist
della cartella di visualizzazione e selezionare il file .pbiviz
per caricare senza problemi l'oggetto visivo in Power BI.
Passaggio 5: creare la visualizzazione in Power BI
La visualizzazione importata è ora disponibile nel riquadro Visualizzazioni. Fare clic sull'icona di visualizzazione per aggiungerla al report, quindi aggiungere colonne pertinenti al set di dataset
e num_records
:
È possibile aggiungere testo, filtri e funzionalità aggiuntivi alla visualizzazione in base ai requisiti del progetto. Ti consiglio inoltre di consultare la documentazione dettagliata per le tre librerie R che abbiamo utilizzato per migliorare ulteriormente le tue visualizzazioni, poiché il nostro progetto di esempio non può coprire tutti i casi d'uso delle funzioni disponibili.
Aggiornare la tua prossima analisi del social network
Il nostro risultato finale è una testimonianza della potenza e dell'efficienza di R quando si tratta di creare visualizzazioni Power BI personalizzate. Prova l'analisi dei social network utilizzando elementi visivi personalizzati in R sul tuo prossimo set di dati e prendi decisioni più intelligenti con informazioni dettagliate sui dati.
Il Toptal Engineering Blog estende la sua gratitudine a Leandro Roser per aver esaminato gli esempi di codice presentati in questo articolo.