Grafvisualisering med Neo4j med Neovis.js

Utnyttja grafalgoritmer för datavisualisering

(William Lyon) (16 apr 2018)

Uppdatering: OReilly-boken ”Grafalgoritmer på Apache Spark och Neo4j Book finns nu som gratis nedladdning av e-bok, från neo4j.com

I det här inlägget använder vi en Neo4j Sandbox -instans för att börja med en Twitter-dataset, köra PageRank och community-upptäckt på data. Visa sedan hur du bäddar in en grafvisualisering i en webbapp med Neovis.js .

I det här inlägget undersöker vi hur man skapar grafdata visualiseringar som använder resultaten av grafalgoritmer som PageRank och samhällsdetektering . Efter att ha kört några grafalgoritmer med biblioteket neo4j-graph-algorithms använder vi JavaScript-visualiseringsbiblioteket Neovis.js för att skapa visualiseringar som kan inbäddas i en webbapp, hämta data direkt från Neo4j.

Mål för grafvisualisering

Det finns olika motiv och verktyg för att skapa grafvisualiseringar. Detta inkluderar verktyg för att utforska grafen – den typ av interaktiva visualiseringar som du kan se i Neo4j-webbläsare . Eller visualiseringar för som visar resultaten av någon analys . Dessa kan vara interaktiva (något som ska inbäddas i en webbapp eller till och med en fristående applikation) eller statiska, avsedda att förmedla specifik betydelse som kan användas på tryck eller i ett blogginlägg.

Detta inlägg kommer att fokusera på ett verktyg som tar upp vissa specifika mål för grafvisualisering. Detta verktyg är Neovis.js och används för att skapa JavaScript-baserade grafvisualiseringar som är inbäddade i en webbapp. Den använder JavaScript Neo4j-drivrutinen för att ansluta till och hämta data från Neo4j och ett JavaScript-bibliotek för visualisering som heter vis .js för rendering av grafvisualiseringar. Neovis.js kan också utnyttja resultaten av grafalgoritmer som PageRank och communitydetektering för att utforma visualiseringen genom att binda fastighetsvärden till visuella komponenter.

Denna skärmcast visar hur man använder biblioteket Neovis.js för att skapa grafdatavisualiseringar utformade efter resultaten av grafalgoritmer med data från Neo4j.

Grafvisualisering + diagramalgoritmer

Det finns tre vanliga sätt som grafvisualiseringar kan förbättras med grafalgoritmer. Specifikt handlar det om att utforma visuella komponenter proportionellt mot resultaten av dessa algoritmer:

  1. Bindande nodstorlek till en centralitetsalgoritm , såsom grad, PageRank eller mellanliggande centralitet. Detta gör att vi snabbt kan se de viktigaste noderna i nätverket.
  2. Visuell gruppering av grupper eller kluster i diagrammet görs genom användning av färg, så att vi snabbt kan identifiera dessa distinkta grupperingar.
  3. Styling relation tjocklek proportionellt till en kantvikt , i sociala nätverksdata kan detta vara antalet interaktioner mellan två tecken, i logistik och routningsdata kan det vara avståndet mellan två distributionscentra och är användbart för sökvägsalgoritmer (t.ex. som A * eller Dijkstra).

Komma igång med datamängden

Vi ska använda den ryska Twitter Trolls sandlådan som vår dataset. Denna dataset innehåller tweets från kända ryska Troll-konton som publicerades offentligt av NBC News. Du kan skapa din egen Neo4j Sandbox-instans här.

Datamodellen för Twitter Trolls dataset innehåller tweets , Användare, Hashtags, URL-adresser som delas i tweets och nämner och retweets.

I grafdata är ofta några av de mest intressanta relationerna härledda , och inte direkt modellerad i data. Användar-användarens retweetdiagram är ett exempel på detta. Vilka användare retweetar vilka andra användare?Vem är den viktigaste användaren i denna retweet-graf? Finns det grupper av användare som ofta retweetar varandra?

Här har vi en tweet som publicerades av en användare, som en annan användare retweetade. Detta innebär att en användar-användare retweets-relation. Vårt första steg kommer att vara att hitta de härledda retweets-förhållandena och köra våra grafalgoritmer.

För att hitta de viktigaste användarna och samhällen som använder detta retweet-nätverk kommer vi först hitta alla Troll-användare och skapa ett RETWEETS -förhållande som direkt ansluter användarna i diagrammet. Vi lagrar en count -egenskap i förhållandet som representerar antalet gånger som användaren har retweetat den andra:

När vi väl har skapat dessa RETWEETS -relationer kan vi köra PageRank över denna del av diagrammet (vi kan också använda en Cypher-fråga att köra PageRank över det projicerade diagrammet utan att uttryckligen skapa relationerna):

Eftersom vi anger write: true ovanför kommer inte bara att köra PageRank utan lägga till en pagerank -egenskap till noderna innehåller deras PageRank-poäng. Vi kan sedan fråga med det egenskapsvärdet för att hitta de tio bästa trollkontona efter PageRank-poäng:

Och slutligen kan vi köra en communitydetekteringsalgoritm i retweet-nätverket, i detta fall etikettutbredning:

Detta lägger till en community -egenskap till noderna, vilket anger vilken grupp som algoritmen har bestämt att noden tillhör.

Så vi har nu kört två grafalgoritmer (PageRank och propagering av etiketter), men hur är vi förnuftiga med resultaten? En visualisering kan hjälpa oss att hitta insikter i data.

Skapa en grafvisualisering med Neovis.js

För att skapa en visualisering med Neovis.js måste vi först ansluta till Neo4j. På fliken detaljer i vår Sandbox-instans kan vi hitta anslutningsdetaljerna för vår Neo4j-instans:

Serveranslutningssträngen, användarnamnet och lösenordet inkluderas i ett konfigurationsobjekt som vi skickar till konstruktören för Neovis. Vi måste också ange vilka nodetiketter vi vill visualisera och hur de ska utformas (vilka egenskaper som bestämmer nodstorlek och färg).

Neovis.js fungerar genom att fylla i en

-element med visualiseringen, så vi måste ange id för det elementet i konfigurationsobjektet, samt hur man ansluter till vår Neo4j-instans och vilka egenskaper som ska användas för att bestämma nodstorlek, färg och förhållandets tjocklek. Här är koden för att generera en grafvisualisering av vårt retweet-nätverk från vår Neo4j Sandbox-instans med pagerank -egenskapen för att bestämma nodstorlek, community för färg och count relationsegenskap för relationstjocklek:

Och här ser vår visualisering ut:

Det finns några fler konfigurationsalternativ som du kan läsa om i projektdokumentationen.

Resurser

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

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *