Analyse des réseaux sociaux à l'aide de Power BI et R : un guide de visuels personnalisés
Publié: 2022-07-22L'analyse des réseaux sociaux devient rapidement un outil important pour répondre à une variété de besoins professionnels. Il peut éclairer les objectifs de l'entreprise tels que le marketing ciblé et identifier les risques de sécurité ou de réputation. L'analyse des réseaux sociaux peut également aider les entreprises à atteindre leurs objectifs internes : elle donne un aperçu des comportements des employés et des relations entre les différentes parties d'une entreprise.
Les organisations peuvent utiliser un certain nombre de solutions logicielles pour l'analyse des réseaux sociaux ; chacun a ses avantages et ses inconvénients et est adapté à des fins différentes. Cet article se concentre sur Power BI de Microsoft, l'un des outils de visualisation de données les plus couramment utilisés aujourd'hui. Bien que Power BI propose de nombreux modules complémentaires de réseau social, nous explorerons les visuels personnalisés dans R pour créer des résultats plus convaincants et flexibles.
Ce didacticiel suppose une compréhension de la théorie des graphes de base, en particulier des graphes orientés. En outre, les étapes ultérieures sont mieux adaptées à Power BI Desktop, qui n'est disponible que sous Windows. Les lecteurs peuvent utiliser le navigateur Power BI sous Mac OS ou Linux, mais le navigateur Power BI ne prend pas en charge certaines fonctionnalités, telles que l'importation d'un classeur Excel.
Structurer les données pour la visualisation
La création de réseaux sociaux commence par la collecte de données de connexions (edge). Les données de connexion contiennent deux champs principaux : le nœud source et le nœud cible , c'est-à-dire les nœuds situés à chaque extrémité de la périphérie. Au-delà de ces nœuds, nous pouvons collecter des données pour produire des informations visuelles plus complètes, généralement représentées sous forme de propriétés de nœud ou de périphérie :
1) Propriétés du nœud
- Forme ou couleur : Indique le type d'utilisateur, par exemple, l'emplacement/le pays de l'utilisateur
- Taille : Indique l'importance dans le réseau, par exemple, le nombre de followers de l'utilisateur
- Image : Fonctionne comme un identifiant individuel, par exemple, l'avatar d'un utilisateur
2) Propriétés des bords
- Couleur , trait ou flèche : Indique le type de connexion, par exemple, le sentiment de la publication ou du tweet reliant les deux utilisateurs
- Largeur : Indique la force de la connexion, par exemple, combien de mentions ou de retweets sont observés entre deux utilisateurs sur une période donnée
Examinons un exemple de visuel de réseau social pour voir comment ces propriétés fonctionnent :
Nous pouvons également utiliser le texte de survol pour compléter ou remplacer les paramètres ci-dessus, car il peut prendre en charge d'autres informations qui ne peuvent pas être facilement exprimées via les propriétés de nœud ou de bord.
Comparaison des extensions de réseaux sociaux de Power BI
Après avoir défini les différentes fonctionnalités de données d'un réseau social, examinons les avantages et les inconvénients de quatre outils populaires utilisés pour visualiser les réseaux dans Power BI.
Extension | Graphique des réseaux sociaux par Arthur Graus | Navigateur réseau | Réseaux avancés par ZoomCharts (édition légère) | Visualisations personnalisées à l'aide de R |
---|---|---|---|---|
Taille de nœud dynamique | Oui | Oui | Oui | Oui |
Taille de bord dynamique | Non | Oui | Non | Oui |
Personnalisation de la couleur des nœuds | Oui | Oui | Non | Oui |
Traitement complexe des réseaux sociaux | Non | Oui | Oui | Oui |
Images de profil pour les nœuds | Oui | Non | Non | Oui |
Zoom réglable | Non | Oui | Oui | Oui |
Filtrage des N premières connexions | Non | Non | Non | Oui |
Informations personnalisées au survol | Non | Non | Non | Oui |
Personnalisation de la couleur des bords | Non | Non | Non | Oui |
Autres fonctionnalités avancées | Non | Non | Non | Oui |
Social Network Graph d'Arthur Graus, Network Navigator et Advanced Networks de ZoomCharts (Light Edition) sont toutes des extensions appropriées pour développer des réseaux sociaux simples et commencer votre première analyse de réseaux sociaux.
Cependant, si vous souhaitez donner vie à vos données et découvrir des informations révolutionnaires avec des visuels accrocheurs, ou si votre réseau social est particulièrement complexe, je vous recommande de développer vos visuels personnalisés dans R.
Cette visualisation personnalisée est le résultat final de l'extension de réseau social de notre didacticiel dans R et démontre la grande variété de fonctionnalités et de propriétés de nœud/bord offertes par R.
Construire une extension de réseau social pour Power BI à l'aide de R
La création d'une extension pour visualiser les réseaux sociaux dans Power BI à l'aide de R comprend cinq étapes distinctes. Mais avant de pouvoir créer notre extension de réseau social, nous devons charger nos données dans Power BI.
Prérequis : collecter et préparer des données pour Power BI
Vous pouvez suivre ce didacticiel avec un ensemble de données de test basé sur les données Twitter et Facebook ou continuer avec votre propre réseau social. Nos données ont été randomisées ; vous pouvez télécharger de vraies données Twitter si vous le souhaitez. Après avoir collecté les données requises, ajoutez-les dans Power BI (par exemple, en important un classeur Excel ou en ajoutant des données manuellement). Votre résultat devrait ressembler au tableau suivant :
Une fois vos données configurées, vous êtes prêt à créer une visualisation personnalisée.
Étape 1 : Configurer le modèle de visualisation
Développer une visualisation Power BI n'est pas simple, même les visuels de base nécessitent des milliers de fichiers. Heureusement, Microsoft propose une bibliothèque appelée pbiviz
, qui fournit les fichiers nécessaires à la prise en charge de l'infrastructure avec seulement quelques lignes de code. La bibliothèque pbiviz
reconditionnera également tous nos fichiers finaux dans un fichier .pbiviz
que nous pourrons charger directement dans Power BI en tant que visualisation.
La façon la plus simple d'installer pbiviz
est avec Node.js. Une fois pbiviz
installé, nous devons initialiser notre visuel R personnalisé via l'interface de ligne de commande de notre machine :
pbiviz new toptalSocialNetworkByBharatGarg -t rhtml cd toptalSocialNetworkByBharatGarg npm install pbiviz package
N'oubliez pas de remplacer toptalSocialNetworkByBharatGarg
par le nom souhaité pour votre visualisation. -t rhtml
informe le package pbiviz
qu'il doit créer un modèle pour développer des visualisations HTML basées sur R. Vous verrez des erreurs car nous n'avons pas encore spécifié de champs tels que le nom et l'e-mail de l'auteur dans notre package, mais nous les résoudrons plus tard dans le didacticiel. Si le script pbiviz
ne s'exécute pas du tout dans PowerShell, vous devrez peut-être d'abord autoriser les scripts avec Set-ExecutionPolicy RemoteSigned
.
Une fois le code exécuté avec succès, vous verrez un dossier avec la structure suivante :
Une fois que nous avons la structure de dossiers prête, nous pouvons écrire le code R pour notre visualisation personnalisée.
Étape 2 : Coder la visualisation en R
Le répertoire créé à la première étape contient un fichier nommé script.r
, composé du code par défaut. (Le code par défaut crée une extension Power BI simple, qui utilise l'exemple de base de données iris
disponible dans R pour tracer un histogramme de Petal.Length
par Petal.Species
.) Nous mettrons à jour le code mais conserverons sa structure par défaut, y compris ses sections commentées.
Notre projet utilise trois librairies R :
- DiagrammeR : Crée des graphiques à partir de texte
- visNetwork : Fournit des visualisations de réseau interactives
- data.table : aide à l'organisation des données, similaire à data.frame
Remplaçons le code dans la section Library Declarations
de script.r
pour refléter notre utilisation de la bibliothèque :
libraryRequireInstall("DiagrammeR") libraryRequireInstall("visNetwork") libraryRequireInstall("data.table")
Ensuite, nous remplacerons le code dans la section Actual code
par notre code R. Avant de créer notre visualisation, nous devons d'abord lire et traiter nos données. Nous prendrons deux entrées de Power BI :
-
num_records
: L'entrée numérique N , telle que nous ne sélectionnerons que les N meilleures connexions de notre réseau (pour limiter le nombre de connexions affichées) - jeu de
dataset
: nos nœuds et bords de réseaux sociaux
Pour calculer les N connexions que nous allons tracer, nous devons agréger la valeur num_records
car Power BI fournira un vecteur par défaut au lieu d'une seule valeur numérique. Une fonction d'agrégation comme max
atteint cet objectif :
limit_connection <- max(num_records)
Nous allons maintenant lire l'ensemble de dataset
comme un objet data.table
avec des colonnes personnalisées. Nous trions l'ensemble de données par valeur dans l'ordre décroissant pour placer les connexions les plus fréquentes en haut du tableau. Cela garantit que nous choisissons les enregistrements les plus importants à tracer lorsque nous limitons nos connexions avec 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))]
Ensuite, nous devons préparer nos informations utilisateur en créant et en attribuant des ID utilisateur uniques ( uid
) à chaque utilisateur, en les stockant dans une nouvelle table. Nous calculons également le nombre total d'utilisateurs et stockons ces informations dans une variable distincte appelée num_nodes
:
user_ids <- data.table(id = unique(c(dataset$from, dataset$to)))[, uid := 1:.N] num_nodes <- nrow(user_ids)
Mettons à jour nos informations utilisateur avec des propriétés supplémentaires, notamment :
- Le nombre d'abonnés (taille du nœud).
- Le nombre d'enregistrements.
- Le type d'utilisateur (codes couleurs).
- Liens d'avatars.
Nous utiliserons la fonction de merge
de R pour mettre à jour la table :
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')
Nous ajoutons également notre uid
créé à l'ensemble de données d'origine afin de pouvoir récupérer les ID utilisateur from
et to
plus tard dans le code :
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)]
Ensuite, nous créons des trames de données de nœuds et de bords pour la visualisation. Nous choisissons le style
et la shape
de nos nœuds (cercles pleins) et sélectionnons les bonnes colonnes de notre table user_ids
pour remplir les attributs color
, data
, value
et image
de nos nœuds :
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>") )
De même, nous sélectionnons les colonnes de la table de l'ensemble de dataset
qui correspondent aux attributs from
, to
et color
de nos bords :
edges <- create_edge_df(from = dataset$uid, to = dataset$uid_retweet, arrows = "to", color = dataset$col_sentiment)
Enfin, avec les cadres de données de nœud et de bord prêts, créons notre visualisation à l'aide de la bibliothèque visNetwork
et stockons-la dans une variable que le code par défaut utilisera plus tard, appelée 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))
Ici, nous personnalisons quelques configurations de visualisation de réseau dans visOptions et visPhysics. N'hésitez pas à parcourir les pages de documentation et à mettre à jour ces options comme vous le souhaitez. Notre section Actual code
est maintenant terminée et nous devons mettre à jour la section Create and save widget
en supprimant la ligne p = ggplotly(g);
puisque nous avons codé notre propre variable de visualisation, p
.
Étape 3 : Préparer la visualisation pour Power BI
Maintenant que nous avons terminé le codage en R, nous devons apporter certaines modifications à nos fichiers JSON de support pour préparer la visualisation à utiliser dans Power BI.
Commençons par le capabilities.json
. Il comprend la plupart des informations que vous voyez dans l'onglet Visualisations d'un visuel, telles que les sources de données de notre extension et d'autres paramètres. Tout d'abord, nous devons mettre à jour dataRoles
et remplacer la valeur existante par de nouveaux rôles de données pour nos entrées dataset
et 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" } ], # ...
Dans notre fichier dataViewMappings
capabilities.json
Nous allons ajouter des conditions
auxquelles nos entrées doivent adhérer, ainsi que mettre à jour le scriptResult
pour qu'il corresponde à nos nouveaux rôles de données et à leurs conditions. Consultez la section conditions
, ainsi que la section select
sous scriptResult
, pour les modifications :
# ... "dataViewMappings": [ { "conditions": [ { "dataset": { "max": 20 }, "num_records": { "max": 1 } } ], "scriptResult": { "dataInput": { "table": { "rows": { "select": [ { "for": { "in": "dataset" } }, { "for": { "in": "num_records" } } ], "dataReductionAlgorithm": { "top": {} } } } }, # ...
Passons à notre fichier dependencies.json
. Ici, nous allons ajouter trois packages supplémentaires sous cranPackages
afin que Power BI puisse identifier et installer les bibliothèques requises :
{ "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" },
Remarque : Power BI devrait installer automatiquement ces bibliothèques, mais si vous rencontrez des erreurs de bibliothèque, essayez d'exécuter la commande suivante :
install.packages(c("DiagrammeR", "htmlwidgets", "visNetwork", "data.table", "xml2"))
Enfin, ajoutons des informations pertinentes pour notre visuel au fichier pbiviz.json
. Je vous recommande de mettre à jour les champs suivants :
- Le champ de description du visuel
- L'URL de support du visuel
- L'URL GitHub du visuel
- Le nom de l'auteur
- Le mail de l'auteur
Maintenant, nos fichiers ont été mis à jour et nous devons reconditionner la visualisation depuis la ligne de commande :
pbiviz package
En cas d'exécution réussie du code, un fichier .pbiviz
doit être créé dans le répertoire dist
. L'intégralité du code couvert dans ce didacticiel peut être consulté sur GitHub.
Étape 4 : Importer la visualisation dans Power BI
Pour importer votre nouvelle visualisation dans Power BI, ouvrez votre rapport Power BI (un pour les données existantes ou un créé lors de notre étape Prérequis avec des données de test) et accédez à l'onglet Visualisations . Cliquez sur le bouton … [plus d'options] et sélectionnez Importer un visuel à partir d'un fichier . Remarque : Vous devrez peut-être d'abord sélectionner Modifier dans un navigateur pour que l'onglet Visualisations soit visible.
Accédez au répertoire dist
de votre dossier de visualisation et sélectionnez le fichier .pbiviz
pour charger en toute transparence votre visuel dans Power BI.
Étape 5 : Créer la visualisation dans Power BI
La visualisation que vous avez importée est désormais disponible dans le volet des visualisations. Cliquez sur l'icône de visualisation pour l'ajouter à votre rapport, puis ajoutez les colonnes pertinentes aux entrées dataset
et num_records
:
Vous pouvez ajouter du texte, des filtres et des fonctionnalités supplémentaires à votre visualisation en fonction des exigences de votre projet. Je vous recommande également de parcourir la documentation détaillée des trois bibliothèques R que nous avons utilisées pour améliorer encore vos visualisations, car notre exemple de projet ne peut pas couvrir tous les cas d'utilisation des fonctions disponibles.
Mise à niveau de votre prochaine analyse de réseau social
Notre résultat final témoigne de la puissance et de l'efficacité de R lorsqu'il s'agit de créer des visualisations Power BI personnalisées. Essayez l'analyse des réseaux sociaux à l'aide de visuels personnalisés dans R sur votre prochain ensemble de données et prenez des décisions plus intelligentes grâce à des informations complètes sur les données.
Le blog Toptal Engineering exprime sa gratitude à Leandro Roser pour avoir examiné les exemples de code présentés dans cet article.