Grafische visualisatie met Neo4j met Neovis.js

Grafiekalgoritmen gebruiken voor gegevensvisualisatie

(William Lyon) (16 april 2018)

Update: Het OReilly-boek “Graph Algorithms on Apache Spark en Neo4j Book is nu beschikbaar als gratis e-boek downloaden, van neo4j.com

In dit bericht gebruiken we een Neo4j Sandbox -instantie om te beginnen met een Twitter-dataset, om PageRank en community-detectie uit te voeren op de gegevens. Laat vervolgens zien hoe u een grafiekvisualisatie in een webapp kunt insluiten met Neovis.js .

In dit bericht onderzoeken we hoe we grafische datavisualisaties kunnen maken die de resultaten gebruiken van grafiekalgoritmen zoals PageRank en gemeenschapsdetectie . Nadat we enkele grafiekalgoritmen hebben uitgevoerd met de bibliotheek neo4j-graph-algoritmen , gebruiken we de JavaScript-bibliotheek voor grafische visualisatie Neovis.js om visualisaties te maken die kunnen worden ingesloten in een webapp, waarbij gegevens rechtstreeks uit Neo4j worden opgehaald.

Goals of Graph Visualization

Er zijn verschillende motivaties en tools voor het maken van grafische visualisaties. Dit omvat tools voor het verkennen van de grafiek – het type interactieve visualisaties dat u zou kunnen zien in Neo4j Browser . Of visualisaties voor die de resultaten tonen van een analyse . Deze kunnen interactief zijn (iets dat in een webapp of zelfs een zelfstandige applicatie moet worden ingesloten) of statisch, bedoeld om een ​​specifieke betekenis over te brengen dat kan worden gebruikt in gedrukte vorm of in een blogpost.

Deze post zal zich richten op één tool die een aantal specifieke doelen van grafiekvisualisatie aanpakt. Deze tool is Neovis.js en wordt gebruikt voor het maken van op JavaScript gebaseerde grafische visualisaties die zijn ingesloten in een webapp. Het gebruikt het JavaScript Neo4j-stuurprogramma om verbinding te maken met en gegevens op te halen uit Neo4j en een JavaScript-bibliotheek voor visualisatie genaamd vis .js voor het weergeven van grafiekvisualisaties. Neovis.js kan ook gebruikmaken van de resultaten van grafiekalgoritmen zoals PageRank en community-detectie voor het stylen van de visualisatie door eigenschapswaarden te binden aan visuele componenten.

Deze screencast toont hoe u de Neovis.js -bibliotheek gebruikt om grafische gegevensvisualisaties te maken die zijn opgemaakt naar de resultaten van grafiekalgoritmen met gegevens van Neo4j.

Grafiekvisualisatie + grafiekalgoritmen

Er zijn drie algemene manieren waarop grafiekvisualisaties kunnen worden verbeterd met grafiekalgoritmen. Dit betreft met name het opmaken van visuele componenten in verhouding tot de resultaten van deze algoritmen:

  1. Bindende knooppuntgrootte aan een centraal algoritme , zoals graad, PageRank of betweenness centrality. Hierdoor kunnen we in één oogopslag de belangrijkste knooppunten in het netwerk zien.
  2. Visueel groeperen van gemeenschappen of clusters in de grafiek wordt gedaan door het gebruik van kleur, zodat we deze verschillende groepen snel kunnen identificeren.
  3. De dikte van de stijlrelatie proportioneel met een randgewicht , in sociale netwerkgegevens kan dit het aantal interacties tussen twee tekens zijn, in logistieke en routeringsgegevens kan dit de afstand tussen twee distributiecentra zijn en is dit nuttig voor het vinden van algoritmen (zoals als A * of Dijkstras).

Aan de slag met de dataset

We gaan de Russische Twitter Trolls-sandbox gebruiken als onze dataset. Deze dataset bevat tweets van bekende Russische Troll-accounts, zoals openbaar vrijgegeven door NBC News. U kunt uw eigen Neo4j Sandbox-instantie maken hier.

Het datamodel voor de Twitter Trolls-dataset bevat Tweets , Gebruikers, Hashtags, URLs gedeeld in tweets en vermeldingen en retweets.

In grafiekgegevens worden vaak enkele van de meest interessante relaties afgeleid , en niet direct gemodelleerd in de data. De User-User-retweet-grafiek is hier een voorbeeld van. Welke gebruikers retweeten welke andere gebruikers?Wie is de belangrijkste gebruiker in deze retweet-grafiek? Zijn er groepen gebruikers die elkaar regelmatig retweeten?

Hier hebben we een tweet die is gepost door een gebruiker, die een andere gebruiker heeft geretweet. Dit impliceert een relatie tussen gebruiker en gebruiker. Onze eerste stap zal zijn om die afgeleide retweets-relaties te vinden en onze grafiekalgoritmen uit te voeren.

Om de belangrijkste gebruikers en gemeenschappen te vinden die dit retweet-netwerk gebruiken, zullen we Zoek eerst alle Troll-gebruikers en maak een RETWEETS -relatie die de gebruikers in de grafiek rechtstreeks verbindt. We slaan een count eigenschap op in de relatie die het aantal keren vertegenwoordigt dat de gebruiker de andere heeft geretweet:

Zodra we deze RETWEETS relaties hebben gemaakt, kunnen we PageRank over dit deel van de grafiek uitvoeren (we kunnen ook een Cypher-query gebruiken om PageRank over de geprojecteerde grafiek uit te voeren zonder expliciet de relaties te creëren):

Aangezien we write: true hierboven zal niet alleen PageRank draaien, maar een pagerank eigenschap toevoegen aan de nodes die hun PageRank-score bevat. We kunnen vervolgens met behulp van die eigenschapswaarde een zoekopdracht uitvoeren om de top tien Troll-accounts te vinden op basis van PageRank-score:

En tot slot kunnen we een community-detectie-algoritme uitvoeren op het retweet-netwerk, in dit geval labelpropagatie:

Hiermee wordt een community eigenschap aan de nodes toegevoegd, waarmee wordt aangegeven welke community de algoritme heeft bepaald waartoe het knooppunt behoort.

We hebben nu twee algoritmen voor grafieken uitgevoerd (PageRank en labelpropagatie), maar hoe begrijpen we de resultaten? Een visualisatie kan ons helpen inzichten in de gegevens te vinden.

Een grafiekvisualisatie maken met Neovis.js

Om een ​​visualisatie met Neovis.js te maken, moeten we eerst verbinding maken met Neo4j. In het detailtabblad van onze Sandbox-instantie kunnen we de verbindingsdetails voor onze Neo4j-instantie vinden:

De serververbindingsreeks, gebruikersnaam en wachtwoord zullen worden opgenomen in een configuratieobject dat we zullen doorgeven aan de constructor voor Neovis. We zullen ook moeten specificeren welke knooppuntlabels we willen visualiseren en hoe ze moeten worden opgemaakt (welke eigenschappen bepalen de knoopgrootte en kleur).

Neovis.js werkt door een

element met de visualisatie, dus we zullen de id van dat element in het configuratieobject moeten specificeren, evenals hoe we verbinding kunnen maken met onze Neo4j-instantie, en welke eigenschappen moeten worden gebruikt om de knooppuntgrootte en kleur te bepalen , en relatie dikte. Hier is de code om een ​​grafische visualisatie van ons retweet-netwerk te genereren vanuit onze Neo4j Sandbox-instantie, met behulp van de eigenschap pagerank om de knooppuntgrootte te bepalen, community voor kleur, en de count relatie-eigenschap voor relatiedikte:

En zo ziet onze visualisatie eruit:

Er zijn nog een paar configuratie-opties waarover u kunt lezen in de projectdocumentatie.

Bronnen

Gratis download: OReilly “Graph Algorithms on Apache Spark and Neo4j”

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *