【问题标题】:Generating graph-tool graph from Pandas DataFrame or CSV从 Pandas DataFrame 或 CSV 生成图形工具图
【发布时间】:2017-07-28 11:55:21
【问题描述】:

我已经开始使用graph-tool,希望它是一个 python 库,可以让我分析大图(~8M 顶点,~22M 边,在 Pandas DataFrame / CSV 中)。 'source' 和 'target' 列是特定数字服务的用户 ID。

我从一个玩具示例开始,遵循in this post 的方法。

import pandas as pd

df = pd.DataFrame({'source':range(11,15), 'target':range(12,16)})

g = Graph(directed=True)

g.add_edge_list(df.values)

您可以在我的虚拟示例中看到,只有 5 个不同的顶点 (11, 12, 13, 14, 15)。但是,当我生成图形时,创建了 16 个顶点,似乎填补了 0 和最大节点值之间的空白。

g.get_vertices()

returns:

    array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15], dtype=uint64)

我假设图形工具将 df 的值“读取”为索引,而不是实际顶点的名称。这来自docs

图中的每个顶点都有一个唯一的索引,它总是介于 :math:0 和 :math:N-1,其中 :math:N 是顶点数。

如何创建没有这些冗余顶点的图形(如果我导入我的数据,可能会达到数百万),我如何才能使用不被视为索引的用户 ID? 对于从 df 案例的大量导入,我一直在翻找可用的方法/文档,但无法弄清楚。

我还尝试了什么:

df.to_csv('test.csv', index=False)#, header=False)    
g2 = graph_tool.load_graph_from_csv('test.csv', skip_first=True)

这似乎确实创建了一个只有 5 个顶点的图,但“丢失”了它们的名称(用户 ID)。

g2.get_vertices()

返回

array([0, 1, 2, 3, 4], dtype=uint64)

而不是[11, 12, 13, 14, 15]

感谢您的帮助!提前致谢。

我在Jupyter/Anaconda 上使用python 2.7

【问题讨论】:

    标签: python pandas graph graph-tool


    【解决方案1】:

    add_edge_list() 方法的hashed 参数启用您想要的功能:

    vmap = g.add_edge_list(df.values, hashed=True)
    

    其中vmap 是一个带有顶点“名称”的属性映射。

    来自文档字符串:

    可选,如果hashed == True,边列表中的顶点值 不假定直接对应于顶点索引。在这种情况下 它们将根据顺序映射到顶点索引 遇到它们,以及带有顶点值的顶点属性映射 被退回。如果string_vals == True,算法假设 顶点值是字符串。否则,它们将被假定为数字 如果edge_list 是:class:~numpy.ndarray,或者任意python 如果不是,则对象。

    请注意,为了保证高效的数据结构,在图形工具中,顶点总是是连续的整数,因此它们的编号总是从 0 到 N-1。如果你想给他们不同的“名字”,你必须使用属性映射,如文档中所述。

    【讨论】:

    • 在那之后你会怎么做?我试过v_name = g.add_edge_list(edges.values, string_vals=True, hashed=True, eprops=e_weight) 但我得到了Unpickling Error。边缘是DataFrame e_weight 作为边属性启动,v_name 是节点名称,作为字符串作为顶点属性正确启动。谢谢,
    • 是的,它看起来不像一个完整的答案。以 '.. 结尾,如文档中所述,这不是很好,IMO。
    猜你喜欢
    • 2018-04-26
    • 1970-01-01
    • 2015-06-12
    • 2019-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-08
    相关资源
    最近更新 更多