Ho un grafico relativamente grande con Vertices: 524 Bordi: 1125, di transazioni nel mondo reale. I bordi sono diretti e hanno un peso (l'inclusione è facoltativa). Sto cercando di indagare le diverse comunità all'interno del grafico ed essenzialmente bisogno di un metodo che:R: igraph, rilevamento della comunità, metodo del metodo di spigolo, conta/elenca i membri di ogni comunità?
-Calculates tutti i possibili comunità
-Calculates il numero ottimale di comunità
I ritorni la membri/° membri di ciascuna comunità (ottimale)
Finora sono riuscito a riunire il seguente codice che traccia un grafico con codice colore corrispondente alle varie comunità, tuttavia non ho idea di come controllare il numero di comunità (es. traccia le prime 5 comunità con la h più alta adesione) o elencare i membri di una particolare comunità.
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)
Poiché il metodo bordo betweenness eseguita così male ho riprovato con il metodo 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 ammassi - Molto meglio!
Ora dire che avevo un "cluster noto" con un elenco dei suoi membri e che volevo controllare ciascuno dei cluster osservati per la presenza di membri dal "cluster noto". Restituzione della percentuale di membri trovati. Impossibile completare quanto segue ??
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)
}
Potete fornire il codice per creare anche l'oggetto 'tutto'? O, se è troppo grande, almeno una piccola versione di esso? Sto avendo difficoltà a ricreare il problema. –
@JeffAllen, le scuse hanno aggiunto alcuni dati di esempio di Facebook, i dati effettivamente su cui sto lavorando sono ~ 50 volte la dimensione di questo .. Grazie –
@JeffAllen, Grazie mille è stato di grande aiuto. Noterai che ho modificato il metodo di rilevamento della community sopra per migliorare le prestazioni. Qualche suggerimento su come potrei risolvere il mio problema di abbinamento? –