# Author: Hui Lan class Overlap: ''' Compare two networks and compute hit rate ''' def __init__(self, predicted_edges={}, tau1=None, gold_standard_edges={}, tau2=None): ''' predicted_edges: dictionary {'TF * Target': score} gold_standard_edges: dictionary {'TF * Target': score} ''' def get_edges_above_threshold(d, tau): d2 = {} for k in d: if d[k] > tau: d2[k] = d[k] return d2 self.pred = predicted_edges self.true = gold_standard_edges if tau1 != None: self.pred = get_edges_above_threshold(self.pred, tau1) if tau2 != None: self.true = get_edges_above_threshold(self.true, tau2) def getTP(self): tp = 0 for k in self.pred: if k in self.true: tp += 1 return tp def getFP(self): fp = 0 for k in self.pred: if not k in self.true: fp += 1 return fp def getNumberOfPositivesInPred(self): return len(self.pred) def getNumberOfPositivesInTrue(self): return len(self.true) if __name__ == '__main__': f = open('../Data/temp/AtRegNet.20210208.csv') AtRegNet_dict = {} for line in f: line = line.strip() lst = line.split(',') if lst[0] != 'TFName' and len(lst) > 4: tf = lst[1].upper().strip() target = lst[4].upper().strip() AtRegNet_dict[tf+target] = 100 f.close() f = open('../Data/temp/edges.txt') BrainEdges_dict = {} for line in f: line = line.strip() lst = line.split('\t') tf = lst[1].split()[0] target = lst[0].split()[0] score = float(lst[8]) BrainEdges_dict[tf+target] = score f.close() overlap = Overlap(BrainEdges_dict, 3, AtRegNet_dict, 0) print('TP:%d, PP:%d, Hit rate: %4.7f while comparing with AtRegNet.20210208.csv.' % (overlap.getTP(), overlap.getNumberOfPositivesInPred(), overlap.getTP()/overlap.getNumberOfPositivesInPred()))