2017-01-16 1 views
0

J'ai un réseau bimodal (accorder X personne) au format csv. Je voudrais créer une projection personXperson de ce réseau et calculer quelques mesures de réseau (y compris des mesures de centralité de proximité et d'entre-deux, etc.).analyse de réseau: comment créer des fichiers de noeuds et de bords à partir de csv

Quel serait mon premier pas? Je devine créant 2 dossiers séparés pour des noeuds et des bords et exécute l'analyse en R en utilisant le paquet igraph ?!

Voici une version super simplifiée de mes données (my_data.csv).

  • Grant, personne
  • A, 1
  • A, 2
  • B, 2
  • B, 3
+3

Bienvenue sur StackOverflow! S'il vous plaît lire les informations sur [comment poser une bonne question] (http://stackoverflow.com/help/how-to-ask) et comment donner un [exemple reproductible] (http://stackoverflow.com/questions/ 5963269). Cela rendra beaucoup plus facile pour les autres de vous aider. – Axeman

Répondre

0

(1) Créer un graphique en utilisant igraph; (2) le déclarer bipartite; et (3) le projeter comme un graphe en mode unique.

el <- read.table(text = "Grant,Person 
         A,1 
         A,2 
         B,2 
         B,3", 
        sep = ",", header = T, stringsAsFactors=F) 
#1 
net <- graph.edgelist(as.matrix(el)) 
#2 
V(net)$type <- bipartite.mapping(net)$type 

Vous pouvez vérifier que le graphe est biparti en l'examinant:

> net 
IGRAPH DN-B 5 4 -- 
+ attr: name (v/c), type (v/l) 
+ edges (vertex names): 
[1] A->1 A->2 B->2 B->3 

Le « B » dans la deuxième ligne indique qu'il est un graphe biparti.

#3 
net1mode <- bipartite.projection(net)$proj2 

La fonction crée bipartite.projection deux projets, l'un pour chaque mode. Les noeuds sont la deuxième projection, puisqu'ils sont dans la deuxième colonne de l'edgelist original.

par(mfrow=c(1,2)) 
plot(net,edge.arrow.size=0.5,main="Two mode") 
plot(net1mode,edge.arrow.size=0.5, main="One mode projection") 

enter image description here

+0

Excellent. Merci beaucoup – Reza

+0

Encore une question: est-il également possible d'attribuer un couple d'attributs aux nœuds? disons par exemple, genre, et niveau d'éducation? Et peut-être code de couleur les nœuds en fonction de leurs attributs? – Reza

+0

Je vous recommande de regarder [ce site] (http://www.shizukalab.com/toolkits/sna). Il couvre la base de l'utilisation d'igraph et est une ressource utile. Fondamentalement, vous assignez des attributs en utilisant l'opérateur 'V' - par exemple. 'V (net) $ genre <- c (" masculin "," féminin ")'. – paqmo

0

Déterminez comment vous voulez que le graphique pour représenter les données. D'après ce que vous avez décrit, une approche consisterait à faire en sorte que les nœuds de votre graphique représentent les personnes et que les bords représentent les subventions. Dans ce cas, créez une paire de personnes qui sont sur la même subvention. Les arêtes sont bidirectionnelles par défaut dans iGraph, donc vous avez juste besoin de chaque paire une fois.

+0

finalement, je veux que les gens soient les nœuds. Deux personnes sont connectées si elles sont payées sur la même subvention. Donc, dans mon exemple, la sortie idéale est: Noeuds: 1,2,3 et les bords sont: 1-2, 2-3 – Reza

+0

J'ai environ 300000 personnes sur 100000 subventions. Créer une liste par paires de personnes sera douloureux. Maintenant, la question est de savoir si R ou tout autre logiciel peut convertir le fichier csv d'origine à ma sortie idéale? – Reza