Erstellen von Netzwerkdiagrammen

8

Mein Beispieldatensatz im CSV-Format sieht folgendermaßen aus.

Der ungerichtete Graph hat 90 Knoten mit den Zahlen {10,11,12 .... 99} deren Kanten mit Gewichten wie folgt definiert sind.

[Beispieldaten]

%Vor%

Ich möchte das in Netzwerkform darstellen. Was ist der effektive Weg, um es zu repräsentieren (zum Beispiel Gephi, Networkx, etc). Die Stärke der Kante sollte das Kantengewicht darstellen.

    
user1659936 06.03.2016, 18:44
quelle

4 Antworten

4

Wenn Sie in Linux sind und davon ausgehen, dass Ihre CSV-Datei so aussieht (zum Beispiel):

%Vor%

Sie können dieses Programm verwenden:

%Vor%

Ich habe vorher nach einer effektiven Lösung gesucht, um komplexe Graphen zu erstellen, und dies ist die einfachste (ohne Python-Modulabhängigkeit) Methode, die ich gefunden habe.

Hier ist das Bildergebnis für einen ungerichteten Graphen (mit dir = none ):

    
A STEFANI 10.03.2016, 15:21
quelle
6

Mit networkx können Sie Kanten mit Attributen hinzufügen

%Vor%     
dmb 10.03.2016 05:54
quelle
5

Wenn Sie eine große csv haben, empfehle ich die Verwendung von pandas für den E / A-Teil Ihrer Aufgabe. networkx hat eine nützliche Methode, um mit pandas zu interagieren: from_pandas_dataframe . Angenommen, Ihre Daten befinden sich in einem CSV-Format in dem oben angegebenen Format, sollte dieser Befehl für Sie funktionieren:

%Vor%

Aber zur Demonstration verwende ich 10 zufällige Kanten innerhalb Ihrer Anforderungen (Sie müssen numpy nicht importieren, ich benutze es nur für die Generierung von Zufallszahlen):

%Vor%

Alles im vorherigen Block sollte dasselbe wie Ihr pd.read_csv -Befehl erzeugen. In diesem Datenrahmen ergibt df :

%Vor%

Verwenden Sie from_pandas_dataframe , um MultiGraph zu initialisieren. Dies setzt voraus, dass Sie mehrere Kanten haben, die sich mit einem Knoten verbinden (nicht in OP angegeben). Um diese Methode verwenden zu können, müssen Sie eine einfache Änderung in networkx Quellcode in der convert_matrix.py Datei vornehmen, implementiert hier (es war ein einfacher Fehler).

%Vor%

Dadurch wird Ihr MultiGraph erstellt. Sie können ihn mithilfe von draw :

%Vor%

Im Detail: positions ist ein Wörterbuch, in dem jeder Knoten ein Schlüssel ist und der Wert eine Position im Diagramm ist. Ich werde beschreiben, warum wir positions unten speichern. Der generische draw zeichnet Ihre MultiGraph-Instanz MG mit den Knoten an der angegebenen positions . Wie Sie jedoch sehen können, sind die Kanten alle gleich breit:

Aber Sie haben alles, was Sie brauchen, um die Gewichte hinzuzufügen. Holen Sie zuerst die Gewichte in eine Liste namens weights . Iterieren (mit Listenverständnis) durch jede Kante mit edges , Wir können die Gewichte extrahieren. Ich entschied mich, mit 5 zu multiplizieren, weil es am saubersten aussah:

%Vor%

Schließlich verwenden wir draw_networkx_edges , die nur die Kanten des Graphen zeichnet (keine Knoten). Da wir die positions der Knoten haben und hold=True setzen, können wir gewichtete Kanten direkt über unserer vorherigen Visualisierung zeichnen.

%Vor%

Sie können sehen, dass der Knoten (14, 13) die schwerste Zeile und den größten Wert vom DataFrame df (neben (13,13) ) hat.

    
Kevin 10.03.2016 21:50
quelle
0

Sie sollten die Zeile am Anfang der CSV-Datei wie folgt bearbeiten:

Quelle Zieltyp Gewicht 23 89 ungerichtet 34,9 (d. H. Es gibt eine Kante zwischen Knoten 23 und 89 mit Gewicht 34,9) 75 14 ungerichtet 28.5 so weiter ....

Danach können Sie die csv-Datei in Gephi importieren, um das Diagramm darzustellen, dessen Dicke für das Gewicht steht, zum Beispiel: Bildbeschreibung hier eingeben

    
Cadden 17.03.2016 00:15
quelle

Tags und Links