2017-09-14 4 views
0

Ich brauche wie dieseCSV Heat Map zu NetworkX Kantenliste

,A,B,C 
B,0,0.25,1.3 
D,,, 
C,,0.75,1 

eine CSV-Datei zu nehmen, wo A, B, C und D alle Knoten und die Werte sind, wie stark sie verbunden sind. Wie Sie sehen können, ist meine Eingabe csv keine Adjazenzmatrix, noch sind die Knoten auf jeder Achse notwendigerweise gleich.

Die Idee besteht darin, die CSV zu einer gewichteten Kantenliste basierend auf einem Schwellenwert zu konvertieren. Zum Beispiel mit einem Schwellenwert von 0,3 würde die oben csv zurück:

C B 1.3 
B C 0.75 
C C 1 

Ich bin ziemlich neu in Python und ich habe keine Ahnung, wie dies zu tun gehen. Ich konnte Graphen aus Adjazenzmatrizen generieren, aber die Daten, die ich analysiere, sind nicht mehr so ​​sauber und mein Code kann nicht mehr damit umgehen.

Antwort

0

Dies ist, was ich mit

with open(my_csv_file) as f: 
    s = f.read() 
    lines = [] 
    row_headings = [] 
    edge_list = [] 
    for row, line in enumerate(s.split('\r\n')): 
     lines.append(line) 
     line_val = line.split(',') 
     row_headings.append(line_val[0]) 
     col_headings = (lines[0].split(',')) 
     for col, val in enumerate(line.split(',')): 
      try: 
       if float(val) > threshold: 
        edge_list.append((col_headings[col], row_headings[row])) 
      except ValueError: 
       pass 

DG = nx.DiGraph()   
my_graph = nx.from_edgelist(edge_list, create_using=DG) 
kam