Visualización de gráficos con Neo4j usando Neovis.js

Aprovechamiento de algoritmos gráficos para visualización de datos

(William Lyon) (16 de abril de 2018)

Actualización: El libro de OReilly “Graph Algorithms on Apache Spark y Neo4j Book ahora está disponible como descarga gratuita de libros electrónicos de neo4j.com

En esta publicación usaremos una instancia de Neo4j Sandbox para comenzar con un conjunto de datos de Twitter, ejecutar PageRank y detección de comunidad en los datos. Luego, muestre cómo insertar una visualización gráfica en una aplicación web usando Neovis.js .

En esta publicación, exploramos cómo crear visualizaciones de datos de gráficos que utilizan los resultados de algoritmos de gráficos como PageRank y detección de comunidad . Después de ejecutar algunos algoritmos de gráficos con la biblioteca neo4j-graph-algorítms , usaremos la biblioteca de visualización de gráficos de JavaScript Neovis.js para crear visualizaciones que se pueden incrustar en una aplicación web, obteniendo datos directamente de Neo4j.

Objetivos de la visualización de gráficos

Existen diferentes motivaciones y herramientas para crear visualizaciones de gráficos. Esto incluye herramientas para explorar el gráfico , el tipo de visualizaciones interactivas que puede ver en Navegador Neo4j . O visualizaciones para que muestran los resultados de algún análisis . Estos pueden ser interactivos (algo que se incrustará en una aplicación web o incluso en una aplicación independiente) o estáticos, destinados a transmitir un significado específico que podría usarse en forma impresa o en una publicación de blog.

Esta publicación se centrará en una herramienta que aborda algunos objetivos específicos de visualización de gráficos. Esta herramienta es Neovis.js y se utiliza para crear visualizaciones de gráficos basadas en JavaScript que están incrustadas en una aplicación web. Utiliza el controlador JavaScript Neo4j para conectarse y obtener datos de Neo4j y una biblioteca JavaScript para visualización llamada vis .js para renderizar visualizaciones de gráficos. Neovis.js también puede aprovechar los resultados de los algoritmos de gráficos como PageRank y la detección de comunidades para diseñar la visualización vinculando valores de propiedad a componentes visuales.

Este screencast muestra cómo utilizar la biblioteca Neovis.js para crear visualizaciones de datos de gráficos con el estilo de los resultados de los algoritmos de gráficos con datos de Neo4j.

Visualización de gráficos + Algoritmos de gráficos

Hay tres formas en que las visualizaciones de gráficos se pueden mejorar con algoritmos de gráficos. Específicamente, esto implica diseñar componentes visuales proporcionalmente a los resultados de estos algoritmos:

  1. Vincular el tamaño del nodo a un algoritmo de centralidad , como grado, PageRank o centralidad de intermediación. Esto nos permite ver de un vistazo los nodos más importantes de la red.
  2. Agrupar visualmente comunidades o clústeres en el gráfico se realiza mediante el uso de color, de modo que podamos identificar rápidamente estas distintas agrupaciones.
  3. El grosor de la relación de estilo es proporcional a un peso de borde , en los datos de redes sociales, esta podría ser la cantidad de interacciones entre dos caracteres, en la logística y los datos de enrutamiento podría ser la distancia entre dos centros de distribución y es útil para algoritmos de búsqueda de rutas (como como A * o de Dijkstra).

Empezando con el conjunto de datos

Vamos a utilizar la caja de arena rusa Twitter Trolls como nuestro conjunto de datos. Este conjunto de datos contiene tweets de cuentas de trolls rusos conocidas, publicadas por NBC News. Puedes crear tu propia instancia de Neo4j Sandbox aquí.

El modelo de datos para el conjunto de datos de Twitter Trolls incluye Tweets , Usuarios, Hashtags, URL compartidas en Tweets y menciones y retweets.

En los datos de gráficos, a menudo algunas de las relaciones más interesantes son inferidas , y no modelado directamente en los datos. El gráfico de retweet usuario-usuario es un ejemplo de esto. ¿Qué usuarios retuitean a qué otros usuarios?¿Quién es el usuario más importante en este gráfico de retweet? ¿Hay grupos de usuarios que se retuitean con frecuencia?

Aquí tenemos un tweet que se publicó por un usuario, que otro usuario retuiteó. Esto implica una relación usuario-usuario retweets. Nuestro primer paso será encontrar esas relaciones de retweets inferidas y ejecutar nuestros algoritmos gráficos.

Para encontrar los usuarios y comunidades más importantes que utilizan esta red de retweet Primero busque todos los usuarios de Troll y cree una relación RETWEETS conectando directamente a los usuarios en el gráfico. Almacenamos una propiedad count en la relación que representa el número de veces que el usuario ha retuiteado al otro:

Una vez que hayamos creado estas RETWEETS relaciones, podemos ejecutar PageRank sobre esta parte del gráfico (también podríamos usar una consulta Cypher para ejecutar PageRank sobre el gráfico proyectado sin crear explícitamente las relaciones):

Dado que especificamos write: true anterior, esto no solo ejecutará PageRank sino que agregará una propiedad pagerank a los nodos que contienen su puntaje de PageRank. Luego, podemos consultar usando ese valor de propiedad para encontrar las diez cuentas de Troll principales por puntaje de PageRank:

Y finalmente podemos ejecutar un algoritmo de detección de comunidad en la red de retweet, en este caso la propagación de etiquetas:

Esto agregará una propiedad community a los nodos, indicando qué comunidad algoritmo ha determinado el nodo al que pertenece.

Así que ahora hemos ejecutado dos algoritmos de gráficos (PageRank y propagación de etiquetas), pero ¿cómo le damos sentido a los resultados? Una visualización puede ayudarnos a encontrar conocimientos en los datos.

Creación de una visualización de gráfico con Neovis.js

Para crear una visualización con Neovis.js, primero debemos conectarnos a Neo4j. En la pestaña de detalles de nuestra instancia de Sandbox podemos encontrar los detalles de conexión para nuestra instancia de Neo4j:

La cadena de conexión del servidor, el nombre de usuario y la contraseña se incluirán en un objeto de configuración que pasaremos al constructor de Neovis. También necesitaremos especificar qué etiquetas de nodo queremos visualizar y cómo se deben diseñar (qué propiedades determinan el tamaño y el color del nodo).

Neovis.js funciona rellenando un

elemento con la visualización, por lo que tendremos que especificar la identificación de ese elemento en el objeto de configuración, así como también cómo conectarnos a nuestra instancia de Neo4j, y qué propiedades usar para determinar el tamaño del nodo, el color y espesor de la relación. Aquí está el código para generar una visualización gráfica de nuestra red de retweet desde nuestra instancia de Neo4j Sandbox, usando la propiedad pagerank para determinar el tamaño del nodo, community para el color y la propiedad de relación count para el grosor de la relación:

Y así es como se ve nuestra visualización:

Hay algunas opciones de configuración más sobre las que puede leer en la documentación del proyecto.

Recursos

Descarga gratuita: OReilly “Graph Algorithms on Apache Spark y Neo4j”

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *