我有一個相對較大的圖形,頂點:524邊緣:1125,真實世界的交易。邊緣是指向和有重量(包含是可選的)。 我試圖探討在圖形中的各個社區,基本上需要一個方法,其中:R:igraph,社區檢測,edge.betweenness方法,每個社區的count/list成員?
-Calculates所有可能的社區
-Calculates社區
的最佳數量- 返回成員/#的每個(最佳)社區的成員
到目前爲止,我已經設法將以下代碼繪製成對應於各個社區的彩色編碼圖,但是我不知道如何控制社區數量(即使用h繪製前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)
因爲邊介方法進行這麼差我試圖再次使用walktrap方法:
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)
}
你能提供代碼來創建'all'對象嗎?或者,如果它太大,至少它的一些小版本?我很難重新創建問題。 – 2012-03-26 20:16:28
@JeffAllen,道歉添加了一些示例Facebook數據,我正在處理的實際數據是這個大小的〜50倍。謝謝 – 2012-03-26 20:55:51
@JeffAllen,感謝一百萬的幫助。你會注意到我改變了上面的社區檢測方法以提高性能。任何關於如何解決我的匹配問題的建議? – 2012-03-27 20:17:52