py2neo+Neo4j初体验

Posted oldmao_2000

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了py2neo+Neo4j初体验相关的知识,希望对你有一定的参考价值。

这里写目录标题

简介

图数据库是做知识图谱的好东东。当然,还可以做很多东西:
数据可视化、复杂网络不社会网络分析等
目前市面上有很多种,排名可以参考这里
Neo4j作为图数据库中的头牌,当然有其独到之处,
Desktop相当于管理数据库的客户端可以不用装,因为有web管理界面
还有一个auraDB好像是云上的数据库,一般也用不上
这里简单记录第一次使用Neo4j的一些注意事项

安装与沙箱使用

Windows下安装很简单,下载下来的是一个压缩包:

这里选择当然是免费的社区版
解压缩后用cmd窗口到bin目录下面,运行neo4j.bat
按提示加start 参数或者把这个装成服务来启动,这里有前提,需要有java的JDK,我机器上木有,没往下折腾。
因为官网提供了Neo4j Sandbox
这个是可以直接云上创建可以用来直接做实验的环境,重要的是:
它支持远程连接!
它支持远程连接!
它支持远程连接!
如果是自己做实验,登录创建一个空白沙箱

当然,官网还提供了丰富的例子。

可以看到Neo4j有两个大方向:开发与数据挖掘

注意:
创建的沙箱有时间限制:三天,可以延长到十天(只能延长一次),对于做一些小实验来说已经够用了。
点击Connection details可以看到

因为会销毁,这里就不打码了,几个重要的信息:
用户名和密码
还有就是Bolt URL

点击open按钮后就可以在图形界面管理数据库

py2neo

py2neo现在的版本是v4,网上很多教程都是老版本的,没法用。。。

先导入库,没装就pip装下:

from py2neo import Node ,Graph,Relationship
import pandas as pd

连接数据库,这里注意连接的信息要用到创建沙箱的Connection details

g=Graph("bolt://3.239.106.31:7687", auth=("neo4j", "user-categories-mineral"))#这里用的官方的sandbox
#注意,老版的用户名密码写法有问题:
#g = Graph('http://localhost:7474/',username='neo4j',password='123456')

g.delete_all()#清空数据库

读取节点数据然后创建英雄节点:

hero_data=pd.read_csv('./data/王者荣耀hero.csv',header=0,encoding='gbk')#这里注意数据文件的路径

print(len(hero_data))#68个数据
#这里不知道为什么要运行很久,估计是远程数据库的原因
for i in range(0,len(hero_data)):
    temp=Node('hero',name=str(hero_data['name'][i]),
           skill_passive=str(hero_data['skill_passive'][i]),
           skill_1=str(hero_data['skill_1'][i]),
           skill_1_cooling=str(hero_data['skill_1_cooling'][i]),
           skill_1_cost=str(hero_data['skill_1_cost'][i]),
           skill_2=str(hero_data['skill_2'][i]),
           skill_2_cost=str(hero_data['skill_2_cost'][i]),
           skill_2_cooling=str(hero_data['skill_2_cooling'][i]),
           R=str(hero_data['R'][i]),R_cooling=str(hero_data['R_cooling'][i]),
           R_cost=str(hero_data['R_cost'][i]),tag=str(hero_data['tag'][i]),
           HP=str(hero_data['HP'][i]),MP=str(hero_data['MP'][i]),
           HP_recover=str(hero_data['HP_recover'][i]),
           MP_recover=str(hero_data['MP_recover'][i]),
           attack=str(hero_data['attack'][i]),
           defense=str(hero_data['defense'][i]),
           magic_defense=str(hero_data['magic_defense'][i]),
           speed=str(hero_data['speed'][i]),
           attack_range=str(hero_data['attack_range'][i]))
    g.create(temp)

后面创建物品节点的代码就不贴了,主要是创建关系。
关系有三种:
武器与英雄关系
武器与武器关系
英雄与武器关系

关键代码为:

rel = Relationship(g.nodes.match('hero',name= data['name'][m]).first(), data['guanxi'][m], g.nodes.match('hero',name=data['name2'][m]).first())
g.create(rel)

这里的data是从excel中读取的,大概是这样:

问题记录

这里的关系非常多,三种关系将近2000条记录
上面也提到,估计是远程数据库的关系,一条条的create非常慢,将近0.5秒一条,解决方法应该是批量插入,但是没有找到具体解决的代码。

以上是关于py2neo+Neo4j初体验的主要内容,如果未能解决你的问题,请参考以下文章

使用py2neo(Neo4j)自动增加属性?

Py2neo成功连接Neo4j初探:Movie Graph

知识图谱Python.py2neo操作Neo4j

学习记录-py2neo:Neo4j数据库的python驱动

如何使用py2neo v4和Neo4j合并节点和关系

neo4j - py2neo - 无法在创建时将参数放入关系中