2012-10-25 7 views
6

ich eine Textdatei in Form mit etwa 8,5 Millionen Datenpunkte haben:Python Mit einer Verbindung/Netzwerk-Graphen erzeugen

Company 87178481 
Company 893489 
Company 2345788 
[...] 

Ich möchte Python verwenden, um eine Verbindung Graphen zu erstellen, was das Netz zu sehen, zwischen Unternehmen sieht so aus. Aus dem obigen Beispiel würden sich zwei Unternehmen eine Kante teilen, wenn der Wert in der zweiten Spalte gleich ist (Klärung von/für Hooked).

Ich habe das NetworkX Paket verwendet und bin in der Lage, ein Netzwerk für ein paar tausend Punkte zu generieren, aber es ist nicht durch die volle 8,5 Millionen Knoten Textdatei. Ich lief es und ging für etwa 15 Stunden, und als ich zurückkam, blinkte der Cursor in der Shell immer noch, aber es gab kein Ausgabediagramm.

Ist es sicher anzunehmen, dass es noch lief? Gibt es einen besseren/schnelleren/einfacheren Ansatz, um Millionen von Punkten grafisch darzustellen?

+0

Wie werden die Unternehmen verbunden? I.e. Ist eine Kante zwischen Firma A und B geteilt, wenn die zweite Spalte dieselbe ist? – Hooked

+0

Ja, das ist richtig. – Jon

+0

Ich kann nicht sagen, ich hatte Probleme mit 8.5Million in networkx. Wie viele verschiedene Ecken hast du? Benutzt du Regie/Regie? Wenn Sie "kein Ausgabediagramm" sagen - was genau meinen Sie? [zB hast du nicht versucht, es oder etwas zu drucken] –

Antwort

5

Wenn Sie 1000K Datenpunkte haben, benötigen Sie eine Möglichkeit, das Gesamtbild zu betrachten. Abhängig davon, was Sie genau suchen, können Sie, wenn Sie eine "Entfernung" zwischen Unternehmen angeben können (z. B. Anzahl der Verbindungen getrennt), Beziehungen (oder Clustering) über eine Dendrogram visualisieren.

Scipy tut clustering:

http://docs.scipy.org/doc/scipy/reference/cluster.hierarchy.html#module-scipy.cluster.hierarchy

und hat eine Funktion, um sie in Dendrogramme zur Visualisierung drehen:

http://docs.scipy.org/doc/scipy/reference/generated/scipy.cluster.hierarchy.dendrogram.html#scipy.cluster.hierarchy.dendrogram

Ein Beispiel für einen kürzesten Funktion Bahnweg über networkx:

http://networkx.lanl.gov/reference/generated/networkx.algorithms.shortest_paths.generic.shortest_path.html#networkx.algorithms.shortest_paths.generic.shortest_path

Schließlich müssen Sie entscheiden, wie Sie die Entfernung zwischen zwei Firmen (Vertices) in Ihrem Diagramm gewichten möchten.

+0

Gibt es einen einfacheren oder bevorzugten Weg, um dieses Netzwerk in SAS oder R zu bauen? – Jon

+0

@Jon Diese Antwort (obwohl Links zur Verfügung gestellt werden) ist sprachunabhängig. Was möchten Sie mit Ihrem Graphen von einer Million Punkten zeigen? Allgemeine Verbindungen, disparate Clustering, zentrale Hubs? Es ist unklar, was Sie aus Ihrem Datensatz herausholen möchten, da viele verschiedene Fragen dazu gestellt werden können. – Hooked

+0

Es ist ein wenig vage. Ich würde gerne Cluster und Verbindungspunkte zwischen Clustern sehen. Die Idee besteht darin, die Daten für die Netzwerkreichweite zu verwenden, um zu sehen, wo einzelne Verbindungen zwischen einem Master-Cluster und einem kleineren Cluster bestehen. Diese singulären Geschäftsverbindungen können dann für gezieltere Marketingzwecke genutzt werden usw. – Jon

4

Sie haben zu viele Datenpunkte und wenn Sie das Netzwerk visualisiert haben, ergibt das keinen Sinn. Sie müssen Möglichkeiten haben, 1) die Anzahl der Unternehmen zu reduzieren, indem Sie diejenigen entfernen, die weniger wichtig/weniger verbunden sind. 2) das Diagramm irgendwie zusammenfassen und dann visualisieren.

Um die Größe der Daten zu reduzieren, ist es möglicherweise besser, das Netzwerk unabhängig zu erstellen (mit Ihrem eigenen Code, um eine Edge-Liste von Unternehmen zu erstellen). Auf diese Weise können Sie die Größe Ihres Graphen reduzieren (z. B. durch Entfernen von Singletons, die viele sein können).

Zur Zusammenfassung empfehle ich, einen Clustering- oder Community-Erkennungsalgorithmus auszuführen. Dies kann sehr schnell auch für sehr große Netzwerke durchgeführt werden. Verwenden Sie die „fastgreedy“ -Methode in der IGRAPH Paket: http://igraph.sourceforge.net/doc/R/fastgreedy.community.html (es ist ein schneller Algorithmus auch online verfügbar, ist dies von Blondel et al: http://perso.uclouvain.be/vincent.blondel/publications/08BG.pdf weiß, dass ich ihren Code online irgendwo ist)

Verwandte Themen