У меня есть кадр данных, в котором детализируются веса ребер среди N узлов. Есть ли пакет для работы с такими данными?
Например, я хотел бы построить следующую информацию в виде сети:
p1 p2 counts
1 a b 100
2 a c 200
3 a d 100
4 b c 80
5 b d 90
6 b e 100
7 c d 100
8 c e 40
9 d e 60
Ответ 1
Один из вариантов - это network package, часть statnet семейство пакетов R для статистического анализа социальных сетей. Он обрабатывает сетевые данные разреженным образом, что хорошо для больших наборов данных.
Ниже я делаю следующее:
- загрузите edgelist (первые два столбца) в сетевой объект
- присваивать счетчикам атрибут edge, называемый весом.
- постройте сеть с помощью gplot. (См. Страницу справки об изменении толщины краев.)
- постройте социоматрицу (всего 5 × 5 наборов блоков, представляющих матрицу смежности, где ячейка (i, j) затенена относительным числом)
A = read.table(file="so.txt",header=T)
A
p1 p2 counts
1 a b 100
2 a c 200
3 a d 100
4 b c 80
5 b d 90
6 b e 100
7 c d 100
8 c e 40
9 d e 60
library(network)
net = network(A[,1:2])
# Get summary information about your network
net
Network attributes:
vertices = 5
directed = TRUE
hyper = FALSE
loops = FALSE
multiple = FALSE
bipartite = FALSE
total edges= 9
missing edges= 0
non-missing edges= 9
Vertex attribute names:
vertex.names
adjacency matrix:
a b c d e
a 0 1 1 1 0
b 0 0 1 1 1
c 0 0 0 1 1
d 0 0 0 0 1
e 0 0 0 0 0
set.edge.attribute(net,"weight",A[,3])
gplot(net)
## Another cool feature
s = as.sociomatrix(net,attrname="weight")
plot.sociomatrix(s)
Ответ 2
Здесь, как сделать сетевой график данных в igraph:
d <- data.frame(p1=c('a', 'a', 'a', 'b', 'b', 'b', 'c', 'c', 'd'),
p2=c('b', 'c', 'd', 'c', 'd', 'e', 'd', 'e', 'e'),
counts=c(100, 200, 100,80, 90,100, 100,40,60))
library(igraph)
g <- graph.data.frame(d, directed=TRUE)
print(g, e=TRUE, v=TRUE)
tkplot(g, vertex.label=V(g)$name)
Ответ 3
Я также работаю в играфе. Один из способов создания графика - выписать список всех "от" до "узлов" в текстовый файл, который будет прочитан в виде объекта графика. Объект графа может быть подвергнут множеству графических теоретических процессов и может обрабатывать довольно большие сети.
Ответ 4
По моему опыту, igraph - мой любимый пакет для большой теоретико-графической работы. Это эффективная память и имеет очень хорошие алгоритмы. igraph использует внутреннюю структуру, похожую на edgelist.
Для более простых/мелких вещей я обычно использую пакет sna ( "анализ социальной сети" ). Это отлично подходит для интерактивной работы и построения небольших сетей. sna использует больше структуры данных матрицы смежности.