用neo4j构建广州市景点知识图谱及数据库上云


一、数据

首先展示一下数据结构,最初是想用import方式导入utf-8格式的csv到neo4j,但是csv的分隔符是逗号,而我们数据里面的属性常常是一大段话,所以经常出现属性混在一起导致信息错误、乱码的问题,因为数据量不算大,所以我们选择使用excel数据,用python解析并逐行导入,乱码问题好很多,但是以上两种导入的速度差别很大,第一种几秒就可以,第二种需要十几分钟。

我们的知识图谱包括四类节点:景点(ID为J开头)、美食(ID为F开头)、酒店(ID为H开头)、交通(ID为T开头),包括五种关系:景点与附近景点、景点与内部景点、景点与附近美食、景点与附近交通,以下是数据格式:
在这里插入图片描述

这是节点数据的utf-8的excel格式,注意表头不要出错,依次为:ID, name, :LABEL,然后后面是各种自定义属性,不同的节点最好要以ID不同前缀加以区分,LABEL对应节点类型

在这里插入图片描述
这是关系数据的utf-8的excel格式,一个关系中的两个节点ID是节点的唯一标识,比如上面就是景点(J开头)和美食(F开头)之间的附近关系,这里也要严格按照表头格式,依次为:START_ID, :END_ID, :TYPE以及自定义属性,type对应关系类型,然后Neo4j中的关系是没有ID的。

二、部署云数据库

1.下载解压

我用的是阿里云,用putty远程连接然后跑以下命令
下载neo4j

wget https://neo4j.com/artifact.php?name=neo4j-community-3.5.19-unix.tar.gz

解压并到自己想要放在的目录下面

tar -zvxf artifact.php\?name\=neo4j-community-3.5.19-unix.tar.gz 

但是因为网络问题我下载很慢,最后选择在本地下载再用WinSCP传到云服务器上
Neo4j官网https://neo4j.com/download-center/#community,注意下载neo4j的版本要跟jdk版本适配,我jdk是1.8所以没有下载neo4j 4.0以上的版本

2.配置环境

使用root权限修改/etc/profile配置

sudo vim /etc/profile 

在文件的最后添加以下代码

#Neo4j
export NEO4J_HOME=/root/Neo4j/neo4j
export PATH=$PATH:$NEO4J_HOME/bin

3.配置Neo4j文件

neo4j的配置文件在conf目录下的neo4j.conf,将Neo4j的默认localhost修改为自己的服务器IP地址,也就是修改这一行,将localhost改成云服务器的ip地址
在这里插入图片描述
然后将以下三行的注释去掉,这里的端口号如果没有冲突的话可以不用改
在这里插入图片描述

4.配置云服务器安全组

在阿里云服务器上设置7474端口和7687端口的安全组,其实7473端口用的不多可以不设置,在服务器的管理界面左侧,选择“本实例安全组”,点击“配置规则”,然后选择“添加安全组规则”,若是添加7474端口,则端口范围后面填写7474/7474,授权对象如果填写“0.0.0.0/0”,则所有IP都可以访问服务器的7474端口
在这里插入图片描述

5.验证

在浏览器端输入http://IP地址:7474/ 看是否能打开,第一次打开会慢一点,账号和密码默认都是neo4j,成功登录之后需要修改密码
在这里插入图片描述

三、数据处理和导入云数据库

0.连接云数据库

此时数据库是空的,我们可以来导入数据啦
python构造图、节点、关系需要使用py2neo包,然后连接云上的图数据库

from py2neo import Node, Graph, Relationship 
graph = Graph("http://47.98.xxx.xxx:7474", username="neo4j", password="neo4")

1.读取数据

首先读取数据转化为dataframe格式,顺便给所有的null填上‘空’’,要不然之后数据处理比较麻烦

import pandas as pd 

excelFile1 = r'C:\Users\lenovo\Desktop\utf8_excel\节点\景点.xlsx'
df_site = pd.DataFrame(pd.read_excel(excelFile1)).fillna('无')

excelFile2 = r'C:\Users\lenovo\Desktop\utf8_excel\节点\交通.xlsx'
df_traffic = pd.DataFrame(pd.read_excel(excelFile2)).fillna('无')

excelFile3 = r'C:\Users\lenovo\Desktop\utf8_excel\节点\酒店.xlsx'
df_hotel = pd.DataFrame(pd.read_excel(excelFile3)).fillna('无')

excelFile4 = r'C:\Users\lenovo\Desktop\utf8_excel\节点\美食.xlsx'
df_food = pd.DataFrame(pd.read_excel(excelFile4)).fillna('无')

excelFile5 = r'C:\Users\lenovo\Desktop\ut
  • 2
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值