Analiza rețelelor sociale folosind Power BI și R: un ghid vizual personalizat
Publicat: 2022-07-22Analiza rețelelor sociale devine rapid un instrument important pentru a servi o varietate de nevoi profesionale. Poate informa obiectivele corporative, cum ar fi marketingul direcționat și poate identifica riscurile de securitate sau de reputație. Analiza rețelelor sociale poate ajuta, de asemenea, companiile să își atingă obiectivele interne: oferă o perspectivă asupra comportamentelor angajaților și a relațiilor dintre diferitele părți ale unei companii.
Organizațiile pot folosi o serie de soluții software pentru analiza rețelelor sociale; fiecare are avantajele și dezavantajele sale și este potrivit pentru scopuri diferite. Acest articol se concentrează pe Power BI de la Microsoft, unul dintre cele mai frecvent utilizate instrumente de vizualizare a datelor astăzi. În timp ce Power BI oferă multe suplimente pentru rețelele sociale, vom explora elementele vizuale personalizate în R pentru a crea rezultate mai convingătoare și mai flexibile.
Acest tutorial presupune o înțelegere a teoriei de bază a graficelor, în special a graficelor direcționate. De asemenea, pașii de mai târziu sunt cei mai potriviti pentru Power BI Desktop, care este disponibil numai pe Windows. Cititorii pot folosi browserul Power BI pe Mac OS sau Linux, dar browserul Power BI nu acceptă anumite caracteristici, cum ar fi importarea unui registru de lucru Excel.
Structurarea datelor pentru vizualizare
Crearea rețelelor sociale începe cu colectarea datelor de conexiuni (de margine). Datele de conexiuni conțin două câmpuri primare: nodul sursă și nodul țintă — nodurile de la fiecare capăt al marginii. Dincolo de aceste noduri, putem colecta date pentru a produce perspective vizuale mai cuprinzătoare, reprezentate de obicei ca proprietăți de nod sau margine:
1) Proprietățile nodului
- Forma sau culoarea : indică tipul de utilizator, de exemplu, locația/țara utilizatorului
- Dimensiune : Indică importanța în rețea, de exemplu, numărul de urmăritori ai utilizatorului
- Imagine : funcționează ca un identificator individual, de exemplu, avatarul unui utilizator
2) Proprietățile marginii
- Conexiune culoare , contur sau vârf de săgeată : indică tipul de conexiune, de exemplu, sentimentul postării sau tweet-ului care conectează cei doi utilizatori
- Lățime : indică puterea conexiunii, de exemplu, câte mențiuni sau retweet-uri sunt observate între doi utilizatori într-o anumită perioadă
Să inspectăm un exemplu vizual de rețea socială pentru a vedea cum funcționează aceste proprietăți:
De asemenea, putem folosi textul hover pentru a completa sau înlocui parametrii de mai sus, deoarece poate suporta alte informații care nu pot fi exprimate cu ușurință prin proprietățile nodului sau marginii.
Comparând extensiile de rețele sociale ale Power BI
După ce am definit diferitele caracteristici de date ale unei rețele sociale, să examinăm avantajele și dezavantajele a patru instrumente populare utilizate pentru a vizualiza rețelele în Power BI.
Extensie | Graficul rețelei sociale de Arthur Graus | Navigator de rețea | Rețele avansate de la ZoomCharts (ediție ușoară) | Vizualizări personalizate folosind R |
---|---|---|---|---|
Dimensiunea nodului dinamic | da | da | da | da |
Dimensiunea marginii dinamice | Nu | da | Nu | da |
Personalizarea culorii nodului | da | da | Nu | da |
Procesare complexă a rețelelor sociale | Nu | da | da | da |
Imagini de profil pentru noduri | da | Nu | Nu | da |
Zoom reglabil | Nu | da | da | da |
Top N conexiuni filtrare | Nu | Nu | Nu | da |
Informații personalizate la trecerea cursorului | Nu | Nu | Nu | da |
Personalizarea culorii marginilor | Nu | Nu | Nu | da |
Alte caracteristici avansate | Nu | Nu | Nu | da |
Social Network Graph de Arthur Graus, Network Navigator și Advanced Networks de ZoomCharts (Light Edition) sunt toate extensii potrivite pentru a dezvolta rețele sociale simple și pentru a începe cu prima analiză a rețelelor sociale.
Cu toate acestea, dacă doriți să vă faceți datele să prindă viață și să descoperiți perspective inovatoare cu elemente vizuale care captează atenția sau dacă rețeaua dvs. socială este deosebit de complexă, vă recomand să vă dezvoltați imaginile personalizate în R.
Această vizualizare personalizată este rezultatul final al extensiei de rețea socială a tutorialului nostru în R și demonstrează varietatea mare de caracteristici și proprietăți de nod/margine oferite de R.
Construirea unei extensii de rețea socială pentru Power BI folosind R
Crearea unei extensii pentru a vizualiza rețelele sociale în Power BI folosind R cuprinde cinci pași distincti. Dar înainte de a putea construi extensia noastră de rețea socială, trebuie să ne încărcăm datele în Power BI.
Cerință preliminară: Colectați și pregătiți date pentru Power BI
Puteți urma acest tutorial cu un set de date de testare bazat pe datele Twitter și Facebook sau puteți continua cu propria rețea socială. Datele noastre au fost randomizate; puteți descărca date reale de Twitter dacă doriți. După ce colectați datele necesare, adăugați-le în Power BI (de exemplu, importând un registru de lucru Excel sau adăugând date manual). Rezultatul dvs. ar trebui să arate similar cu următorul tabel:
Odată ce ați configurat datele, sunteți gata să creați o vizualizare personalizată.
Pasul 1: Configurați șablonul de vizualizare
Dezvoltarea unei vizualizări Power BI nu este simplă – chiar și elementele vizuale de bază necesită mii de fișiere. Din fericire, Microsoft oferă o bibliotecă numită pbiviz
, care oferă fișierele necesare pentru suportul infrastructurii cu doar câteva linii de cod. De asemenea, biblioteca pbiviz
va reambala toate fișierele noastre finale într-un fișier .pbiviz
pe care îl putem încărca direct în Power BI ca vizualizare.
Cel mai simplu mod de a instala pbiviz
este cu Node.js. Odată ce pbiviz
este instalat, trebuie să inițializam vizualul nostru personalizat R prin interfața de linie de comandă a mașinii noastre:
pbiviz new toptalSocialNetworkByBharatGarg -t rhtml cd toptalSocialNetworkByBharatGarg npm install pbiviz package
Nu uitați să înlocuiți toptalSocialNetworkByBharatGarg
cu numele dorit pentru vizualizarea dvs. -t rhtml
informează pachetul pbiviz
că ar trebui să creeze un șablon pentru a dezvolta vizualizări HTML bazate pe R. Veți vedea erori deoarece nu am specificat încă câmpuri precum numele autorului și e-mailul în pachetul nostru, dar le vom rezolva mai târziu în tutorial. Dacă scriptul pbiviz
nu va rula deloc în PowerShell, mai întâi poate fi necesar să permiteți scripturi cu Set-ExecutionPolicy RemoteSigned
.
La executarea cu succes a codului, veți vedea un folder cu următoarea structură:
Odată ce avem structura de foldere pregătită, putem scrie codul R pentru vizualizarea noastră personalizată.
Pasul 2: Codați vizualizarea în R
Directorul creat în primul pas conține un fișier numit script.r
, care constă dintr-un cod implicit. (Codul implicit creează o extensie Power BI simplă, care utilizează baza de date de mostre de iris
disponibilă în R pentru a reprezenta o histogramă a Petal.Length
de Petal.Species
.) Vom actualiza codul, dar vom păstra structura implicită, inclusiv secțiunile comentate.
Proiectul nostru folosește trei biblioteci R:
- DiagrammeR: creează grafice din text
- visNetwork: Oferă vizualizări interactive ale rețelei
- data.table: ajută la organizarea datelor, similar cu data.frame
Să înlocuim codul din secțiunea Library Declarations
din script.r
pentru a reflecta utilizarea bibliotecii noastre:
libraryRequireInstall("DiagrammeR") libraryRequireInstall("visNetwork") libraryRequireInstall("data.table")
În continuare, vom înlocui codul din secțiunea Actual code
cu codul nostru R. Înainte de a ne crea vizualizarea, trebuie mai întâi să citim și să ne procesăm datele. Vom lua două intrări de la Power BI:
-
num_records
: intrarea numerică N , astfel încât vom selecta numai primele N conexiuni din rețeaua noastră (pentru a limita numărul de conexiuni afișate) - set de
dataset
: nodurile și marginile rețelei noastre sociale
Pentru a calcula cele N conexiuni pe care le vom reprezenta grafic, trebuie să cumulăm valoarea num_records
deoarece Power BI va furniza un vector în mod implicit în loc de o singură valoare numerică. O funcție de agregare precum max
atinge acest obiectiv:
limit_connection <- max(num_records)
Acum vom citi setul de dataset
ca un obiect data.table
cu coloane personalizate. Sortăm setul de date după valoare în ordine descrescătoare pentru a plasa cele mai frecvente conexiuni în partea de sus a tabelului. Acest lucru ne asigură că alegem cele mai importante înregistrări de trasat atunci când ne limităm conexiunile cu 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))]
În continuare, trebuie să ne pregătim informațiile despre utilizator prin crearea și alocarea de ID-uri de utilizator unice ( uid
) fiecărui utilizator, stocându-le într-un nou tabel. De asemenea, calculăm numărul total de utilizatori și stocăm aceste informații într-o variabilă separată numită num_nodes
:
user_ids <- data.table(id = unique(c(dataset$from, dataset$to)))[, uid := 1:.N] num_nodes <- nrow(user_ids)
Să actualizăm informațiile despre utilizatori cu proprietăți suplimentare, inclusiv:
- Numărul de urmăritori (dimensiunea nodului).
- Numărul de înregistrări.
- Tipul de utilizator (coduri de culoare).
- Link-uri pentru avatar.
Vom folosi funcția de merge
a lui R pentru a actualiza tabelul:
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')
De asemenea, adăugăm uid
-ul nostru creat la setul de date original, astfel încât să putem prelua ID-urile de from
și to
utilizator mai târziu în cod:
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)]
Apoi, creăm cadre de date nod și margine pentru vizualizare. Alegem style
și shape
nodurilor noastre (cercurile umplute) și selectăm coloanele corecte din tabelul user_ids
pentru a popula atributele de color
, data
, value
și image
ale nodurilor noastre:
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>") )
În mod similar, alegem coloanele din tabelul setului de dataset
care corespund atributelor marginilor noastre de from
, to
, și la color
:
edges <- create_edge_df(from = dataset$uid, to = dataset$uid_retweet, arrows = "to", color = dataset$col_sentiment)
În cele din urmă, cu cadrele de date de nod și margine gata, să creăm vizualizarea noastră folosind biblioteca visNetwork
și să o stocăm într-o variabilă pe care codul implicit o va folosi mai târziu, numită 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))
Aici, personalizăm câteva configurații de vizualizare a rețelei în visOptions și visPhysics. Nu ezitați să căutați paginile de documentație și să actualizați aceste opțiuni după cum doriți. Secțiunea noastră Actual code
este acum completă și ar trebui să actualizăm secțiunea Create and save widget
eliminând linia p = ggplotly(g);
deoarece ne-am codificat propria variabilă de vizualizare, p
.
Pasul 3: Pregătiți vizualizarea pentru Power BI
Acum că am terminat de codat în R, trebuie să facem anumite modificări în fișierele noastre JSON compatibile pentru a pregăti vizualizarea pentru utilizare în Power BI.
Să începem cu fișierul capabilities.json
. Include majoritatea informațiilor pe care le vedeți în fila Vizualizări pentru o imagine, cum ar fi sursele de date ale extensiei noastre și alte setări. Mai întâi, trebuie să actualizăm dataRoles
și să înlocuim valoarea existentă cu noi roluri de date pentru setul de dataset
și intrările 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" } ], # ...
În fișierul capabilities.json
, să actualizăm și secțiunea dataViewMappings
. Vom adăuga conditions
pe care trebuie să le respecte intrările noastre, precum și vom actualiza scriptResult
pentru a se potrivi noilor noastre roluri de date și condițiilor acestora. Consultați secțiunea de conditions
, împreună cu secțiunea de select
din scriptResult
, pentru modificări:
# ... "dataViewMappings": [ { "conditions": [ { "dataset": { "max": 20 }, "num_records": { "max": 1 } } ], "scriptResult": { "dataInput": { "table": { "rows": { "select": [ { "for": { "in": "dataset" } }, { "for": { "in": "num_records" } } ], "dataReductionAlgorithm": { "top": {} } } } }, # ...
Să trecem la fișierul nostru dependencies.json
. Aici, vom adăuga trei pachete suplimentare sub cranPackages
, astfel încât Power BI să poată identifica și instala bibliotecile necesare:
{ "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" },
Notă: Power BI ar trebui să instaleze automat aceste biblioteci, dar dacă întâmpinați erori de bibliotecă, încercați să rulați următoarea comandă:
install.packages(c("DiagrammeR", "htmlwidgets", "visNetwork", "data.table", "xml2"))
În cele din urmă, să adăugăm informații relevante pentru vizualul nostru în fișierul pbiviz.json
. Recomand să actualizați următoarele câmpuri:
- Câmpul de descriere a vizualului
- URL-ul suport al vizualului
- Adresa URL GitHub a vizualului
- Numele autorului
- E-mailul autorului
Acum, fișierele noastre au fost actualizate și trebuie să reambalăm vizualizarea din linia de comandă:
pbiviz package
La executarea cu succes a codului, ar trebui creat un fișier .pbiviz
în directorul dist
. Întregul cod acoperit în acest tutorial poate fi vizualizat pe GitHub.
Pasul 4: importați vizualizarea în Power BI
Pentru a importa noua vizualizare în Power BI, deschideți raportul Power BI (fie unul pentru datele existente, fie unul creat în timpul pasului nostru Precondiție cu date de testare) și navigați la fila Vizualizări . Faceți clic pe butonul … [mai multe opțiuni] și selectați Importă o imagine dintr-un fișier . Notă: poate fi necesar să selectați mai întâi Editați într-un browser pentru ca fila Vizualizări să fie vizibilă.
Navigați la directorul dist
al folderului dvs. de vizualizare și selectați fișierul .pbiviz
pentru a încărca perfect vizualul în Power BI.
Pasul 5: Creați vizualizarea în Power BI
Vizualizarea pe care ați importat-o este acum disponibilă în panoul de vizualizări. Faceți clic pe pictograma de vizualizare pentru a o adăuga în raport, apoi adăugați coloane relevante la setul de dataset
și intrările num_records
:
Puteți adăuga text suplimentar, filtre și caracteristici la vizualizare, în funcție de cerințele proiectului. De asemenea, vă recomand să parcurgeți documentația detaliată pentru cele trei biblioteci R pe care le-am folosit pentru a vă îmbunătăți și mai mult vizualizările, deoarece proiectul nostru exemplu nu poate acoperi toate cazurile de utilizare ale funcțiilor disponibile.
Actualizarea următoarei analize a rețelei sociale
Rezultatul nostru final este o dovadă a puterii și eficienței lui R atunci când vine vorba de crearea de vizualizări Power BI personalizate. Încercați analiza rețelelor sociale folosind elemente vizuale personalizate în R pentru următorul set de date și luați decizii mai inteligente cu informații detaliate despre date.
Blogul Toptal Engineering își exprimă recunoștința lui Leandro Roser pentru revizuirea mostrelor de cod prezentate în acest articol.