可以将边缘列表导入igraph python

toy*_*toy 3 python igraph

我要导入到iGraph的文本文件中有一个Twitter关注者列表。

这是我的清单样本

393795446 18215973
393795446 582203919
393795446 190709835
393795446 1093090866
393795446 157780872
393795446 1580109739
393795446 3301748909
393795446 1536791610
393795446 106170345
393795446 9409752
Run Code Online (Sandbox Code Playgroud)

这就是我导入的方式

from igraph import *
twitter_igraph = Graph.Read_Edgelist('twitter_edgelist.txt', directed=True)
Run Code Online (Sandbox Code Playgroud)

但是我得到这个错误。

---------------------------------------------------------------------------
InternalError                             Traceback (most recent call last)
<ipython-input-10-d808f2237fa8> in <module>()
----> 1 twitter_igraph = Graph.Read_Edgelist('twitter_edgelist.txt', directed=True)

InternalError: Error at type_indexededgelist.c:369: cannot add negative number of vertices, Invalid value
Run Code Online (Sandbox Code Playgroud)

我不确定为什么要说负数。我检查了文件,它没有任何负数或ID。

Aus*_*n A 5

您需要使用graph.Read_Ncol这种类型的文件格式。为什么您的文件不符合典型的“边缘列表”格式,这超出了我的范围。我本人对此很纳闷。我还应该提到,我从这里得到了答案。塔马斯(Tamàs)似乎是这里附近的主要文字画家。我敢肯定,对于您为什么需要使用Ncol而不是,他可以给出更详细的理由Edgelist

这对我有用。

from igraph import *
twitter_igraph = Graph.Read_Ncol('twitter_edgelist.txt', directed=True)
Run Code Online (Sandbox Code Playgroud)

个人插头

这是可以改进igraph文档的一个很好的例子。

例如:唯一带有graph.Read_Edgelist()doc的文字说...

从文件中读取边缘列表,并基于该列表创建图形。请注意,顶点索引从零开始。

当显然在文件格式方面存在细微差别时,这并没有告诉我任何信息。如果说此功能期望文件采用哪种格式,则可以节省很多人的精力。

  • 至于`Read_Edgelist`和`Read_Ncol`之间的区别:这是底层C库的区别。“边缘列表”是整数对的列表,其中每个整数对应于某个顶点的ID。在igraph中,顶点ID必须在[0,| V | -1]范围内连续。因此,读取文件(如海报的文件)将创建许多孤立的顶点,因为文件中的顶点ID不连续。这就是为什么我们有`Read_Ncol`的原因-它会将文件中的原始ID保存在名为`name`的顶点属性中,并使顶点ID连续。 (6认同)
  • igraph在此处给出的错误消息具有误导性;问题可能是文件中的数字之一大于igraph用于表示顶点ID的整数类型的最大值。这会导致溢出,因此,igraph“看到”一个负数作为顶点ID,并解救出来。 (4认同)
  • 另外,感谢您对python-igraph文档的评论;我知道这一点,但是不幸的是,自从离开学术界以来,我没有那么多时间致力于igraph的发展。回顾过去,C核心和Python接口是如此紧密地联系在一起,以至于我可以简单地假设人们可以查找有关C核心的更详细的文档,但是情况不再如此。欢迎请求请求-我将很高兴合并任何改进文档的请求。 (4认同)