首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在NetworkX中按边和节点属性查询图的最佳实践

在NetworkX中按边和节点属性查询图的最佳实践
EN

Stack Overflow用户
提问于 2013-03-27 02:26:53
回答 3查看 20.7K关注 0票数 24

使用NetworkX和新手库,用于社交网络分析查询。所谓查询,我是指通过边创建路径的两边节点的属性来选择/创建子图,并且节点包含属性。图形正在使用以下形式的MultiDiGraph

代码语言:javascript
复制
G2 = nx.MultiDiGraph()
G2.add_node( "UserA", { "type" :"Cat" } )
G2.add_node( "UserB", { "type" :"Dog" } )
G2.add_node( "UserC", { "type" :"Mouse" } )
G2.add_node( "Likes", { "type" :"Feeling" } )
G2.add_node( "Hates", { "type" :"Feeling" } )

G2.add_edge( "UserA", 'Hates' ,  statementid="1" )
G2.add_edge( "Hates", 'UserB' ,  statementid="1"  )
G2.add_edge( "UserC", 'Hates' ,  statementid="2" )
G2.add_edge( "Hates", 'UserA' ,  statementid="2"  )
G2.add_edge( "UserB", 'Hates' ,  statementid="3"  )
G2.add_edge( "Hates", 'UserA' ,  statementid="3"  )
G2.add_edge( "UserC", 'Likes' ,  statementid="3"  )
G2.add_edge( "Likes", 'UserB' ,  statementid="3"  )

查询方式:

代码语言:javascript
复制
for node,data in G2.nodes_iter(data=True):
    if ( data['type'] == "Cat" ):
       # get all edges out from these nodes
            #then recursively follow using a filter for a specific statement_id

#or get all edges with a specific statement id
   # look for  with a node attribute of "cat" 

有没有更好的查询方式?或者创建自定义迭代来创建子图是最佳实践吗?

或者(还有一个单独的问题),Graph可以简化,但我不使用下图,因为"hates“类型的对象将具有predcessors。这会使查询变得更简单吗?似乎更容易遍历节点

代码语言:javascript
复制
G3 = nx.MultiDiGraph()
G3.add_node( "UserA", { "type" :"Cat" } )
G3.add_node( "UserB", { "type" :"Dog" } )

G3.add_edge( "UserA", 'UserB' ,  statementid="1" , label="hates")
G3.add_edge( "UserA", 'UserB' ,  statementid="2" , label="hates")

其他注释:

  • 也许add_path会将标识符添加到创建的路径中?
  • iGraph具有nice query feature path
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15644684

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档