Análisis de redes sociales con Power BI y R: una guía de elementos visuales personalizados

Publicado: 2022-07-22

El análisis de redes sociales se está convirtiendo rápidamente en una herramienta importante para satisfacer una variedad de necesidades profesionales. Puede informar los objetivos corporativos, como el marketing dirigido, e identificar riesgos de seguridad o de reputación. El análisis de redes sociales también puede ayudar a las empresas a cumplir objetivos internos: proporciona información sobre los comportamientos de los empleados y las relaciones entre las diferentes partes de una empresa.

Las organizaciones pueden emplear una serie de soluciones de software para el análisis de redes sociales; cada uno tiene sus pros y sus contras, y es adecuado para diferentes propósitos. Este artículo se centra en Power BI de Microsoft, una de las herramientas de visualización de datos más utilizadas en la actualidad. Si bien Power BI ofrece muchos complementos de redes sociales, exploraremos elementos visuales personalizados en R para crear resultados más convincentes y flexibles.

Este tutorial asume una comprensión de la teoría básica de grafos, en particular de los gráficos dirigidos. Además, los pasos posteriores son más adecuados para Power BI Desktop, que solo está disponible en Windows. Los lectores pueden usar el navegador Power BI en Mac OS o Linux, pero el navegador Power BI no admite ciertas funciones, como la importación de un libro de Excel.

Estructuración de datos para visualización

La creación de redes sociales comienza con la recopilación de datos de conexiones (borde). Los datos de conexiones contienen dos campos principales: el nodo de origen y el nodo de destino , los nodos en cualquier extremo del borde. Más allá de estos nodos, podemos recopilar datos para producir información visual más completa, normalmente representada como propiedades de nodo o borde:

1) Propiedades del nodo

  • Forma o color : indica el tipo de usuario, por ejemplo, la ubicación/país del usuario
  • Tamaño : Indica la importancia en la red, por ejemplo, el número de seguidores del usuario.
  • Imagen : funciona como un identificador individual, por ejemplo, el avatar de un usuario

2) Propiedades de borde

  • Conexión de color , trazo o punta de flecha : indica el tipo de conexión, por ejemplo, el sentimiento de la publicación o tweet que conecta a los dos usuarios.
  • Ancho : indica la fuerza de la conexión, por ejemplo, cuántas menciones o retweets se observan entre dos usuarios en un período determinado

Inspeccionemos un ejemplo visual de una red social para ver cómo funcionan estas propiedades:

Aparece un gráfico de círculos conectados por líneas de diferentes anchos con tres secciones distintas. La izquierda del gráfico tiene seis formas verdes de varios tamaños etiquetadas 1, 2, 3, 4, 5 y 6 en un hexágono. Los números del 1 al 5 son círculos, mientras que el 6 es un diamante. Están interconectados por flechas verdes de diferentes anchos y direcciones, y algunas puntas de flecha están llenas de verde mientras que otras no lo están. A la derecha de las formas verdes está la siguiente sección: tres formas azul oscuro dispuestas en un triángulo que están etiquetadas como 7, 8 y 9, y están interconectadas por flechas azules de diferentes anchos y direcciones (con algunas puntas de flecha llenas de azul). Los nodos 7 y 9 están conectados a los nodos 3 y 4 con flechas grises de diferentes anchos y direcciones (con algunas puntas de flecha rellenas de gris). En el medio del gráfico, debajo de los dos primeros grupos de formas, hay un solo diamante azul claro con la etiqueta 10. Está conectado a los nodos 5, 4 y 9 mediante flechas grises punteadas de diferentes anchos y direcciones (con algunas puntas de flecha llenas de gris) .
Los nodos verdes, azul claro y azul oscuro y las formas variables de círculos o diamantes muestran diferentes tipos de nodos. Los números con fondos transparentes actúan como identificadores de imagen de nodo, y los nodos más grandes (como el Nodo 4) son más importantes en la red. Los diferentes tipos de borde se indican por color (verde, azul o gris), trazo (sólido o punteado) y puntas de flecha (vacío o relleno); el ancho del borde muestra la fuerza (por ejemplo, la conexión del Nodo 8 al Nodo 9 es fuerte).

También podemos usar texto flotante para complementar o reemplazar los parámetros anteriores, ya que puede admitir otra información que no se puede expresar fácilmente a través de propiedades de nodo o borde.

Comparación de las extensiones de redes sociales de Power BI

Habiendo definido las diferentes características de datos de una red social, examinemos los pros y los contras de cuatro herramientas populares que se usan para visualizar redes en Power BI.

Extensión Gráfico de redes sociales de Arthur Graus Navegador de red Redes avanzadas de ZoomCharts (edición ligera) Visualizaciones personalizadas usando R
Tamaño de nodo dinámico
Tamaño de borde dinámico No No
Personalización del color de los nodos No
Procesamiento complejo de redes sociales No
Imágenes de perfil para nodos No No
Zoom ajustable No
Filtrado de conexiones Top N No No No
Información personalizada al pasar el mouse No No No
Personalización del color del borde No No No
Otras características avanzadas No No No


Social Network Graph de Arthur Graus, Network Navigator y Advanced Networks de ZoomCharts (Light Edition) son extensiones adecuadas para desarrollar redes sociales simples y comenzar con su primer análisis de redes sociales.

Muchos círculos azul oscuro, azul claro y naranja (más de 50 círculos) están conectados por delgadas líneas grises sobre un fondo blanco. Los círculos tienen un borde de color sólido y están llenos de pequeñas imágenes de varios Pokémon que tienen un fondo blanco, y los círculos bloquean la vista de la mayoría de las líneas grises. Forman una forma circular en general.
Una visualización de ejemplo realizada con la extensión Social Network Graph de Arthur Graus.

Muchos círculos azules, morados y grises (más de 50 círculos) están conectados por finas líneas grises sobre un fondo blanco. Los círculos son sólidos y rellenos y bloquean la vista de algunas de las líneas grises. Forman un arreglo circular en general.
Una visualización de ejemplo realizada con la extensión Network Navigator.

Muchos círculos grandes de color verde azulado y pequeños de color naranja (más de 50 círculos) están conectados por delgadas líneas grises sobre un fondo blanco. Los círculos son sólidos y rellenos, y la mayoría de las líneas grises son visibles. Forman una forma de cuña horizontal en general, con círculos más densamente poblados que aparecen en el lado derecho. En la parte inferior izquierda del gráfico, hay algunos iconos de widgets y dos círculos etiquetados: un círculo verde azulado con la etiqueta "De usuario" y un círculo naranja con la etiqueta "Para el usuario". En la parte inferior derecha del gráfico hay un logotipo que dice "zoomcharts".
Una visualización de ejemplo realizada con la extensión Advanced Networks by ZoomCharts (Light Edition).

Sin embargo, si desea que sus datos cobren vida y descubra información innovadora con imágenes que llamen la atención, o si su red social es particularmente compleja, le recomiendo que desarrolle sus imágenes personalizadas en R.

Muchos círculos verdes, azules y morados (más de 50 círculos) están conectados por líneas finas de diferentes colores (verde, gris y rojo) sobre un fondo blanco. Los círculos son sólidos y están rellenos con una imagen de Pokémon en el centro, y la mayoría de las líneas finas son visibles. En general, forman una forma circular extendida, y los círculos verdes se ramifican con frecuencia hacia círculos azules o morados más pequeños. La esquina superior derecha del gráfico tiene el texto "Red social" y debajo del gráfico hay una leyenda de líneas y círculos con texto relacionado: una línea verde con el texto "Positivo", una línea gris con el texto "Neutral" una línea roja con el texto "Negativo", un círculo azul con el texto "Mención" y un círculo morado con el texto "Retweet".
Una visualización de ejemplo realizada con elementos visuales personalizados en R.

Esta visualización personalizada es el resultado final de la extensión de red social de nuestro tutorial en R y demuestra la gran variedad de funciones y propiedades de nodo/borde que ofrece R.

Creación de una extensión de red social para Power BI con R

La creación de una extensión para visualizar redes sociales en Power BI usando R consta de cinco pasos distintos. Pero antes de que podamos construir nuestra extensión de red social, debemos cargar nuestros datos en Power BI.

Requisito previo: recopilar y preparar datos para Power BI

Puede seguir este tutorial con un conjunto de datos de prueba basado en datos de Twitter y Facebook o continuar con su propia red social. Nuestros datos han sido aleatorios; puede descargar datos reales de Twitter si lo desea. Después de recopilar los datos necesarios, agréguelos a Power BI (por ejemplo, importando un libro de Excel o agregando datos manualmente). Su resultado debe ser similar a la siguiente tabla:

Aparece una tabla con trece filas alternas grises y blancas. Tiene un título --- "Red social" --- con encabezados debajo. La primera columna está etiquetada como "De usuario" y tiene ocho textos "1" seguidos de cinco textos "2". La segunda columna tiene la etiqueta "Para el usuario" y dice (de arriba a abajo): 2, 3, 5, 6, 7, 8, 9, 10, 7, 8, 11, 13, 14. La tercera columna tiene la etiqueta " Número de conexiones" y se lee (de arriba a abajo): 12, 46, 29, 79, 49, 11, 90, 100, 66, 29, 62, 13, 45. La cuarta columna tiene la etiqueta "Tipo" y se lee ( de arriba a abajo): Retwittear, Mencionar, Mencionar, Retwittear, Retwittear, Retwittear, Mencionar, Mencionar, Retwittear, Retwittear, Retwittear, Retwittear, Mencionar. La quinta columna está etiquetada como "Sentimiento" y dice (de arriba a abajo): Positivo, Positivo, Negativo, Neutral, Positivo, Negativo, Positivo, Neutral, Neutral, Negativo, Negativo, Negativo, Negativo. La sexta columna está etiquetada como "De nombre de usuario" y tiene ocho textos "Aaliyah" seguidos de cinco textos "Aaron". La séptima columna dice "Para el nombre de usuario" y dice (de arriba a abajo): Aaron, Abel, Abraham, Ace, Adalyn, Adalynn con dos N, Adam, Addison, Adalyn, Adalynn con dos N, Adeline, Adriel, Aidan. La octava columna dice "De Avatar" y tiene ocho textos "https://raychemmedica.com/SampleImages/Pokemon/1.png" seguidos de cinco textos "https://raychemmedica.com/SampleImages/Pokemon/2.png". . La novena columna dice "Para Avatar" y cada entrada tiene el texto "https://raychemmedica.com/SampleImages/Pok" y parece estar cortada.

Una vez que haya configurado sus datos, estará listo para crear una visualización personalizada.

Paso 1: configurar la plantilla de visualización

Desarrollar una visualización de Power BI no es simple, incluso las imágenes básicas requieren miles de archivos. Afortunadamente, Microsoft ofrece una biblioteca llamada pbiviz , que proporciona los archivos de soporte de infraestructura requeridos con solo unas pocas líneas de código. La biblioteca pbiviz también volverá a empaquetar todos nuestros archivos finales en un archivo .pbiviz que podemos cargar directamente en Power BI como una visualización.

La forma más sencilla de instalar pbiviz es con Node.js. Una vez que pbiviz está instalado, debemos inicializar nuestro objeto visual R personalizado a través de la interfaz de línea de comandos de nuestra máquina:

 pbiviz new toptalSocialNetworkByBharatGarg -t rhtml cd toptalSocialNetworkByBharatGarg npm install pbiviz package

No olvide reemplazar toptalSocialNetworkByBharatGarg con el nombre deseado para su visualización. -t rhtml informa al paquete pbiviz que debe crear una plantilla para desarrollar visualizaciones HTML basadas en R. Verá errores porque aún no hemos especificado campos como el nombre del autor y el correo electrónico en nuestro paquete, pero los resolveremos más adelante en el tutorial. Si la secuencia de comandos pbiviz no se ejecuta en PowerShell, es posible que primero deba permitir secuencias de comandos con Set-ExecutionPolicy RemoteSigned .

Al ejecutar con éxito el código, verá una carpeta con la siguiente estructura:

Una lista del Explorador de archivos que contiene ocho subcarpetas (.tmp, .vscode, assets, dist, node_modules, r_files, src y style) y ocho archivos (capabilities.json, dependencies.json, package.json, package-lock.json, pbiviz .json, script.r, tsconfig.json y tslint.json). Todos los archivos tienen 1 KB, excepto las capacidades.json (2 KB) y el paquete-lock.json (23 KB).

Una vez que tengamos lista la estructura de carpetas, podemos escribir el código R para nuestra visualización personalizada.

Paso 2: codificar la visualización en R

El directorio creado en el primer paso contiene un archivo llamado script.r , que consta de código predeterminado. (El código predeterminado crea una extensión de Power BI simple, que usa la base de datos de muestras de iris disponible en R para trazar un histograma de Petal.Length por Petal.Species ). Actualizaremos el código pero conservaremos su estructura predeterminada, incluidas las secciones comentadas.

Nuestro proyecto utiliza tres bibliotecas R:

  • DiagrammeR: crea gráficos a partir de texto
  • visNetwork: proporciona visualizaciones de red interactivas
  • data.table: ayuda con la organización de datos, similar a data.frame

Reemplacemos el código en la sección Library Declarations de script.r para reflejar el uso de nuestra biblioteca:

 libraryRequireInstall("DiagrammeR") libraryRequireInstall("visNetwork") libraryRequireInstall("data.table")

A continuación, reemplazaremos el código en la sección Actual code con nuestro código R. Antes de crear nuestra visualización, primero debemos leer y procesar nuestros datos. Tomaremos dos entradas de Power BI:

  • num_records : la entrada numérica N , de modo que seleccionaremos solo las N conexiones principales de nuestra red (para limitar la cantidad de conexiones mostradas)
  • conjunto de dataset : nuestros nodos y bordes de redes sociales

Para calcular las N conexiones que trazaremos, debemos agregar el valor de num_records porque Power BI proporcionará un vector de forma predeterminada en lugar de un solo valor numérico. Una función de agregación como max logra este objetivo:

 limit_connection <- max(num_records)

Ahora leeremos el conjunto de dataset como un objeto data.table con columnas personalizadas. Ordenamos el conjunto de datos por valor en orden decreciente para colocar las conexiones más frecuentes en la parte superior de la tabla. Esto asegura que elegimos los registros más importantes para graficar cuando limitamos nuestras conexiones 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))]

A continuación, debemos preparar nuestra información de usuario creando y asignando ID de usuario únicos ( uid ) a cada usuario, almacenándolos en una nueva tabla. También calculamos el número total de usuarios y almacenamos esa información en una variable separada llamada num_nodes :

 user_ids <- data.table(id = unique(c(dataset$from, dataset$to)))[, uid := 1:.N] num_nodes <- nrow(user_ids)

Actualicemos nuestra información de usuario con propiedades adicionales, que incluyen:

  • El número de seguidores (tamaño del nodo).
  • El número de registros.
  • El tipo de usuario (códigos de color).
  • Enlaces de avatar.

Usaremos la función de merge de R para actualizar la tabla:

 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')

También agregamos nuestro uid creado al conjunto de datos original para que podamos recuperar los ID de usuario from y to más adelante en el código:

 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)]

A continuación, creamos marcos de datos de nodos y bordes para la visualización. Elegimos el style y la shape de nuestros nodos (círculos rellenos) y seleccionamos las columnas correctas de nuestra tabla user_ids para completar los atributos de color , data , value e image de nuestros nodos:

 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>") )

Del mismo modo, elegimos las columnas de la tabla del dataset de datos que corresponden a los atributos from , to y color de nuestros bordes:

 edges <- create_edge_df(from = dataset$uid, to = dataset$uid_retweet, arrows = "to", color = dataset$col_sentiment)

Finalmente, con los marcos de datos de nodo y borde listos, creemos nuestra visualización usando la biblioteca visNetwork y almacenémosla en una variable que usará el código predeterminado más adelante, llamada 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))

Aquí, personalizamos algunas configuraciones de visualización de red en visOptions y visPhysics. No dude en consultar las páginas de documentación y actualizar estas opciones según lo desee. Nuestra sección Actual code ya está completa, y debemos actualizar la sección Create and save widget eliminando la línea p = ggplotly(g); ya que codificamos nuestra propia variable de visualización, p .

Paso 3: preparar la visualización para Power BI

Ahora que hemos terminado de codificar en R, debemos realizar ciertos cambios en nuestros archivos JSON compatibles para preparar la visualización para su uso en Power BI.

Comencemos con el archivo capabilities.json . Incluye la mayor parte de la información que ve en la pestaña Visualizaciones para un objeto visual, como las fuentes de datos de nuestra extensión y otras configuraciones. Primero, necesitamos actualizar dataRoles y reemplazar el valor existente con nuevos roles de datos para nuestras entradas de conjunto de dataset y 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" } ], # ...

En nuestro archivo dataViewMappings capabilities.json Agregaremos conditions a las que se deben adherir nuestras entradas, así como también actualizaremos scriptResult para que coincida con nuestros nuevos roles de datos y sus condiciones. Consulte la sección de conditions , junto con la sección de select en scriptResult , para conocer los cambios:

 # ... "dataViewMappings": [ { "conditions": [ { "dataset": { "max": 20 }, "num_records": { "max": 1 } } ], "scriptResult": { "dataInput": { "table": { "rows": { "select": [ { "for": { "in": "dataset" } }, { "for": { "in": "num_records" } } ], "dataReductionAlgorithm": { "top": {} } } } }, # ...

Pasemos a nuestro archivo dependencies.json . Aquí agregaremos tres paquetes adicionales en cranPackages para que Power BI pueda identificar e instalar las bibliotecas necesarias:

 { "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 debería instalar automáticamente estas bibliotecas, pero si encuentra errores de biblioteca, intente ejecutar el siguiente comando:

 install.packages(c("DiagrammeR", "htmlwidgets", "visNetwork", "data.table", "xml2"))

Por último, agreguemos información relevante para nuestro objeto visual al archivo pbiviz.json . Recomiendo actualizar los siguientes campos:

  • El campo de descripción del objeto visual
  • La URL de soporte del objeto visual
  • URL de GitHub del objeto visual
  • el nombre del autor
  • El correo electrónico del autor

Ahora, nuestros archivos se han actualizado y debemos volver a empaquetar la visualización desde la línea de comando:

 pbiviz package

En la ejecución exitosa del código, se debe crear un archivo .pbiviz en el directorio dist . El código completo cubierto en este tutorial se puede ver en GitHub.

Paso 4: Importe la visualización en Power BI

Para importar su nueva visualización en Power BI, abra su informe de Power BI (ya sea uno para datos existentes o uno creado durante nuestro paso de requisitos previos con datos de prueba) y vaya a la pestaña Visualizaciones . Haga clic en el botón ... [más opciones] y seleccione Importar un objeto visual desde un archivo . Nota: Es posible que primero deba seleccionar Editar en un navegador para que la pestaña Visualizaciones esté visible.

Aparece un panel con el título "Visualizaciones" y dos flechas ">" a su derecha. Debajo, el texto "Construir visual" con dos imágenes debajo: dos rectángulos amarillos y una línea a la izquierda, y un papel y un pincel a la derecha. La imagen de dos rectángulos amarillos está seleccionada y debajo tiene un panel de más de 30 íconos de gráficos diferentes. El último ícono es una elipsis, que tiene el texto flotante "Obtener más imágenes". Debajo del panel de íconos, el texto "Valores" con una línea de texto debajo que dice: "Agregar campos de datos aquí". Debajo de eso, el texto "Profundizar", seguido de "Informe cruzado" con un botón de opción "Desactivado" seleccionado junto a él.

Navegue hasta el directorio dist de su carpeta de visualización y seleccione el archivo .pbiviz para cargar sin problemas su visual en Power BI.

Paso 5: Cree la visualización en Power BI

La visualización que importó ahora está disponible en el panel de visualizaciones. Haga clic en el ícono de visualización para agregarlo a su informe y luego agregue las columnas relevantes a las entradas del conjunto de dataset y num_records :

Aparece un panel con un icono de herramientas seleccionado que tiene el texto flotante "toptalSocialNetworkByBharatGarg". Debajo del ícono, aparece el texto "conjunto de datos" con varios rectángulos desplegables debajo (de arriba a abajo): De usuario, A usuario, Número de conexiones, color, color, Nombre de usuario, Nombre de usuario, Avatar, Avatar.

Puede agregar texto, filtros y características adicionales a su visualización según los requisitos de su proyecto. También le recomiendo que revise la documentación detallada de las tres bibliotecas de R que usamos para mejorar aún más sus visualizaciones, ya que nuestro proyecto de ejemplo no puede cubrir todos los casos de uso de las funciones disponibles.

Actualización de su próximo análisis de redes sociales

Nuestro resultado final es un testimonio del poder y la eficiencia de R cuando se trata de crear visualizaciones personalizadas de Power BI. Pruebe el análisis de redes sociales utilizando imágenes personalizadas en R en su próximo conjunto de datos y tome decisiones más inteligentes con información de datos integral.

El blog de ingeniería de Toptal agradece a Leandro Roser por revisar los ejemplos de código presentados en este artículo.

De arriba a abajo, aparecen las palabras "Gold" (color dorado), "Microsoft" y "Partner" (ambas en negro) seguidas del logotipo de Microsoft.
Como Microsoft Gold Partner, Toptal es su red élite de expertos de Microsoft. Cree equipos de alto rendimiento con los expertos que necesita, ¡en cualquier lugar y exactamente cuando los necesite!