首页 > 解决方案 > 如何在 Neo4j 中创建两个不同列之间的关系

问题描述

我正在尝试在Neo4j的两列之间建立关系。我的数据集是一个CSV 文件,有两列是指共同作者,我想构建它的网络。我已经加载数据,返回并匹配它们。

正在加载

load csv from 'file:///conet1.csv' as rec

返回数据

create (:Guys {source: rec[0], target: rec[1]})

现在我需要通过在源列和目标列之间建立关系来构建数据协作网络。您对此有何建议?

我能够在 python 中 NetworkX 图形库中提到的列之间建立关系,如下所示:

import pandas as pd
import networkx as nx
g = nx.Graph()
df = pd.read_excel('Colab.csv', columns= ['source', 'target'])
g = nx.from_pandas_edgelist(df,'source','target', 'weight')

标签: databasegraphneo4jnosql

解决方案


如果我了解您的用例,我认为您不应该Guys仅仅为了存储关系信息而创建节点。相反,面向图的方法是Author为每个作者创建一个节点,并COLLABORATED_WITH在共同作者之间创建一个关系(比如 type )。

这可能对你有用,或者至少给你一个线索:

LOAD CSV FROM 'file:///conet1.csv' AS rec
MERGE (source:Author {id: rec[0]})
MERGE (target:Author {id: rec[1]})
CREATE (source)-[:COLLABORATED_WITH]->(target)

如果可以重新创建相同的关系,则应将 替换CREATE为更昂贵的MERGE. 此外,一部作品可以有任意数量的共同作者,因此根据您要做什么,每一对之间的关​​系可能不是最佳的;但这是一个单独的问题。


推荐阅读