2017-06-14 5 views
1

Ich brauche Hilfe mit networkX oder einem anderen Graph lib in Python. Ich habe Wörterbuch mit Schlüssel und für jede Taste ein paar Wert:Graph networkx von python dict

{nan: array([nan, nan, nan, nan, nan, nan, nan], dtype=object), 
'BBDD': array([nan, nan, nan, nan, nan, nan, nan], dtype=object), 
'AAAD': array(['BBDD', nan, nan, nan, nan, nan, nan], dtype=object), 
'AAFF': array(['AAAD', nan, nan, nan, nan, nan, nan], dtype=object), 
'MMCC': array(['AAAD', nan, nan, nan, nan, nan, nan], dtype=object), 
'KKLL': array(['AAFF', 'MMCC', 'AAAD', 'BBDD', nan, nan, nan], dtype=object), 
'GGHH': array(['KKLL', 'NI4146', 'MMCC', nan, nan, nan, nan],dtype=object), ...} 

Nun meine Frage ist, wie kann ich Daten aus dieser dict stellen grafisch darzustellen, wo Tasten Knoten wären und Werte würden Kanten sein. Welcher Weg ist der beste Weg für eine Iteration durch dict?

import networkx as nx 
import matplotlib.pyplot as plt 

g = nx.DiGraph() 
g.add_nodes_from([1,2,3,4,5]) 
g.add_edge(1,2) 
g.add_edge(4,2) 
g.add_edge(3,5) 
g.add_edge(2,3) 
g.add_edge(5,4) 

nx.draw(g,with_labels=True) 
plt.draw() 
plt.show() 

Es sollte so etwas wie dieses, aber mit anderen Daten

+0

Warum Sie eine numpy Array von Strings haben Sie stattdessen eine reguläre Liste von Zeichenketten zu verwenden? –

+0

Ich bin wirklich nicht sicher, wovon du sprichst, ich bin ein totaler Anfänger. Aber ich denke, was Sie denken, das ist, weil ich den ersten Datenframe bekam und dann den Datenrahmen in dict umwandelte. @IgnacioVergaraKausel – jovicbg

Antwort

1

Sie mit

d = {nan: array([nan, nan, nan, nan, nan, nan, nan], dtype=object), 
'BBDD': array([nan, nan, nan, nan, nan, nan, nan], dtype=object), 
'AAAD': array(['BBDD', nan, nan, nan, nan, nan, nan], dtype=object), 
'AAFF': array(['AAAD', nan, nan, nan, nan, nan, nan], dtype=object), 
'MMCC': array(['AAAD', nan, nan, nan, nan, nan, nan], dtype=object), 
'KKLL': array(['AAFF', 'MMCC', 'AAAD', 'BBDD', nan, nan, nan], dtype=object)} 

starten Angenommen Dann können Sie add_nodes_from wie folgt verwenden:

g = nx.DiGraph() 
g.add_nodes_from(d.keys()) 

und add_edges_from so:

for k, v in d.items(): 
    g.add_edges_from(([(k, t) for t in v])) 

Beachten Sie, dass Knoten keine Ganzzahlen sind.

Im Anschluss daran können Sie sehen:

>>> g.edges() 
[(nan, nan), 
('AAAD', 'BBDD'), 
('AAAD', nan), 
('MMCC', nan), 
('MMCC', 'AAAD'), 
('BBDD', nan), 
('KKLL', 'BBDD'), 
('KKLL', nan), 
('KKLL', 'AAFF'), 
('KKLL', 'AAAD'), 
('KKLL', 'MMCC'), 
('AAFF', nan), 
('AAFF', 'AAAD')] 

​ 
+0

Vielen Dank, Mann ... sehr viel. :) – jovicbg

+0

@jovicbg Kein Problem. Alles Gute. –

Verwandte Themen