只做襯衣網(wǎng)站百度seo排名優(yōu)化技巧分享
文章目錄
- 安裝py2neo
- 創(chuàng)建節(jié)點(diǎn)-連線關(guān)系圖
- 導(dǎo)入csv文件
- 刪除重復(fù)節(jié)點(diǎn)并連接邊
安裝py2neo
安裝python
中的neo4j
操作庫(kù):pip install py2neo
安裝py2neo
后我們可以使用其中的函數(shù)對(duì)neo4j
進(jìn)行操作。
圖數(shù)據(jù)庫(kù)Neo4j
中最重要的就是結(jié)點(diǎn)和邊(關(guān)系),結(jié)點(diǎn)之間靠邊聯(lián)系在一起,每個(gè)結(jié)點(diǎn)也有屬于自己的屬性。
也就是說(shuō)我們?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ù)庫(kù),輸入地址、用戶名、密碼
graph = Graph("http://localhost:7474", name="neo4j", password='123456SWXR')
graph.delete_all() #清除neo4j中原有的結(jié)點(diǎn)等所有信息# 創(chuàng)建結(jié)點(diǎn)
node1 = Node('person', name = 'chenjianbo') #該結(jié)點(diǎn)語(yǔ)義類型是person 結(jié)點(diǎn)名字是chenjianbo 也是它的屬性
node2 = Node('major',name = 'software') #該結(jié)點(diǎn)語(yǔ)義類型是major 結(jié)點(diǎn)名字是software 也是它的屬性
node3 = Node('person',name = 'bobo') #該結(jié)點(diǎn)語(yǔ)義類型是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中顯示出來(lái)
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中顯示出來(lái)
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 pddf = 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 最長(zhǎng)的電影 周杰倫 歌手
628 最長(zhǎng)的電影 我很忙 所屬專輯
- 使用
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
。
可以通過(guò)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)系在一起,形成完整的沒(méi)有冗余的知識(shí)圖譜。
目前的缺點(diǎn)是節(jié)點(diǎn)Node
的命名都是以person
命名,所以節(jié)點(diǎn)暫時(shí)沒(méi)有區(qū)分。
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)