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初体验的主要内容,如果未能解决你的问题,请参考以下文章