首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将graphviz.dot.Digraph转换为networkx.Graph

将graphviz.dot.Digraph转换为networkx.Graph
EN

Stack Overflow用户
提问于 2017-12-06 18:59:43
回答 1查看 2.6K关注 0票数 2

问题

如何将graphviz.dot.Digraph转换为networkx.Graph (或它的任何子类)?

动机

LightGBM是一个基于树的算法的实现,它有一个函数返回一个graphviz.dot.Digraph对象.这种类型的对象可以表示任何有向图,但我的图具体是一棵树,因此可以通过更简单的嵌套结构用JSON表示:

代码语言:javascript
运行
复制
var tree = {
    "name": "parent",
    "children": [
         {
         "name": "child_1"
         }
         {
         "name": "child_2"
         }
    [
}

上述JSON结构的另一个较长的示例是这里。我使用这种JSON格式来使用d3javascript中创建树可视化。

总之,我需要将这个graphviz.dot.Digraph对象转换成上面嵌套的-JSON格式。

如果我能够将这个graphviz.dot.Digraph对象转换成一个networkx.Graph对象,我可以使用这种方法将它转换成所需的JSON格式。这种中间转换对我来说是有问题的。看来我需要另一种转换为networkx 能用

EN

回答 1

Stack Overflow用户

发布于 2017-12-06 19:32:11

graphviz.dot.Digraph转换为networkx.Graph的一种方法是将其转换为pydotplus.graphviz.Dot对象,并将其转换为继承自graphnetworkx.classes.multidigraph.MultiDiGraph对象。

代码语言:javascript
运行
复制
#--------------------
# Do whatever it is you do to create the graphviz.Digraph object
import lightgbm as lgbm

# .......
digraph = lgbm.create_tree_digraph(model)
print(type(digraph)) # prints <class 'graphviz.dot.Digraph'>


#--------------------
# Perform the conversion to networkx
import pydotplus
import networkx

dotplus = pydotplus.graph_from_dot_data(digraph.source)
print(type(dotplus)) # prints <class 'pydotplus.graphviz.Dot'>
# if graph doesn't have multiedges, use dotplus.set_strict(true)
nx_graph = networkx.nx_pydot.from_pydot(dotplus)
print(type(nx_graph)) # prints <class 'networkx.classes.multidigraph.MultiDiGraph'>

其余部分只供考虑转换为JSON的人使用

代码语言:javascript
运行
复制
#--------------------
# Optionally, convert to json
import json

# must specify whatever node is the root of the tree, here its 'split0'
#     or you can try list(graph)[0] if you're not sure.
data = networkx.readwrite.json_graph.tree_data(nx_graph,root='split0')
# data is just a dictionary. Dump results in proper json format.
json.dump(data,open(file_path,'w'))

后来,我发现LightGBM实际上有一个dump_model方法,它可以快速选择所有的this...but,我将把这个放在这里。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47681617

复制
相关文章

相似问题

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