Ich habe eine relativ große Grafik mit Vertices: 524 Edges: 1125, der realen Welt Transaktionen. Die Kanten sind gerichtet und haben ein Gewicht (Aufnahme ist optional). Ich versuche, die verschiedenen Gemeinschaften innerhalb der grafischen Darstellung untersuchen und müssen im Wesentlichen ein Verfahren, das:R: igraph, community detection, edge.betweenness-Methode, Anzahl/Liste Mitglieder der jeweiligen Gemeinschaft?
: Berechnet alle möglichen Gemeinden
: Berechnet die optimale Anzahl von Gemeinden
-Gibt die Mitglieder/Anzahl der Mitglieder jeder (optimalen) Gemeinschaft
Bis jetzt habe ich es geschafft, den folgenden Code zusammenzufassen, der eine farbkodierte Grafik entsprechend den verschiedenen Communities aufträgt, aber ich habe keine Ahnung, wie ich die Anzahl der Communities kontrollieren kann plotten Sie die Top 5 Gemeinden mit dem h höchste Mitgliedschaft) oder führen Sie die Mitglieder einer bestimmten Gemeinschaft auf.
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)
Da die Kante Between Verfahren so durchgeführt schlecht ich wieder versucht, die walktrap Methode:
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 Cluster - Viel besser!
Jetzt sagen, ich hatte einen "bekannten Cluster" mit einer Liste seiner Mitglieder und und wollte jeden der beobachteten Cluster auf die Anwesenheit von Mitgliedern aus dem "bekannten Cluster" überprüfen. Rückgabe des Prozentsatzes der gefundenen Mitglieder. Kann das folgende nicht beenden ??
Können Sie den Code liefern die 'all'-Objekt zu erstellen, auch? Oder, wenn es zu groß ist, zumindest eine kleine Version davon? Es fällt mir schwer, das Problem neu zu erstellen. –
@JeffAllen, Entschuldigung hinzugefügt einige Beispiel-Facebook-Daten, die tatsächlichen Daten, die ich arbeite, ist ~ 50 mal die Größe von diesem .. Danke –
@JeffAllen, Danke eine Million, die eine große Hilfe war. Sie werden feststellen, dass ich die oben genannte Community-Erkennungsmethode für eine verbesserte Leistung geändert habe. Irgendwelche Vorschläge, wie ich mein passendes Problem lösen könnte? –