R: igraph, обнаружение сообщества, метод edge.betweenness, подсчет/список членов каждого сообщества?

У меня есть относительно большой график с Вершинами: 524 Ребра: 1125 транзакций в реальном мире. Ребра направлены и имеют вес (включение необязательно).Я пытаюсь исследовать различные сообщества в графе, и мне по существу нужен метод, который:

-Рассчитывает все возможные сообщества

-Рассчитывает оптимальное количество сообществ

-Возвращает количество участников/количество участников каждого ( оптимальное) сообщество

До сих пор мне удалось собрать воедино следующий код, который строит график с цветовой кодировкой, соответствующий различным сообществам, однако я понятия не имею, как управлять количеством сообществ (т.е. отображать 5 лучших сообществ с самым высоким членством) или список членов определенного сообщества.

library(igraph)
edges <- read.csv('http://dl.dropbox.com/u/23776534/Facebook%20%5BEdges%5D.csv')
all<-graph.data.frame(edges)
summary(all)

all_eb <- edge.betweenness.community(all)
mods <- sapply(0:ecount(all), function(i) {
all2 <- delete.edges(all, all_eb$removed.edges[seq(length=i)])
cl <- clusters(all2)$membership
modularity(all, cl)
})


plot(mods, type="l")

all2<-delete.edges(all, all_eb$removed.edges[seq(length=which.max(mods)-1)])

V(all)$color=clusters(all2)$membership

all$layout <- layout.fruchterman.reingold(all,weight=V(all)$weigth)

plot(all, vertex.size=4, vertex.label=NA, vertex.frame.color="black", edge.color="grey",
edge.arrow.size=0.1,rescale=TRUE,vertex.label=NA, edge.width=.1,vertex.label.font=NA)

Из-за того, что метод ребер между промежуточными точками работал так плохо, я попробовал еще раз, используя метод обхода:

all_wt<- walktrap.community(all, steps=6,modularity=TRUE,labels=TRUE)
all_wt_memb <- community.to.membership(all, all_wt$merges, steps=which.max(all_wt$modularity)-1)


colbar <- rainbow(20)
col_wt<- colbar[all_wt_memb$membership+1]

l <- layout.fruchterman.reingold(all, niter=100)
plot(all, layout=l, vertex.size=3, vertex.color=col_wt, vertex.label=NA,edge.arrow.size=0.01,
                    main="Walktrap Method")
all_wt_memb$csize
[1] 176  13 204  24   9 263  16   2   8   4  12   8   9  19  15   3   6   2   1

19 кластеров — намного лучше!

Теперь предположим, что у меня есть «известный кластер» со списком его элементов, и я хочу проверить каждый из наблюдаемых кластеров на наличие элементов из «известного кластера». Возвращает процент найденных членов. Не удалось закончить следующее??

list<-read.csv("http://dl.dropbox.com/u/23776534/knownlist.csv")
ength(all_wt_memb$csize) #19

for(i in 1:length(all_wt_memb$csize))
{

match((V(all)[all_wt_memb$membership== i]),list)

}  
9
задан Slow loris 17 May 2016 в 16:56
поделиться