【问题标题】:igraph does not show the right network I importedigraph 没有显示我导入的正确网络
【发布时间】:2013-03-17 14:02:24
【问题描述】:

我想进行一些 sna 分析。我使用 RStudio 和 igraph 包。 我的输入数据来自文本文件(从 excel 创建为制表符分隔的文本文件)。 数据文件有 3 列。第一行和第二行是网络数据(顶点),第三行是每条边的权重。我使用如下所示的机场连接数据:

1 54 28382(机场 ID 始发机场/机场 ID 目的地机场/乘客编号作为重量)

我用这些命令加载了 id:

 USAN_num1 <- read.table('USAN_num.txt', header=T)
 USAN_g_num1 <- graph.data.frame(USAN_num1)
> summary(USAN_g_num1)
Vertices: 626 
Edges: 7078 
Directed: TRUE 
No graph attributes.
Vertex attributes: name.
Edge attributes: PAX.

数据如下所示:

  ORIGN DESTN  PAX
1     1   604  646
2     2    42 3736
3     2   118 5189

现在到发生的问题: 当我使用 igraph 检查时,我的网络包含 6 个不同的集群。即使我创建了我的网络的图形图片,它也有 6 个独立的部分。这完全没有意义,因为我的数据应该连接到一个网络。我检查了我的数据集,确实没有不同的子网络。

这是我得到的集群特征:

$csize
[1]   5 608   2   4   5   2

$no
[1] 6

一个小集群中的一个顶点甚至是一个巨大的机场,应该连接到许多其他的,而不仅仅是一个其他的......

更新: 我现在更新到最新的 igraph 版本,但它仍然无法正常工作。 我在此处以 .txt 文件的形式上传了我的数据的示例部分:USAN_numS.txt

如果有人知道我做错了什么,那就太好了。 谢谢

【问题讨论】:

  • 如果您不提供可重现的示例,很难说您做错了什么。顺便提一句。您使用的是相当旧的 igraph 版本。
  • @GaborCsardi 谢谢。我用指向数据文件的链接更新了我的帖子,我还将 igraph 版本更新到了最新版本。如果你能帮助我,那就太好了。
  • igraph 是正确的,我认为混淆是 graph.data.frame 为您的顶点分配符号名称,它们与您的内部顶点 ID 不同。像这样创建您的图表:USAN_g_num1 &lt;- graph.data.frame(USAN_num1, vertices=data.frame(id=1:max(USAN_num1[,1:2]))),然后您的符号名称与数字 ID 匹配。我会添加一个更详细的答案,但现在没有时间。
  • @GaborCsardi 谢谢。不幸的是,它没有用。不,我有 7 个不同的集群。但是慢慢来,这不是很紧急。感谢您的帮助。
  • 那你做错了。集群的数量是相同的。只有顶点的名称不同。稍后再说。

标签: r igraph sna


【解决方案1】:

因此,正如我在上面的评论中所说,一个可能的混淆来源是您的图形具有符号顶点名称,这些名称实际上是数字并且与 igraph 的顶点 ID 不匹配。解决方法是删除顶点名称,或者在创建图形时明确指定它们,以便它们与 igraph 顶点 ID 匹配。

但你的图确实有多个组件,看下面的代码,我在原始表中检查它,两个顶点在表中只出现一次,它们本身就形成了两个的组件。

可能网络确实有多个组件,或者文件有错误。

library(igraph)
USAN_num1 <- read.table('USAN_numS.txt', header=T)
USAN_g_num1 <- graph.data.frame(USAN_num1,
                   vertices=data.frame(id=1:max(USAN_num1[,1:2])))    
clu <- clusters(USAN_g_num1)
clu$csize
## [1]   5 607   2   4   5   1   2   1
## The '1's appear because we counted the vertices that are 
## not in the table

## Third component has two vertices only, let's check them in the
## original table
which(clu$membership == 3)
## [1]  64 617

## List the table rows where any of these two appear
USAN_num1[ USAN_num1[,1] %in% c(64, 617) | USAN_num1[,1] %in% c(64, 617), ]
##     ORIGN DESTN PAX
## 691    64   617 636

【讨论】:

  • 谢谢!现在我明白为什么我有这些不同的集群了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-08-18
  • 1970-01-01
  • 2017-05-14
  • 2013-05-30
  • 1970-01-01
  • 2010-12-09
  • 2021-06-16
相关资源
最近更新 更多