Théorie des graphes - analyse et visualisation


22

Je ne suis pas sûr que le sujet entre dans l'intérêt de CrossValidated. Tu me dira.

Je dois étudier un graphique (à partir de la théorie des graphes ) ie. J'ai un certain nombre de points connectés. J'ai une table avec tous les points et les points dont chacun dépend. (J'ai aussi un autre tableau avec les implications)

Mes questions sont les suivantes: existe-
t-il un bon logiciel (ou un package R) pour étudier cela facilement?
Existe-t-il un moyen simple d'afficher le graphique?


J'ai essayé d'utiliser cran.r-project.org/web/packages/graph/vignettes/graph.pdf mais il semble que le paquet "Rgraphviz" ne soit plus disponible. Quelqu'un a une autre solution?
RockScience


1
Merci! Graphviz est parfait et très flexible, je l'utilise en R avec l'interface Rgraphviz et ça marche très bien.
RockScience

Réponses:


15

iGraph est une bibliothèque cross-language (R, Python, Ruby, C) très intéressante. Il vous permet de travailler avec des graphiques non dirigés et dirigés et dispose de plusieurs algorithmes d'analyse déjà implémentés.


1
(+1) Il semble que ma réponse soit venue après la vôtre. Comme votre réponse met en évidence une perspective quelque peu différente (multiplateforme, algorithmes), j'ai l'impression que nos réponses ne sont pas si redondantes, mais je peux supprimer la mienne sans aucun problème.
chl

14

Il existe différents packages pour représenter les graphiques dirigés et non dirigés, la matrice d'incidence / adjacence, etc. en plus du graphique ; regardez par exemple la vue Tâche gR .

Pour la visualisation et le calcul de base, je pense que le paquetage igraph est le plus fiable, en plus de Rgraphviz (sur BioC comme indiqué par @Rob). Sachez que pour que ce dernier fonctionne correctement, graphviz doit également être installé. Le paquet igraph possède de bons algorithmes pour créer de bonnes mises en page, un peu comme graphviz .

Voici un exemple d'utilisation, à partir d'une fausse matrice d'adjacence:

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

texte alternatif


Merci pour votre réponse. graphviz n'est pas facile à installer avec R, mais il
semble

Pour info ce que je fais maintenant, c'est que je génère le code graphviz avec R et que je le lis dans un mediawiki en utilisant l'extension mediawiki graphviz. (Le package Rgraphviz n'est pas facile à installer et ne fonctionne pas avec la dernière version de R)
RockScience

"Le package 'graph' a été supprimé du référentiel CRAN."
bartektartanus

8

Mis à part ce qui a été dit, pour la tâche de visualisation uniquement (et en dehors de R), vous pourriez être intéressé par la vérification de Gephi .


8

Une autre option est le package statnet. Statnet a des fonctions pour toutes les mesures couramment utilisées dans le SCN et peut également estimer les modèles ERG. Si vous avez vos données dans une liste de périphérie, lisez-les comme suit (en supposant que votre bloc de données est étiqueté "edgelist"):

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

Si vos données sont dans une matrice d'adjacence, vous remplacez l'argument matrix.type par "adjacence":

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

Le package statnet a de très belles capacités de traçage. Pour faire un tracé simple, tapez simplement:

gplot(net)

Pour mettre les nœuds à l'échelle en fonction de leur centralité d'interdépendance, il suffit de:

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

Par défaut, la fonction gplot utilise l'algorithme Fruchterman-Reingold pour placer les nœuds, mais cela peut être contrôlé à partir de l'option mode, par exemple pour utiliser MDS pour le placement du type de nœuds:

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

ou pour utiliser une disposition en cercle:

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

Il existe de nombreuses autres possibilités et ce guide couvre la plupart des options de base. Pour un exemple autonome:

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) Je n'ai jamais utilisé ce package, mais votre aperçu suggère que je devrais l'essayer. Semble bon à première vue.
chl

3

Une question similaire a été posée sur cstheory, également si vous êtes spécifiquement intéressé par les graphes planaires ou la visualisation bibliographique .

Gephi a déjà été mentionné ici, mais il a également été recommandé par quelques-uns sur cstheory, donc je pense que c'est un bon choix.

D'autres options intéressantes incluent:

  • Éclater fournit des outils de visualisation vraiment cool et crée de très jolis graphiques pour les rapports et les articles.
  • Cyptoscape possède des outils d'analyse et de visualisation très puissants. Il est particulièrement bon pour la chimie et la biologie moléculaire.
  • Ce site Web fournit des liens vers de nombreux autres outils de visualisation et bibliothèques sympas (mais pas pour R).

2

J'ai trouvé NodeXL très utile et facile à utiliser. Il s'agit d'un modèle MS Excel qui permet d'importer / exporter facilement un graphique, de formater les arêtes / sommets, de calculer certaines métriques, de disposer d'algorithmes de clustering. Vous pouvez facilement utiliser des images personnalisées comme sommets.
Un autre outil utile pour moi était la mise en page Microsoft Automatic Graph qui fournit une bonne mise en page peut être essayée en ligne (avec un navigateur qui prend en charge SVG).

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.