Teoria dei grafi - analisi e visualizzazione


22

Non sono sicuro che il soggetto entri nell'interesse di CrossValidated. Me lo dirai

Devo studiare un grafico (dalla teoria dei grafi ) cioè. Ho un certo numero di punti collegati. Ho una tabella con tutti i punti e i punti da cui ognuno dipende. (Ho anche un altro tavolo con le implicazioni)

Le mie domande sono:
esiste un buon software (o un pacchetto R) per studiare così facilmente?
C'è un modo semplice per visualizzare il grafico?


Ho provato ad usare cran.r-project.org/web/packages/graph/vignettes/graph.pdf ma sembra che il pacchetto "Rgraphviz" non sia più disponibile. Qualcuno ha un'altra soluzione?
RockScience,


1
Grazie! Graphviz è perfetto e molto flessibile, lo uso in R con l'interfaccia Rgraphviz e funziona benissimo.
RockScience,

Risposte:


15

iGraph è una libreria cross-language (R, Python, Ruby, C) molto interessante. Ti permette di lavorare con grafici non indirizzati e diretti e ha già alcuni algoritmi di analisi già implementati.


1
(+1) Sembra che la mia risposta sia arrivata dopo la tua. Poiché la tua risposta evidenzia una prospettiva leggermente diversa (multipiattaforma, algoritmi), sento che le nostre risposte non sono così ridondanti, ma posso rimuovere la mia senza alcun problema.
chl

14

Esistono vari pacchetti per rappresentare grafici diretti e non indirizzati, matrice di incidenza / adiacenza, ecc. Oltre al grafico ; guarda ad esempio la vista Attività gR .

Per la visualizzazione e il calcolo di base, penso che il pacchetto igraph sia affidabile, oltre a Rgraphviz (su BioC come sottolineato da @Rob). Tenere presente che per il corretto funzionamento di quest'ultimo, è necessario installare anche graphviz . Il pacchetto igraph ha dei buoni algoritmi per creare buoni layout, proprio come graphviz .

Ecco un esempio di utilizzo, a partire da una matrice di adiacenza falsa:

adj.mat <- matrix(sample(c(0,1), 9, replace=TRUE), nr=3)
g <- graph.adjacency(adj.mat)
plot(g)

testo alternativo


Grazie per la tua risposta. graphviz non è facile da installare con R, ma sembra essere un'ottima libreria
RockScience,

FYI quello che faccio ora è che genera il codice graphviz con R e l'ho letto in un mediawiki usando l'estensione mediawiki graphviz. (Il pacchetto Rgraphviz non è facile da installare e non funziona con l'ultima versione di R)
RockScience il

"Il pacchetto 'grafico' è stato rimosso dal repository CRAN."
bartektartanus,

8

A parte quanto è stato detto, per il solo compito di vusualizzazione (e al di fuori di R), potresti essere interessato a controllare Gephi .


8

Un'altra opzione è il pacchetto statnet. Statnet ha funzioni per tutte le misure comunemente utilizzate in SNA e può anche stimare i modelli ERG. Se hai i tuoi dati in un elenco di bordi, leggi i dati come segue (supponendo che il tuo frame di dati sia etichettato "edgelist"):

net <- as.network(edgelist, matrix.type = "edgelist", directed = TRUE) #if the network is directed, otherwise: directed = FALSE

Se i tuoi dati sono in una matrice di adiacenza, sostituisci l'argomento matrix.type con "adiacenza":

net <- as.network(edgelist, matrix.type = "adjacency", directed = TRUE)

Il pacchetto statnet ha alcune ottime funzionalità di stampa. Per fare una semplice trama è sufficiente digitare:

gplot(net)

Per ridimensionare i nodi in base alla loro centralità intermedia, è sufficiente:

bet <- betweenness(net)
gplot(net, vertex.cex = bet)

Per impostazione predefinita, la funzione gplot utilizza l'algoritmo Fruchterman-Reingold per posizionare i nodi, tuttavia questo può essere controllato dall'opzione mode, ad esempio per utilizzare MDS per il posizionamento del tipo di nodi:

gplot(net, vertex.cex, mode = "mds")

o per utilizzare un layout circolare:

gplot(net, vertex.cex, mode = "circle")

Ci sono molte più possibilità e questa guida copre la maggior parte delle opzioni di base. Per un esempio autonomo:

net <- rgraph(20) #generate a random network with 20 nodes
bet <- betweenness(net) #calculate betweenness scores
gplot(net) #a simple plot
gplot(net, vertex.cex = bet/3) #nodes scaled according to their betweenness centrality, the measure is divided by 3 so the nodes don't become to big.
gplot(net, vertex.cex = bet/3, mode = "circle") #with a circle layout
gplot(net, vertex.cex = bet/3, mode = "circle", label = 1:20) #with node labels

(+1) Non ho mai usato questo pacchetto, ma la tua panoramica suggerisce che dovrei provarlo. Sembra buono a prima vista.
chl

3

Una domanda simile è stata posta su cstheory, anche se si è specificamente interessati ai grafici planari o alla visualizzazione bibliografica .

Gephi è già stato menzionato qui, ma è stato anche consigliato da alcuni su cstheory, quindi penso che sia una buona scelta.

Altre opzioni interessanti includono:

  • Flare offre alcuni strumenti di visualizzazione davvero fantastici e crea grafica molto carina per report e documenti.
  • Cyptoscape ha alcuni strumenti di analisi e visualizzazione molto potenti. È particolarmente buono per la chimica e la biologia molecolare.
  • Questo sito Web fornisce collegamenti a molti altri strumenti di visualizzazione e librerie (anche se non per R).

2

Ho trovato NodeXL molto utile e facile da usare. È un modello MS Excel che consente di importare / esportare facilmente un grafico, formattare bordi / vertici, calcolare alcune metriche, disporre di alcuni algoritmi di clustering. Puoi usare facilmente immagini personalizzate come vertici.
Un altro strumento utile per me è stato il layout grafico automatico di Microsoft che fornisce un buon layout può essere provato online (con un browser che supporta SVG).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.