J'ai un fichier CSV avec 4 millions de bords d'un réseau dirigé représentant des personnes communiquant entre elles (par exemple, John envoie un message à Mary, Mary envoie un message à Ann, John envoie un autre message à Mary, etc.). Je voudrais faire deux choses:
Trouvez le degré, l'intervalle et (peut-être) les mesures de centralité des vecteurs propres pour chaque personne.
Obtenez une visualisation du réseau.
Je voudrais le faire en ligne de commande sur un serveur Linux car mon ordinateur portable n'a pas beaucoup de puissance. J'ai R installé sur ce serveur et la bibliothèque statnet. J'ai trouvé ce poste de 2009 d'une personne plus compétente que moi essayant de faire la même chose et ayant des problèmes avec ça. Je me demandais donc si quelqu'un d'autre avait des conseils sur la façon de procéder, de préférence en me prenant étape par étape car je ne sais que charger le fichier CSV et rien d'autre.
Juste pour vous donner une idée, voici à quoi ressemble mon fichier CSV:
$ head comments.csv
"src","dest"
"6493","139"
"406705","369798"
$ wc -l comments.csv
4210369 comments.csv
Réponses:
Ce que vous avez est une liste de bords, qui peut être convertie en objet réseau à l'aide de la bibliothèque réseau. Voici un exemple utilisant des données fictives.
Cependant, un avertissement s'impose: vous avez un très grand réseau et je ne suis pas sûr qu'une intrigue sera si informative. Cela ressemblera probablement à une grosse pelote de laine. Je ne sais pas non plus dans quelle mesure ces bibliothèques gèrent de tels ensembles de données. Je vous suggère de jeter un œil à la documentation des bibliothèques réseau, statnet et ergm. Le Journal of Statistical Software (v24 / 3) propose plusieurs articles couvrant ces bibliothèques. Le problème peut être trouvé ici:
http://www.jstatsoft.org/v24
la source
src
etdst
. Voici ce que je fais généralement pour charger le fichier (maintenant un fichier délimité par des tabulations):el <- read.csv("comment-net/comments-ouids.tsv",header=T,sep="\t")
statnet
famille de bibliothèques sur un réseau non dirigé de plus de 3500 nœuds (~ 8 millions de bords possibles). C'était tout à fait faisable, surtout lorsque l'objectif était simplement de calculer les statistiques du réseau. J'ai même estimé des ERGM sur des réseaux de cette taille. Mais votre point est bien compris; Je doute que des réseaux de millions de nœuds puissent être facilement analysés.Je ne pense pas que R soit un premier choix ici (peut-être que je me trompe). Vous aurez besoin d'énormes tableaux ici pour indexer et préparer vos fichiers réseaux dans le format de données approprié. Tout d'abord, je vais essayer d'utiliser la bibliothèque SNAP de Jure (Rob le mentionne dans le post ci-dessus) ; il est écrit en C ++ et fonctionne très bien sur les grands réseaux.
la source
centrality.cpp
deTUNGraph
àTNEGraph
(voir pastebin.com/GHUquJvT ligne 24). Il ne compile plus. Je soupçonne que cela nécessite un type de nœud différent? L'erreur que j'obtiens est:centrality.cpp:24: error: conversion from ‘TUNGraph::TNodeI’ to non-scalar type ‘TNEGraph::TNodeI’ requested
(voir l'erreur complète sur pastebin.com/86mCbByG )Gephi ( http://gephi.org/ ) pourrait être un moyen facile d'explorer les données. Vous pouvez presque certainement le visualiser et effectuer des calculs (même si je ne l'ai pas utilisé depuis un certain temps, donc je ne me souviens pas de toutes les fonctions).
la source
De l'expérience passée avec un réseau de 7 millions de nœuds, je pense que visualiser votre réseau complet vous donnera une image ininterprétable. Je pourrais suggérer différentes visualisations en utilisant des sous-ensembles de vos données, par exemple en utilisant simplement les 10 principaux nœuds avec les liens les plus entrants ou sortants. J'appuie la suggestion de celenius sur l'utilisation de gephi.
la source
Si vous êtes préoccupé par la taille du réseau, vous pouvez essayer le
igraph
package dans R. Et si cela fonctionne mal à l'intérieur de R, il pourrait faire mieux en tant que module Python. Ou même lenetworkx
package pour Pythonla source
Pensez-vous que le réseau possède un petit nombre de très gros composants connectés? Sinon, vous pouvez le décomposer en composants distincts, ce qui facilitera le calcul des mesures de centralité.
la source
Il existe plusieurs logiciels R que l'on pourrait utiliser, notamment "sna" et "network". NetworkX est une chose sur laquelle je ne compterais pas nécessairement si vous rencontrez des problèmes de performances avec sna. J'adore NetworkX à mort et je l'utilise pour la plupart de mes analyses, mais NetworkX est assez fier d'être une implémentation principalement purement pythonique. Il n'exploite pas particulièrement bien le code précompilé rapide, et sna dépasse souvent NetworkX d'une marge considérable.
la source