Análisis de redes sociales con Power BI y R: una guía de elementos visuales personalizados
Publicado: 2022-07-22El 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:
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 | Sí | Sí | Sí | Sí |
Tamaño de borde dinámico | No | Sí | No | Sí |
Personalización del color de los nodos | Sí | Sí | No | Sí |
Procesamiento complejo de redes sociales | No | Sí | Sí | Sí |
Imágenes de perfil para nodos | Sí | No | No | Sí |
Zoom ajustable | No | Sí | Sí | Sí |
Filtrado de conexiones Top N | No | No | No | Sí |
Información personalizada al pasar el mouse | No | No | No | Sí |
Personalización del color del borde | No | No | No | Sí |
Otras características avanzadas | No | No | No | Sí |
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.
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.
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:
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 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.
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
:
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.