igraph не показывает нужную сеть, которую я импортировал
Я хотел бы провести анализ sna. Я работаю с RStudio и пакетом igraph. Мои входные данные взяты из текстового файла (созданного из Excel в виде текстового файла с разделителями табуляции). Файл данных имеет 3 столбца. 1-й и 2-й ряд - данные сети (вершины), а 3-й ряд - вес каждого ребра. Я использую данные о соединениях в аэропортах, которые выглядят так:
1 54 28382 (Идентификационный номер аэропорта Аэропорт / Идентификационный номер аэропорта Аэропорт / номер пассажира в качестве веса)
Я загрузил идентификатор с этими командами:
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
Теперь о возникшей проблеме: моя сеть объединяет 6 различных кластеров, когда я проверяю ее с помощью igraph. Даже когда я создаю графическую картину своей сети, она состоит из 6 отдельных частей. Это не имеет никакого смысла, так как мои данные должны быть подключены к одной сети. Я проверил свой набор данных, и там действительно нет различных подсетей.
Вот характеристики кластера, которые я получаю:
$csize
[1] 5 608 2 4 5 2
$no
[1] 6
Одна вершина в небольшом кластере - это даже огромный аэропорт, который должен быть связан со многими другими, а не только с одним другим...
ОБНОВЛЕНИЕ: я теперь обновил до последней версии igraph, но это все еще не работает. Я загрузил примерную часть своих данных в виде файла.txt здесь: USAN_numS.txt
Было бы замечательно, если бы кто-то имел представление о том, что я сделал не так. Спасибо
1 ответ
Итак, как я сказал выше в своем комментарии, возможный источник путаницы состоит в том, что ваш граф имеет символические имена вершин, которые на самом деле являются числами и не соответствуют идентификаторам вершин igraph. Обходной путь - отбросить имена вершин или указать их явно при создании графа, чтобы они соответствовали идентификаторам вершин igraph.
Но ваш график действительно имеет несколько компонентов, см. Следующий код, где я проверяю его в исходной таблице, что две вершины появляются в таблице только один раз, и они сами образуют компонент из двух.
Возможно, сеть действительно состоит из нескольких компонентов, или в файле есть ошибки.
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