2017-09-14 1 views
0

Je dois prendre un fichier csv comme celui-ciCSV Carte de chaleur à NetworkX Bord Liste

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

Où A, B, C et D sont tous les nœuds et les valeurs sont à quel point ils sont connectés. Comme vous pouvez le voir, mon entrée csv n'est pas une matrice d'adjacence, et les nœuds ne sont pas nécessairement les mêmes sur chaque axe.

L'idée est de convertir le csv en une liste de bord pondérée basée sur un seuil. Par exemple, avec un seuil de 0,3, csv ci-dessus renverrait:

C B 1.3 
B C 0.75 
C C 1 

Je suis assez nouveau pour python et je ne sais pas comment s'y prendre. J'ai été capable de générer des graphiques à partir de matrices d'adjacence, cependant, les données que j'analyse ne sont plus aussi propres et mon code ne peut plus les gérer.

Répondre

0

C'est ce que je suis venu avec

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)