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.
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 ):
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:
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):
Alles im vorherigen Block sollte dasselbe wie Ihr pd.read_csv
-Befehl erzeugen. In diesem Datenrahmen ergibt df
:
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).
Dadurch wird Ihr MultiGraph erstellt. Sie können ihn mithilfe von draw
:
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:
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.
Sie können sehen, dass der Knoten (14, 13)
die schwerste Zeile und den größten Wert vom DataFrame df
(neben (13,13)
) hat.
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
Tags und Links graph social-networking