Home Up PDF Prof. Dr. Ingo Claßen
Neo4j GDS Algorithmen - ADBKT

Graph Data Science

Graph Data Science: Pipeline

Neo4j Graph Data Science

Algorithmen-Ausprägungen

  • stream – Liefert ein Ergebnis wie eine normale Cypher Query
  • mutate – Schreibt Ergebnisse in den In-Memory Graph
  • write – Schreibt Ergebnisse in die Neo4j-Datenbank

(Neo4j-Dokumentation)

Shortest Path – Graph

(Dijkstra Source-Target)

Shortest Path – Hops

MATCH (n1:Node {l: '101'}), (n2:Node {l: '107'})
CALL gds.shortestPath.dijkstra.stream('g', {
   sourceNode: n1,
   targetNode: n2
})
YIELD index, sourceNode, targetNode,
      totalCost, nodeIds, costs, path
WITH [nodeId IN nodeIds |
      gds.util.asNode(nodeId).nid] AS p
UNWIND p AS nid
RETURN nid;

 

nid
101
102
108
109
106
107

Shortest Path – Weight

MATCH (n1:Node {l: '101'}), (n2:Node {l: '107'})
CALL gds.shortestPath.dijkstra.stream('g', {
   sourceNode: n1,
   targetNode: n2,
   relationshipWeightProperty: 'w'
})
YIELD index, sourceNode, targetNode,
      totalCost, nodeIds, costs, path
WITH [nodeId IN nodeIds |
      gds.util.asNode(nodeId).nid] AS p
UNWIND p AS nid
RETURN nid;
nid
101
102
110
111
103
104
105
106
107

Minimum Weight Spanning Tree – Graph

(Dokumentation)

Minimum Weight Spanning Tree – Solution

  • Ursprungsgraph hat Kantentyp Edge
  • Neue Kanten zum Kantentyp Edge1 werden angelegt (schreibt in den Graphen)
MATCH (n:Node {nid: 201})
CALL gds.alpha.spanningTree.minimum.write('g', {
   startNodeId: id(n),
   relationshipWeightProperty: 'w',
   writeProperty: 'Edge1',
   weightWriteProperty: 'w'
})
YIELD effectiveNodeCount
RETURN effectiveNodeCount;

Graph mit Edge1 wird ausgelesen und angezeigt.

Centrality – Graph

Closeness Centrality (Doku)

  • u – Knoten
  • n – Anzahl Knoten
  • d(u,v) – Distanz des kürzesten Pfades zwischen u und v

Betweenness Centrality (Doku)

  • u – Knoten
  • p – Anzahl der kürzesten Pfade zwischen s und t
  • p(u) – Anzahl der kürzesten Pfade zwischen s und t, die u enthalten

Closeness Centrality – Solution

CALL gds.alpha.closeness.stream('g')
YIELD nodeId, centrality
RETURN gds.util.asNode(nodeId).nid AS nid,
       centrality AS cc
ORDER BY cc DESC;

Betweenness Centrality – Solution

CALL gds.betweenness.stream('g')
YIELD nodeId, score
RETURN gds.util.asNode(nodeId).nid AS nid,
       score AS bc
ORDER BY score DESC;

Pagerank – Graph 1

(Dokumentation)

Pagerank – Solution 1

CALL gds.pageRank.stream('g')
YIELD nodeId, score
RETURN gds.util.asNode(nodeId).nid AS nid,
       score
ORDER BY score DESC;

Pagerank – Graph 2

Pagerank – Solution 2

Strongly Connected Components – Graph

(Dokumentation)

Strongly Connected Components – Solution

CALL gds.alpha.scc.stream('g')
YIELD nodeId, componentId
RETURN gds.util.asNode(nodeId).nid AS nid,
       componentId AS cid
ORDER BY cid;