CSV到邻接矩阵python

时间:2019-04-26 13:15:49

标签: python csv adjacency-matrix

我正在尝试可视化使用python和bokeh获得的一些数据,但是无法正常工作。这是一个.csv文件,看起来像这样,只有更多的行和值:

;A;B;C;DA;0;0;1;2;B;0;3;0;0;C;0;0;0;1;D;1;0;2;0

我尝试了一些东西,但是并没有使我走得很远,现在我有点卡住了。

我试图用这个做清单:

import csv

with open('coauth.csv', 'r') as f:
  reader = csv.reader(f)
  your_list = list(reader)

print(your_list)

但是随后它会输出如下嵌套列表:

[[';A;B;C;D'], ['A;0;0;1;2'], ['B;0;3;0;0']...

以此类推。

如果输出类似于以下内容,那就太好了

{ 'A' : [0, 0, 1, 2], 'B' : [0, 3, 0, 0],... }

有人对我应该如何解决有想法,也许对如何进一步利用可视化有想法?

1 个答案:

答案 0 :(得分:0)

例如,您可能希望将其转换为实际的矩阵,例如使用numpy。好像列表列表中的第一个列表为您提供了列的节点,然后每个后续列表中的第一个值就是每一行的节点。您可以将每个列表除以;,然后选择非节点名称(A,B等)的值,并将其存储为矩阵中的一行,以使矩阵看起来像

import numpy as np

# Numpy matrix, or array of a list of lists
np.array([[0,0,1,2],
          [0,3,0,0],
          [0,0,0,1],
          [1,0,2,0]])

根据您的评论,您可以做类似的事情

split_list = [row.split(';') for sublist in your_list for row in sublist]

your_dict = {row[0]: row[1:] for row in split_list[1:]}

#Output
{'A': ['0', '0', '1', '2'], 'B': ['0', '3', '0', '0']}