安裝py2neo
安裝python
中的neo4j
操作庫:pip install py2neo
安裝py2neo
后我們可以使用其中的函數(shù)對(duì)neo4j
進(jìn)行操作。
圖數(shù)據(jù)庫Neo4j
中最重要的就是結(jié)點(diǎn)和邊(關(guān)系),結(jié)點(diǎn)之間靠邊聯(lián)系在一起,每個(gè)結(jié)點(diǎn)也有屬于自己的屬性。
也就是說我們?cè)谟?code>pyhton操作Neo4j
的時(shí)候只需要?jiǎng)?chuàng)造出節(jié)點(diǎn)(Node
)和節(jié)點(diǎn)之間的關(guān)系:邊(Relationship
),如果節(jié)點(diǎn)存在附加屬性,可以再給結(jié)點(diǎn)附上一些屬性。
注意: 在我們用python
的時(shí)候我們必須啟動(dòng)Neo4j
。如圖所示,點(diǎn)擊connect
進(jìn)行連接。
創(chuàng)建節(jié)點(diǎn)-連線關(guān)系圖
下面我們就創(chuàng)建三個(gè)結(jié)點(diǎn),每個(gè)結(jié)點(diǎn)有兩個(gè)屬性,兩結(jié)點(diǎn)之間有一個(gè)關(guān)系。
from py2neo import Graph, Node, Relationship
# 連接neo4j數(shù)據(jù)庫,輸入地址、用戶名、密碼
graph = Graph("http://localhost:7474", name="neo4j", password='xxx')
graph.delete_all() #清除neo4j中原有的結(jié)點(diǎn)等所有信息
# 創(chuàng)建結(jié)點(diǎn)
node1 = Node('person', name = 'chenjianbo') #該結(jié)點(diǎn)語義類型是person 結(jié)點(diǎn)名字是chenjianbo 也是它的屬性
node2 = Node('major',name = 'software') #該結(jié)點(diǎn)語義類型是major 結(jié)點(diǎn)名字是software 也是它的屬性
node3 = Node('person',name = 'bobo') #該結(jié)點(diǎn)語義類型是person 結(jié)點(diǎn)名字是bobo 也是它的屬性
#給結(jié)點(diǎn)node1 添加一個(gè)屬性 age
node1['age'] = 18
#給結(jié)點(diǎn)node2 添加一個(gè)屬性 college
node2['college'] = 'software college'
#給結(jié)點(diǎn)node3 添加一個(gè)屬性 sex
node3['sex'] = '男'
#把結(jié)點(diǎn)實(shí)例化 在Neo4j中顯示出來
graph.create(node1)
graph.create(node2)
graph.create(node3)
# 創(chuàng)建關(guān)系
maojor = Relationship(node1, '專業(yè)', node2)
friends = Relationship(node1, '朋友', node3)
maojor1 = Relationship(node3, '專業(yè)', node2)
#把關(guān)系實(shí)例化 在Neo4j中顯示出來
graph.create(maojor)
graph.create(maojor1)
graph.create(friends)
導(dǎo)入csv文件
該網(wǎng)站有大量匯總的知識(shí)圖譜數(shù)據(jù)集,可供學(xué)習(xí)使用。
http://openkg.cn/dataset
周杰倫歌曲知識(shí)數(shù)據(jù)集csv
,應(yīng)用三元組的形式將歌曲、歌手和所屬專輯聯(lián)系在一起。
-
dataframe
格式讀入數(shù)據(jù)
import pandas as pd
df = pd.read_csv('relation.csv',index_col=0)
df
Column1 Column2 Column3
id
1 Dare for more 周杰倫 歌手
2 Dare for more 蔡依林 歌手
6 Mine Mine 驚嘆號(hào) 所屬專輯
7 Now You See Me 周杰倫 歌手
8 Now You See Me 方文山 作詞
... ... ... ...
624 最后的戰(zhàn)役 周杰倫 歌手
625 最后的戰(zhàn)役 方文山 作詞
626 最后的戰(zhàn)役 八度空間 所屬專輯
627 最長的電影 周杰倫 歌手
628 最長的電影 我很忙 所屬專輯
- 使用
py2neo
向neo4j
添加節(jié)點(diǎn)和邊
graph.delete_all() #清除neo4j中原有的結(jié)點(diǎn)等所有信息
for index,row in df.iterrows():
node1 = Node('person',name=row[0])
node2 = Node('person',name=row[1])
graph.create(node1)
graph.create(node2)
each = Relationship(node1, row[2], node2)
graph.create(each)
這樣生成的知識(shí)圖譜只是簡(jiǎn)單的節(jié)點(diǎn)-邊的關(guān)系,存在大量冗余的實(shí)體entity
。
可以通過neo4j
的刪除方法將重復(fù)節(jié)點(diǎn)進(jìn)行刪除,之后將邊重新連接。
刪除重復(fù)節(jié)點(diǎn)并連接邊
查詢重復(fù)節(jié)點(diǎn),如果有重復(fù)節(jié)點(diǎn)就不create
。這樣節(jié)點(diǎn)和邊全部聯(lián)系在一起,形成完整的沒有冗余的知識(shí)圖譜。
目前的缺點(diǎn)是節(jié)點(diǎn)Node
的命名都是以person
命名,所以節(jié)點(diǎn)暫時(shí)沒有區(qū)分。文章來源:http://www.zghlxwxcb.cn/news/detail-830766.html
graph.delete_all() #清除neo4j中原有的結(jié)點(diǎn)等所有信息
from py2neo import NodeMatcher
entity = []
for index,row in df.iterrows():
if row[0] not in entity:
entity.append(row[0])
node1 = Node('person',name=row[0])
graph.create(node1)
else:
node_matcher = NodeMatcher(graph)
node1 = list(node_matcher.match('person').where(name=row[0]))[0]
print(node1)
if row[1] not in entity:
entity.append(row[1])
node2 = Node('person',name=row[1])
graph.create(node2)
else:
node_matcher = NodeMatcher(graph)
node2 = list(node_matcher.match('person').where(name=row[1]))[0]
print(node2)
each = Relationship(node1, row[2], node2)
graph.create(each)
文章來源地址http://www.zghlxwxcb.cn/news/detail-830766.html
到了這里,關(guān)于知識(shí)圖譜:py2neo將csv文件導(dǎo)入neo4j的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!