Networkx图中的哪些元素可能成为新4j图的标签? [英] Which elements from networkx graph might become labels at neo4j graph?

查看:21
本文介绍了Networkx图中的哪些元素可能成为新4j图的标签?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在networkx中有一个MultiDiGraph,我正在考虑将其导出到new 4j。我已经有了一个名为ntype的节点属性和一个名为dtype的边属性,它符合新4j图的节点和边的标签概念。

来自networkx的哪些元素可能成为新4j的标签?如何管理它?

我添加了一个python图形的示例,以及在导出到ne4j时希望获得的图形。

以下是python的代码

import networkx as nx

G=nx.MultiDiGraph()

G.add_nodes_from([
    (1,{'ntype':'NUMBER', 'color':'blue'}),
    (2,{'ntype':'NUMBER', 'color':'yellow'}),
    ('A',{'ntype':'LETTER', 'state':'done'}),
    ('B',{'ntype':'LETTER', 'state':'pending'})
    ])
G.add_edges_from([
    (1,'A','dir',{'etype':'IMPACTS', 'when':'old'}),
    (1,'A','n_dir',{'etype':'IMPACTS', 'when':'new'}),
    (1,'B','n_dir',{'etype':'ALTS', 'when':'future'}),
    (2,'B','dir',{'etype':'IMPACTS', 'when':'new'}),
    (2,'B','n_dir',{'etype':'IMPACTS', 'when':'old'}),
    (2,'A','n_dir',{'etype':'ALTS', 'when':'new'}),
    ])

这里是我从networkx导入时想要的图形的ne4j处的代码

CREATE (one:NUMBER {name:1, color:'blue'})
CREATE (two:NUMBER {name:2, color:'yellow'})
CREATE (A:LETTER {name:'A', state:'done'})
CREATE (B:LETTER {name:'B', state:'pending'})
CREATE (one)-[:IMPACTS {k:'dir', when:'old'}]->(A)
CREATE (one)-[:IMPACTS {k:'n_dir', when:'new'}]->(A)
CREATE (one)-[:IMPACTS {k:'n_dir', when:'future'}]->(B)
CREATE (two)-[:ALTS {k:'dir', when:'new'}]->(B)
CREATE (two)-[:IMPACTS {k:'n_dir', when:'old'}]->(B)
CREATE (two)-[:ALTS {k:'n_dir', when:'new'}]->(A)

我已经尝试了在networkx中导出到graph ml,并在ne4j中导入,如下所述enter link description here。我还添加了参数readLabelsstore NodeIds。从浏览器:

CALL apoc.import.graphml("test.graphml", {readLabels: true, storeNodeIds:true})

现在我得到了边的标签,但没有得到节点的标签。这是我得到的:

推荐答案

我做了一些研究,最后得到了一个能够将网络x图导出到管理标签的新4j图的过程。 必须考虑一些细节:

1.-创建节点时:在ne4j处成为标签的属性必须命名为Labels(请注意,它是复数形式,不要问为什么,它是有效的)。它的值必须是以‘:’开头的字符串

G.add_nodes_from([(1,{'labels':':NUMBER', 'color':'blue'}), ('A',{'labels':':LETTER', 'state':'done'})])

2.-创建边时:要在新4j成为标签的属性必须命名为标签(现在它是单数!!)。它的值必须是以‘:’开头的字符串

G.add_edges_from([(1,'A','dir',{'label':'IMPACTS', 'when':'old'})])

3.-对于MultiDiGraph不会导入k值。我的解决办法是将复制k作为调用的边缘属性,例如id

for u,v,k in G.edges(keys=True):
G[u][v][k]['id']=k

4.-使用NAMED_KEY_IDS=True将网络X图导出为Graphml

nx.write_graphml(G, 'test.graphml', named_key_ids=True)

5.-使用参数导入到ne4j读取Labels:truestore NodeIds:true。在ne4j浏览器上,您可能会看到:

CALL apoc.import.graphml("test.graphml", {readLabels: true, storeNodeIds:true})

我在这里包含了一个在networkx中创建的图表,该图表可以导入到ne4j中,如下所述:

import networkx as nx

G=nx.MultiDiGraph()

#creation of nodes with property called 'labels'
G.add_nodes_from([
    (1,{'labels':':NUMBER', 'color':'blue'}),
    (2,{'labels':':NUMBER', 'color':'yellow'}),
    ('A',{'labels':':LETTER', 'state':'done'}),
    ('B',{'labels':':LETTER', 'state':'pending'})
    ])
#creation of edges with property called 'label'
G.add_edges_from([
    (1,'A','dir',{'label':'IMPACTS', 'when':'old'}),
    (1,'A','n_dir',{'label':'IMPACTS', 'when':'new'}),
    (1,'B','n_dir',{'label':'ALTS', 'when':'future'}),
    (2,'B','dir',{'label':'IMPACTS', 'when':'new'}),
    (2,'B','n_dir',{'label':'IMPACTS', 'when':'old'}),
    (2,'A','n_dir',{'label':'ALTS', 'when':'new'}),
    ])
#k is duplicated at every node as a property
for u,v,k in G.edges(keys=True):
    G[u][v][k]['id']=k

nx.write_graphml(G, 'test.graphml', named_key_ids=True)

有什么待处理的?要弄清楚如何将多个标签放到一个节点或边。欢迎任何帮助

这篇关于Networkx图中的哪些元素可能成为新4j图的标签?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆