安装
从下载站下载对应的包到plugin目录下,修改配置文件/etc/neo4j/neo4j.conf
,末尾加入gds.*
,重新启动
在浏览器输入CALL gds.list()
命令进行测试
建立图映射
为了使用图算法,需要先将图数据库的内容映射为一个新图
如果是全图映射,可以写成
CALL gds.graph.project('all_aj', '*', '*')
YIELD graphName, nodeCount, relationshipCount;
返回结果是
上述代码中第二个参数是节点,第三个参数是关系,可以通过字符串或列表的形式根据单个或多个节点和关系建图。
列举可用图
CALL gds.graph.list()
YIELD graphName, nodeCount, relationshipCount, schema;
PageRank算法
PageRank算法考虑节点的入度和出度计算重要性,可以识别影响力较大的节点。使用下列代码,可返回排名前十的中心节点。
CALL gds.pageRank.stream('all_aj')
YIELD
nodeId,
score
RETURN
nodeId, score
ORDER BY
score DESC
LIMIT
10
为了更直观地查看节点名称,可以修改为以下形式:
CALL gds.pageRank.stream('all_aj')
YIELD
nodeId,
score
RETURN
gds.util.asNode(nodeId).name AS name, score
ORDER BY
score DESC
LIMIT
10
如果想要展示图,可以修改为以下形式
CALL gds.pageRank.stream('all_aj')
YIELD
nodeId,
score
RETURN
gds.util.asNode(nodeId), score
ORDER BY
score DESC
LIMIT
10
标签传播算法
算法的核心思想是通过在网络中传播标签来形成社区。每个节点都被初始化为一个唯一的标签。然后,标签通过连接的边在网络中传播。
在每次传播迭代中,每个节点将其标签更新为其邻居节点中最常见的标签。如果存在平局,算法会随机选择一个标签。这个过程会不断重复,直到标签达到收敛,即每个节点的标签与其邻居节点的大多数标签相同。
通过标签的传播,密集连接的节点组很快就会形成共识,并形成一个社区。在传播结束时,只有少数几个标签会保留下来,大多数标签会消失。具有相同标签的节点被认为属于同一个社区。
CALL gds.labelPropagation.stream('all_aj')
YIELD nodeId, communityId AS Community
RETURN gds.util.asNode(nodeId).name AS Name, Community
ORDER BY Community, Name