Force-Directed Graph

Una visualización para mostrar relaciones entre entidades

Introducción

El Force-Directed Graph es un tipo de visualización orientado a representar las relaciones entre entidades mediante un grafo. Cada uno de los nodos del grafo es una entidad y cada arista (línea) indica la existencia de una relación entre dos de los nodos o entidades y, opcionalmente, la intensidad de esta. La idea subyacente es utilizar un modelo de fuerzas donde se recalculan iterativamente las posiciones de los nodos en función de la influencia de los demás, combinando atracción y repulsión. Después de n iteraciones, el sistema se estabiliza y muestra la posición más estable hallada durante el proceso. De esta manera se revelan estructuras como comunidades, los nodos más importantes (centrales, hubs...), entre otros.

Se pueden asignar diferentes tamaños, colores y etiquetas a los nodos en función de algún atributo, para mostrar grupos y/o su importancia relativa. También es posible activar la funcionalidad de arrastrar uno de los nodos (y con ello todo el grafo), pero no es algo que tenga mucha aplicación en el análisis.

Este ejemplo, de Mike Bostock, muestra un grafo de red representando las relaciones entre los diferentes personajes de la obra de Victor Hugo Los miserables. Cada nodo representa a un personaje y la línea que une dos personajes indica que dichos personajes están relacionados por apariciones simultáneas en la obra. El color de cada nodo se corresponde al capítulo en el cual aparecen. El grueso de cada arista muestra el volumen de apariciones simultáneas de los dos personajes.

Ejemplo: red de likes entre fanpages de la UOC

La siguiente visualización muestra como usar force-directed para visualizar la red de relaciones entre un conjunto de entidades, en este caso fanpages de Facebook que han hecho like en la fanpages de la UOC o viceversa.

Los atributos de los cuales se dispone para cada fanpage son los siguientes:

Funcionamiento

Para cada entidad (fanpages de Facebook en este caso) se dibuja un nodo; y para cada relación entre nodos, una línea. En este caso en particular, la relación de like entre páginas solo puede darse una vez, y, por lo tanto, no hay variación en el ancho de los enlaces. El algoritmo calcula de manera iterativa la posición más estable del grafo teniendo en cuenta las fuerzas de atracción (nodos enlazados) y repulsión (nodos no enlazados). Se pueden establecer diversos parámetros para adaptar el proceso de cálculo, y, por tanto, la estructura final, al dataset que se desea visualizar. Por ejemplo, se podrían definir la distancia mínima entre nodos, la fuerza de repulsión...

Se muestra el tamaño del nodo como el número de fans de cada página y el color según el tipo de entidad, entre los siguientes: Arts/Humanities Website, Community, Education, Local Business, Non-Profit Organization, Sports Event, Teacher, TV Show y University.

Finalmente, manteniendo el puntero sobre un nodo, se muestra un «title» con el nombre abreviado de la página. Los nodos pueden ser arrastrados uno a uno para resituarlos, moviendo automáticamente los enlaces a otros nodos.

Análisis mediante la visualización

La visualización muestra algunas de las características del grafo, como la presencia de comunidades y los nodos que ocupan posiciones más centrales, o bien que conectan diferentes comunidades (llamados hubs). Aunque la posición absoluta realmente no importa (el mismo grafo podría representarse intercambiando izquierda y derecha, por ejemplo), sí es fundamental la relativa, que da importancia a la cercanía o lejanía entre nodos.

En concreto, se puede observar la presencia de grupos de entidades fuertemente enlazadas entre sí, mientras que hay entidades que no están enlazadas con ninguna otra (debido al filtro realizado para poder representar el grafo de forma adecuada).

Limitaciones

Al contrario que en el caso del diagrama Chord, un elevado número de entidades (nodos) o relaciones (enlaces) no supondría un problema a la hora de interpretar el grafo, excepto si el número de enlaces es excesivo.

Aunque el detalle de cada entidad puede ser complicado de mostrar, al ser un gráfico orientado a mostrar comunidades o grupos de entidades relacionadas la lectura general no es un problema.

Detalles técnicos (how to?)

Esta visualización consiste en una página HTML (enlace) que incorpora código D3.js y puede ser utilizada como base para reproducirla usando cualquier otro conjunto de datos.

Es necesario disponer de la librería d3.v4.min.js (v4, descargable también desde D3.js), la cual debe estar en el mismo directorio de trabajo que la página web mencionada en el subdirectorio "js".

El fichero usado en este ejemplo puede descargarse desde este enlace. Se recomienda utilizar alguna herramienta de edición de ficheros JSON (por ejemplo este) para su manipulación.

El fichero parallel-sets_base.html que contiene el código D3.js puede ser modificado para reutilizar la visualización con otros ficheros JSON, de la manera siguiente:

Ejercicio

Se plantea repetir el ejemplo utilizando otro fichero JSON que tenga el formato adecuado, comprobando qué sucede con la visualización cuando el número de nodos y enlaces mostrados es muy elevado (p. ej. más de 1.000 o 10.000).

Referencias

Materiales creados por Álex González (outliers) y Julià Minguillón, publicados bajo una licencia Creative Commons CC-BY-SA 3.0, Universitat Oberta de Catalunya (FUOC), 2016.