【数据挖掘】图数据库Neo4j+py2neo+gds实现pagerank和articlerank

数据挖掘系列

提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加
第一章 图数据库Neo4j+py2neo+gds实现pagerank和articlerank


提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档


本文目的

提示:这里可以添加本文要记录的大概内容:

实现pagerank有很多方法,本文主要是基于图数据库neo4j,利用python编程,远程访问数据库,利用py2neo的Cypher API,执行Neo4j 的Graphic Data Science (GDS)图形算法。

据说py2neo支持各种高级图算法,如PageRank、最短路径算法和社区检测算法等,应该不需要通过Cypher语句也能完成算法,欢迎留言探讨。


提示:以下是本篇文章正文内容,下面案例可供参考

一、PageRank & ArticleRank

PageRank&ArticleRank 的简化模型可以参考以下文章, 本文用的数据参考【1】的数据如下。
PageRank 数据

【1】PageRank & ArticleRank
【2】机器学习经典算法之PageRank
【3】pagerank算法详解

二、实现步骤

1.引入库

代码如下(示例):

from py2neo import *
from py2neo.matching import *
import pandas as pd

2.连接数据库

代码如下(示例):

g = Graph('http://neo4j:自己的密码@127.0.0.1:7474')

其中数据库名为neo4j, 密码为“自己的密码”,注意端口号与neo4j.conf里设置一致。

可能问题: 无法打开数据库网页,无任何报错。这时需要查看neo4j的log,看下neo4j是否正常启动。 如果正常启动了,很可能是服务器的防火墙没有打开7474端口,可以参考《linux设置防火墙开通某个端口的访问权限》, 开启7474端口,并重启防火墙。


2.创建节点

for i in range(1, 8):
    book_node = Node("Book", name='book'+str(i))
    g.create(book_node)

3.创建关系

g.create(Relationship(books[0], 'refer', books[3]))
g.create(Relationship(books[1], 'refer', books[3]))
g.create(Relationship(books[2], 'refer', books[3]))
g.create(Relationship(books[3], 'refer', books[4]))
g.create(Relationship(books[3], 'refer', books[5]))
g.create(Relationship(books[0], 'refer', books[4]))

3.通过Cypher API调用GDS的图形算法

query = """
    CALL gds.articleRank.stream('myGraph',
    {maxIterations: 20,
    dampingFactor: 0.8}
    )
    YIELD nodeId, score
    RETURN gds.util.asNode(nodeId).name AS name, score
    ORDER BY score DESC
    """

    result = g.run(query)
    print(pd.DataFrame(result.data()))

ArticleRank运行结果:

在这里插入图片描述

总结

提示:这里对文章进行总结:

py2neo常用方法:

  1. 添加关系属性: 《Neo4j-Cypher、py2neo常用操作整理》
ab = Relationship(a, 'CALL', b)    # 关系的类型为"CALL",两条关系都有属性count,且值为1
ab['count'] = 1        # 设置关系的值
KNOWS = Relationship.type("KNOWS")         # 另一种表示的关系建立
ba = KNOWS(b, a)
test_graph.create(ab)
test_graph.create(ba)
ab['count'] += 1              # 节点/关系的属性赋值
test_graph.push(ab)           # 属性值的更新
print(ba.nodes)    # 打印nodes 开始节点和结束节点的 2 元组。ba.end_node表示结束结点。ba.start_node表示开始结点。

del ba[‘count’] 删除属性。
clear( )在此关系中删除所有属性。

  1. 通过cypher添加关系属性:
MATCH (n)-[r:refer]->() SET r.relationshipWeightProperty = 'weight'
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梦上多多

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值