Использование алгоритмов графиков для визуализации данных
Обновление. Книга О’Рейли Графические алгоритмы в Apache Spark и Neo4j Book теперь доступна для бесплатной загрузки с neo4j.com.

В этом посте мы исследуем, как создать визуализацию графических данных, которая использует результаты графических алгоритмов, таких как PageRank и обнаружение сообщества. После запуска некоторых алгоритмов графа с использованием библиотеки neo4j-graph-алгоритмы мы воспользуемся библиотекой визуализации графов JavaScript Neovis.js для создания визуализаций, которые можно встроить в веб-приложение, получая данные непосредственно из Neo4j.
Цели визуализации графиков
Существуют разные мотивы и инструменты для создания визуализаций графиков. Сюда входят инструменты для исследования графика - типа интерактивных визуализаций, которые вы можете увидеть в Neo4j Browser. Или визуализации для демонстрации результатов некоторого анализа. Они могут быть интерактивными (что-то для встраивания в веб-приложение или даже автономное приложение) или статическими, предназначенными для передачи определенного значения, которые можно использовать в печати или в блоге.
Этот пост будет посвящен одному инструменту, который решает некоторые конкретные задачи визуализации графиков. Этот инструмент называется Neovis.js и используется для создания визуализаций графиков на основе JavaScript, которые встраиваются в веб-приложения. Он использует драйвер JavaScript Neo4j для подключения и извлечения данных из Neo4j и библиотеку JavaScript для визуализации, называемую vis.js, для визуализации графических визуализаций. Neovis.js также может использовать результаты алгоритмов графов, таких как PageRank и обнаружение сообщества, для стилизации визуализации путем привязки значений свойств к визуальным компонентам.
Визуализация графиков + алгоритмы построения графиков
Существует три распространенных способа улучшения визуализации графов с помощью алгоритмов графов. В частности, это включает стилизацию визуальных компонентов пропорционально результатам этих алгоритмов:
- Привязка размера узла к алгоритму центральности, например степени, PageRank или промежуточности. Это позволяет нам сразу увидеть наиболее важные узлы в сети.
- Визуальная группировка сообществ или кластеров на графике осуществляется с помощью цвета, чтобы мы могли быстро идентифицировать эти отдельные группы.
- Толщина отношения стилей пропорциональна весу края, в данных социальных сетей это может быть количество взаимодействий между двумя персонажами, в данных логистики и маршрутизации это может быть расстояние между двумя распределительными центрами, что полезно для поиска пути. алгоритмы (такие как A * или Dijkstra's).
Начало работы с набором данных
Мы собираемся использовать песочницу Russian Twitter Trolls в качестве набора данных. Этот набор данных содержит твиты из известных аккаунтов российских троллей, опубликованные NBC News. Вы можете создать свой собственный экземпляр Neo4j Sandbox здесь.

В данных графика часто выводятся некоторые из наиболее интересных взаимосвязей, а не моделируются непосредственно в данных. График ретвитов Пользователь-Пользователь является примером этого. Какие пользователи ретвитируют других пользователей? Кто самый важный Пользователь на этом графике ретвитов? Есть ли группы пользователей, которые часто ретвитят друг друга?

Чтобы найти наиболее важных пользователей и сообщества, использующие эту сеть ретвитов, мы сначала найдем всех пользователей Troll и создадим RETWEETS отношения, напрямую соединяющие пользователей на графике. Мы сохраняем свойство count для отношения, представляющее количество ретвитов другого пользователя:
После того, как мы создали эти RETWEETS отношения, мы можем использовать PageRank для этой части графика (мы также можем использовать Cypher-запрос для определения PageRank на спроектированном графике без явного создания отношений):
Поскольку мы указываем write: true выше, это не только запустит PageRank, но и добавит свойство pagerank к узлам, содержащим их рейтинг PageRank. Затем мы можем запросить, используя это значение свойства, чтобы найти десять лучших аккаунтов Troll по рейтингу PageRank:
И, наконец, мы можем запустить алгоритм обнаружения сообщества в сети ретвитов, в данном случае распространение метки:
Это добавит к узлам свойство community, указывающее, к какому сообществу алгоритм определил принадлежность узла.
Итак, мы запустили два графических алгоритма (PageRank и распространение меток), но как нам понять результаты? Визуализация может помочь нам разобраться в данных.
Создание визуализации графика с помощью Neovis.js
Чтобы создать визуализацию с помощью Neovis.js, нам сначала нужно подключиться к Neo4j. На вкладке сведений нашего экземпляра Sandbox мы можем найти сведения о подключении для нашего экземпляра Neo4j:

Строка подключения к серверу, имя пользователя и пароль будут включены в объект конфигурации, который мы передадим конструктору Neovis. Нам также необходимо указать, какие метки узлов мы хотим визуализировать и как они должны быть стилизованы (какие свойства определяют размер и цвет узла).
Neovis.js работает, заполняя элемент <div> визуализацией, поэтому нам нужно указать идентификатор этого элемента в объекте конфигурации, а также то, как подключиться к нашему экземпляру Neo4j и какие свойства использовать для определения размера узла. , цвет и толщина отношения. Вот код для создания графической визуализации нашей сети ретвитов из нашего экземпляра Neo4j Sandbox с использованием свойства pagerank для определения размера узла, community для цвета и свойства count для толщины взаимосвязи:
А вот как выглядит наша визуализация:

Есть еще несколько вариантов конфигурации, о которых вы можете прочитать в документации по проекту.
Ресурсы
- Песочница Neo4j: neo4jsandbox.com/
- Страница Neovis.js на GitHub: github.com/neo4j-contrib/neovis.js
- Страница разработчика визуализации графиков Neo4j:
neo4j.com/developer/guide-data-visualization/ - Графические алгоритмы Neo4j: neo4j.com/developer/graph-algorithms/
