Grafvisualisering med Neo4j ved bruk av Neovis.js

Utnytte grafalgoritmer for datavisualisering

(William Lyon) (16. apr. 2018)

Oppdatering: OReilly-boken «Grafalgoritmer på Apache Spark og Neo4j Book er nå tilgjengelig som gratis nedlasting av e-bok, fra neo4j.com

I dette innlegget bruker vi en Neo4j Sandbox -forekomst for å starte med et Twitter-datasett, kjøre PageRank og community-deteksjon på dataene. Vis deretter hvordan du legger inn en grafvisualisering i en webapp ved hjelp av Neovis.js .

I dette innlegget undersøker vi hvordan du lager grafdata-visualiseringer som bruker resultatene av grafalgoritmer som PageRank og samfunnsgjenkjenning . Etter å ha kjørt noen grafalgoritmer med neo4j-graph-algoritmer -biblioteket, bruker vi JavaScript-visualiseringsbiblioteket Neovis.js for å lage visualiseringer som kan legges inn i en webapp, og hente data direkte fra Neo4j.

Goals Of Graph Visualization

Det er forskjellige motivasjoner og verktøy for å lage grafvisualiseringer. Dette inkluderer verktøy for å utforske grafen – typen interaktive visualiseringer du kan se i Neo4j-nettleser . Eller visualiseringer for som viser resultatene av noen analyse . Disse kan være interaktive (noe som skal bygges inn i en webapp eller til og med en frittstående applikasjon), eller statisk, ment å formidle spesifikk betydning som kan brukes på trykk eller i et blogginnlegg.

Dette innlegget vil fokusere på ett verktøy som adresserer noen spesifikke mål for grafvisualisering. Dette verktøyet er Neovis.js og brukes til å lage JavaScript-baserte grafvisualiseringer som er innebygd i en webapp. Den bruker JavaScript Neo4j-driver for å koble til og hente data fra Neo4j og et JavaScript-bibliotek for visualisering kalt vis .js for gjengivelse av grafvisualiseringer. Neovis.js kan også utnytte resultatene av grafalgoritmer som PageRank og community detection for å utforme visualiseringen ved å binde eiendomsverdier til visuelle komponenter.

Denne skjermsendingen viser hvordan du bruker Neovis.js -biblioteket for å lage grafdatavisualiseringer utformet til resultatene av grafalgoritmer med data fra Neo4j.

Grafvisualisering + Grafalgoritmer

Det er tre vanlige måter som grafvisualiseringer kan forbedres med grafalgoritmer. Spesielt involverer dette styling av visuelle komponenter proporsjonalt med resultatene av disse algoritmene:

  1. Bindende nodestørrelse til en sentralitetsalgoritme , for eksempel grad, PageRank eller sentralitet mellom betweenness. Dette lar oss med et øyeblikk se de viktigste nodene i nettverket.
  2. Visuell gruppering av samfunn eller klynger i grafen gjøres ved bruk av farge, slik at vi raskt kan identifisere disse forskjellige grupperingene.
  3. Styling forholdstykkelse proporsjonalt med en kantvekt , i sosiale nettverksdata kan dette være antall interaksjoner mellom to tegn, i logistikk og rutedata kan det være avstanden mellom to distribusjonssentre og er nyttig for banesøkende algoritmer (slik som A * eller Dijkstra).

Komme i gang med datasettet

Vi skal bruke den russiske Twitter Trolls sandkassen som datasett. Dette datasettet inneholder tweets fra kjente russiske Troll-kontoer, som offentliggjort av NBC News. Du kan opprette din egen Neo4j Sandbox-forekomst her.

Datamodellen for Twitter Trolls-datasettet inkluderer tweets , Brukere, hashtags, nettadresser som deles i tweets og nevner og retweets.

I grafdata er ofte noen av de mest interessante forholdene utledet , og ikke direkte modellert i dataene. Bruker-bruker retweet-grafen er et eksempel på dette. Hvilke brukere retweeter hvilke andre brukere?Hvem er den viktigste brukeren i denne retweetgrafen? Er det grupper av brukere som ofte tweeter hverandre?

Her har vi en tweet som ble lagt ut av en bruker, at en annen bruker retweetet. Dette innebærer et forhold mellom bruker og bruker. Vårt første skritt vil være å finne de avledede retweets-forholdene og kjøre grafalgoritmene våre.

For å finne de viktigste brukerne og samfunnene som bruker dette retweet-nettverket først finn alle Troll-brukere og opprett et RETWEETS forhold som kobler direkte brukerne i grafen. Vi lagrer en count -egenskap på forholdet som representerer antall ganger brukeren har retweetet den andre:

Når vi har opprettet disse RETWEETS -forholdene, kan vi kjøre PageRank over denne delen av grafen (vi kan også bruke et Cypher-spørsmål for å kjøre PageRank over den projiserte grafen uten å eksplisitt opprette relasjonene):

Siden vi spesifiserer write: true over dette vil ikke bare kjøre PageRank, men legge til en pagerank -egenskap til nodene inneholder PageRank-poengsummen. Vi kan deretter spørre ved hjelp av denne eiendomsverdien for å finne de ti beste Troll-kontoene etter PageRank-poengsum:

Og til slutt kan vi kjøre en algoritme for gjenkjenning av fellesskap på retweet-nettverket, i dette tilfellet forplantning av etiketter:

Dette vil legge til en community -egenskap til nodene, som indikerer hvilket fellesskap algoritmen har bestemt at noden tilhører.

Så vi har nå kjørt to grafalgoritmer (PageRank og forplantning av etiketter), men hvordan gir vi mening om resultatene? En visualisering kan hjelpe oss med å finne innsikt i dataene.

Opprette en grafvisualisering med Neovis.js

For å lage en visualisering med Neovis.js må vi først koble til Neo4j. I detaljfanen i Sandbox-forekomsten kan vi finne tilkoblingsdetaljene for Neo4j-forekomsten:

Serverforbindelsestrengen, brukernavnet og passordet vil bli inkludert i et konfigurasjonsobjekt som vi sender til konstruktøren for Neovis. Vi må også spesifisere hvilke nodeetiketter vi vil visualisere og hvordan de skal utformes (hvilke egenskaper som bestemmer nodestørrelse og farge).

Neovis.js fungerer ved å fylle ut en

-element med visualiseringen, så vi må spesifisere ID-en til det elementet i konfigurasjonsobjektet, samt hvordan vi kobler til Neo4j-forekomsten vår, og hvilke egenskaper som skal brukes til å bestemme nodestørrelse, farge , og forholdstykkelse. Her er koden for å generere en grafvisualisering av vårt retweet-nettverk fra Neo4j Sandbox-forekomsten, ved hjelp av pagerank -egenskapen for å bestemme nodestørrelse, community for farge og count forholdsegenskap for forholdstykkelse:

Og slik ser visualiseringen vår ut:

Det er noen flere konfigurasjonsalternativer som du kan lese om i prosjektdokumentasjonen.

Ressurser

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

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *