【问题标题】:Python - CSV to networkx formatPython - CSV 到 networkx 格式
【发布时间】:2018-03-02 08:13:02
【问题描述】:

我想从存储在 CSV 中的数据创建一个带有 networkx 包的网络。 CSV 文件中的数据由两列组成,如下例所示。同一边组内的所有节点相互连接(即在 E1 组中(3 个元素);有:ABC -> BCD,BCD -> DEF,ABC -> DEF)。

在 Python 中转换此类数据以获得 networkx 包的输入的最佳方法/实践是什么?

边节点 E1 ABC E1 BCD E1 防御 E2 ABC E2 BCD E3 ABC E3 BCD E3 CDE E3 防御

【问题讨论】:

    标签: python networkx


    【解决方案1】:

    作为图形规范,您的格式似乎相当尴尬。边本质上是二元的,即它们连接两个节点,但您的定义有可能使边与单个节点相关。
    您的示例还包括同一对节点之间的多个边(例如,通过 E1 和 E2 的 ABC -> BCD)。这意味着 MultiGraph。

    如果这确实是您的格式应该定义的内容,这里有一种方法可以将其放入 networkx 图中。很可能有更简洁的方式来读取数据。

    import networkx as nx
    import itertools
    
    # read file into a dictionary, in 3 stages.
    with open("graph.txt") as f:
        lines = f.readlines()
    
    edges = []
    for line in lines:
        if line.startswith('Edges'):
            continue
        parts = line.strip().split()
        edges.append(parts)
    
    D = {}
    for e, n in edges:
        if e not in D:
            D[e] = []
        D[e].append(n)
    
    G = nx.MultiGraph()
    
    # for each edge group, add edges between all pairs of nodes
    for e, nodes in D.items():
        print e, nodes
        for (u,v) in itertools.combinations(nodes, 2):
            G.add_edge(u, v, label=e)
    

    【讨论】:

      猜你喜欢
      • 2014-12-03
      • 1970-01-01
      • 1970-01-01
      • 2020-10-13
      • 1970-01-01
      • 2021-04-16
      • 1970-01-01
      • 2013-07-04
      • 1970-01-01
      相关资源
      最近更新 更多