【问题标题】:Importing edges to networkx library in Python在 Python 中将边导入 networkx 库
【发布时间】:2020-06-21 09:56:09
【问题描述】:

我正在研究一个有向图的社交网络分析问题。当我将边导入到我的图形文件时遇到问题,由于某种原因,这使它成为无向的,从而无法测量诸如进/出度等中心性。

导入边缘和节点熊猫数据框

edges = pd.read_csv("./edges.csv", sep = ";")
nodes = pd.read_csv("./nodes_coordinates.csv", sep = ";")

设置有向图

G = nx.DiGraph()
nx.is_directed(G)

输出:真

G = nx.from_pandas_edgelist(edges, "from", "to")
nx.is_directed(G)

输出:假

如果这很重要,这也是我绘制节点的方式,但是如果我只做了这部分,它仍然有效:

data = nodes.set_index("node").to_dict("index").items()
G.add_nodes_from(data)
nx.is_directed(G)

输出:真

绘制图表等一切都很好,但它不再是定向的,我不知道为什么。感谢您的帮助!

edge csv file

node file

【问题讨论】:

  • 欢迎来到 SO!请将部分 csv 文件添加为纯文本而不是图像。在目前的形式中,它们并不是真正有用的。
  • 当您执行G = .... 时,您会将右侧的任何内容分配给名称G。之前定义的 G 并不重要。先前的值被丢弃并替换为新值。例如,如果我有a=5,然后我有a=3,则a 的值现在是3。没关系,之前是5

标签: python networkx sna


【解决方案1】:

查看docs,可以添加create_using关键字:

create_using(NetworkX 图形构造函数,可选(默认=nx.Graph))- 要创建的图形类型。如果是图形实例,则在填充之前清除。

默认情况下确实使用无向nx.Graph

您的解决方案是:

G = nx.from_pandas_edgelist(edges, "from", "to", create_using=nx.DiGraph)

【讨论】:

    【解决方案2】:

    您需要在from_pandas_edgelist 中指定create_using 参数。所以替换

    G = nx.from_pandas_edgelist(edges, "from", "to")
    

    G = nx.from_pandas_edgelist(edges, "from", "to", create_using=nx.DiGraph)
    

    这会给你一个新的DiGraph 实例,这意味着你不需要以下几行

    G = nx.DiGraph()
    nx.is_directed(G)
    

    【讨论】:

      猜你喜欢
      • 2021-06-03
      • 1970-01-01
      • 2013-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-13
      • 1970-01-01
      • 2020-05-26
      相关资源
      最近更新 更多