database - 如何在 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')
解决方案
如果我了解您的用例,我认为您不应该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
. 此外,一部作品可以有任意数量的共同作者,因此根据您要做什么,每一对之间的关系可能不是最佳的;但这是一个单独的问题。
推荐阅读
- java - Java POI FormulaEvaluator 给出了意外的浮点值
- c# - 您可以逗号分隔“Access-Control-Allow-Origin”标头吗?
- python - 寻找一种编写具有多种可能性的 if 结构的好方法
- linux - 使用 grep fl*o 做什么?
- javascript - DateTimePicker css 不正确
- matlab - 使用自适应阈值函数在 MATLAB 中进行图像分割
- objective-c - 如何在 CIImageProcessorKernel 子类中为 Metal Compute 指定设备?
- python-3.x - BS4:使用 Python 在 Google SERP 中查找父类
- python - 如何在不使用 SQLAlchemy 引擎的情况下将数据框写入 Postgres 表?
- ubuntu - Ubuntu 19.10 上的 OpenModelica