Ich habe eine CSV-Datei mit 4 Millionen Kanten eines gerichteten Netzwerks, das Personen darstellt, die miteinander kommunizieren (z. B. John sendet eine Nachricht an Mary, Mary sendet eine Nachricht an Ann, John sendet eine weitere Nachricht an Mary usw.). Ich möchte zwei Dinge tun:
Finden Sie Grad-, Zwischen- und (vielleicht) Eigenvektor-Zentralitätsmaße für jede Person.
Holen Sie sich eine Visualisierung des Netzwerks.
Ich möchte dies über die Befehlszeile eines Linux-Servers tun, da mein Laptop nicht viel Strom hat. Ich habe R auf diesem Server und der Statnet-Bibliothek installiert. Ich fand diesen Beitrag von 2009 von jemandem kompetenter als ich, der versuchte, dasselbe zu tun und Probleme damit hatte. Ich habe mich also gefragt, ob jemand andere Hinweise dazu hat, vorzugsweise Schritt für Schritt, da ich nur weiß, wie man die CSV-Datei lädt und sonst nichts.
Um Ihnen eine Vorstellung zu geben, sieht meine CSV-Datei folgendermaßen aus:
$ head comments.csv
"src","dest"
"6493","139"
"406705","369798"
$ wc -l comments.csv
4210369 comments.csv
Antworten:
Sie haben eine Kantenliste, die mithilfe der Netzwerkbibliothek in ein Netzwerkobjekt konvertiert werden kann. Hier ist ein Beispiel mit fiktiven Daten.
Eine Warnung ist jedoch angebracht: Sie haben ein sehr großes Netzwerk und ich bin nicht sicher, ob eine Handlung so informativ sein wird. Es wird wahrscheinlich wie ein großer Wollknäuel aussehen. Ich bin mir auch nicht sicher, wie gut diese Bibliotheken mit so großen Datenmengen umgehen. Ich schlage vor, dass Sie sich die Dokumentation für die Netzwerk-, Statnet- und Ergm-Bibliotheken ansehen. Das Journal of Statistical Software (v24 / 3) bietet mehrere Artikel zu diesen Bibliotheken. Das Problem kann hier gefunden werden:
http://www.jstatsoft.org/v24
quelle
src
und habendst
. Dies ist, was ich normalerweise mache, um die Datei zu laden (jetzt eine durch Tabulatoren getrennte Datei):el <- read.csv("comment-net/comments-ouids.tsv",header=T,sep="\t")
statnet
Bibliotheksfamilie in einem ungerichteten Netzwerk von mehr als 3500 Knoten (~ 8 Millionen mögliche Kanten) verwendet. Das war durchaus machbar, besonders wenn das Ziel nur darin bestand, Netzwerkstatistiken zu berechnen. Ich habe sogar ERGMs in Netzwerken dieser Größe geschätzt. Aber Ihr Punkt ist gut aufgenommen; Ich bezweifle, dass Netzwerke von Millionen von Knoten leicht analysiert werden können.Ich denke nicht, dass R hier die erste Wahl ist (vielleicht irre ich mich). Sie benötigen hier große Arrays, um Ihre Netzwerkdateien im entsprechenden Datenformat zu indizieren und vorzubereiten. Zunächst werde ich versuchen, die SNAP- Bibliothek von Jure (Rob erwähnt ihn im obigen Beitrag) zu verwenden. Es ist in C ++ geschrieben und funktioniert sehr gut in großen Netzwerken.
quelle
centrality.cpp
vonTUNGraph
in geändertTNEGraph
(siehe pastebin.com/GHUquJvT Zeile 24). Es wird nicht mehr kompiliert. Ich vermute, es erfordert einen anderen Knotentyp? Der Fehler, den ich bekomme, ist:centrality.cpp:24: error: conversion from ‘TUNGraph::TNodeI’ to non-scalar type ‘TNEGraph::TNodeI’ requested
(siehe vollständigen Fehler unter pastebin.com/86mCbByG )Gephi ( http://gephi.org/ ) ist möglicherweise eine einfache Möglichkeit, die Daten zu untersuchen. Sie können es mit ziemlicher Sicherheit visualisieren und einige Berechnungen durchführen (obwohl ich es einige Zeit nicht verwendet habe, sodass ich mich nicht an alle Funktionen erinnern kann).
quelle
Aus früheren Erfahrungen mit einem Netzwerk von 7 Millionen Knoten denke ich, dass die Visualisierung Ihres gesamten Netzwerks ein nicht interpretierbares Bild ergibt. Ich könnte verschiedene Visualisierungen vorschlagen, die Teilmengen Ihrer Daten verwenden, z. B. nur die Top-10-Knoten mit den meisten eingehenden oder ausgehenden Links. Ich stimme Celenius 'Vorschlag zur Verwendung von Gephi zu.
quelle
Wenn Sie sich mit der Größe des Netzwerks befassen, können Sie das
igraph
Paket in R ausprobieren. Wenn dies in R schlecht funktioniert, ist es möglicherweise besser als Python-Modul. Oder sogar dasnetworkx
Paket für Pythonquelle
Haben Sie den Verdacht, dass im Netzwerk nur wenige sehr große Komponenten verbunden sind? Wenn nicht, können Sie es in verschiedene Komponenten zerlegen, was die Berechnung von Zentralitätsmaßen erheblich erleichtert.
quelle
Es gibt mehrere R-Softwarepakete, die verwendet werden können, einschließlich "sna" und "network". Eine Sache, auf die ich mich nicht unbedingt verlassen würde, wenn Sie Leistungsprobleme mit sna haben, ist NetworkX. Ich liebe NetworkX zu Tode und verwende es für die meisten meiner Analysen, aber NetworkX ist ziemlich stolz darauf, eine meist rein pythonische Implementierung zu sein. Schneller vorkompilierter Code wird nicht besonders gut genutzt, und sna übertrifft NetworkX häufig erheblich.
quelle