CSV热图到Networkx边缘列表

时间:2017-09-14 22:02:55

标签: python csv networkx

我需要像这样一个csv文件

$('#MemberBasicInfor_FirstName, #MemberBasicInfor_LastName').on('keypress', function (event) {
    var allowedCodes = [[8, 8], [32, 32], [48, 57], [65, 90], [97, 122], [127, 127]];
    var key = String.fromCharCode(!event.charCode ? event.which : event.charCode);
    if (!allowedCodes(codePair => key.charCodeAt(0) <= codePair[0] || key.charCodeAt(0) >= codePair[1])) {
        event.preventDefault();
        return false;
    }
});

其中A,B,C和D都是节点,值是它们的连接强度。如您所见,我的输入csv不是邻接矩阵,每个轴上的节点也不一定相同。

这个想法是根据阈值将csv转换为加权边缘列表。例如,阈值为0.3时,上述csv将返回:

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

我是python的新手,我不知道如何去做这件事。我已经能够从邻接矩阵生成图形,但是,我正在分析的数据不再是干净的,我的代码也无法再处理它。

1 个答案:

答案 0 :(得分:0)

这就是我想出来的

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)