我有一个包含独特蛋白质对的文件,即阳性数据集。让我们称之为infile
。下面是 infile 内容的示例:
Q9VRA8 A1ZBB4
Q03043 Q9VX24
B6VQA0 Q7KML2
条目是制表符分隔的。我们称之为随机数据集,它outfile
必须包含单个蛋白质的组合,它们不能以任何顺序匹配 infile 的内容。例如,对于上面的第一行,随机输出文件不能包含以下对:
Q9VRA8 A1ZBB4
A1ZBB4 Q9VRA8
此外,生成的负数据集必须包含正数据集中完全相同数量的蛋白质对。为了解决这个问题,我尝试了以下方法:
# Read original file
data = list(infile.readlines())
ltotal = len(data)
lwritten = 0
# Split original file in words
with open (infilename, 'rt') as infile:
pairs = set(frozenset(line.split()) for line in infile)
words = list(itertools.chain.from_iterable(pairs))
random.shuffle(words)
# Obtain pairs of words
with open(outfilename, 'wt') as outfile:
for pair in itertools.izip(*[iter(words)] * 2):
if frozenset(pair) not in pairs and lwritten != ltotal:
outfile.write("%s\t%s\n" % pair)
lwritten += 1
这行得通。但是,infile 总共有 856471 行,outfile 获得了不同范围的蛋白质对,最少有 713000。
我该如何解决这个问题,以便生成的对数与 infile 完全相同?此外,我无法解决反向配对顺序问题。对这两个问题有什么想法吗?
提前致谢。