Python DNA序列随机抽样
我想用100个DNA序列创建1000个随机组。我有一个包含100个fasta序列的文本文件(sequence.txt),我希望随机选择包含10个fasta序列的子组进行进一步分析。这是我尝试过的代码,我一直在得到一些错误Python DNA序列随机抽样,python,bioinformatics,Python,Bioinformatics,我想用100个DNA序列创建1000个随机组。我有一个包含100个fasta序列的文本文件(sequence.txt),我希望随机选择包含10个fasta序列的子组进行进一步分析。这是我尝试过的代码,我一直在得到一些错误 import random import re f = open("sequence.txt", "r") lf = f.split(">") lf.pop(0) f.close() for i in range(10): sublist = "subset_%s
import random
import re
f = open("sequence.txt", "r")
lf = f.split(">")
lf.pop(0)
f.close()
for i in range(10):
sublist = "subset_%s.fas" % i
random_group = random.randrange(len("sequence.txt"), 10)
output = open(sublist, "w")
for m in random_group:
sequence = ">" + lf[m]
output.write(sequence)
output.close()
您没有正确使用
random.randrange
:random.randrange(开始、停止[,步骤])
。如果您提供两个值,它们将变为start
和stop
。您的len(“sequence.txt”)
已经大于10(12)
为什么len(“sequence.txt”)
不是len(lf)
len(“sequence.txt”)
只提供字符串的长度
[random.randrange(0,len(lf))用于范围(10)]中的i
应该是您想要的,或者使用random.sample
您没有正确使用random.randrange
:random.randrange(开始,停止[,步骤])
。如果您提供两个值,它们将变为start
和stop
。您的len(“sequence.txt”)
已经大于10(12)
为什么len(“sequence.txt”)
不是len(lf)
len(“sequence.txt”)
只提供字符串的长度
[random.randrange(0,len(lf))用于范围(10)]中的i
应该是您想要的,或者使用random.sample
签出。它允许您从序列中采样k
(在您的示例中为k=10
)元素(在您的示例中为lf
):
退房。它允许您从序列中采样k
(在您的示例中为k=10
)元素(在您的示例中为lf
):
谢谢,我将试用建议的代码。有没有一种方法可以找到有效分析的样本大小?这很难说。这取决于你在做什么。系统发育重建?估计序列多态性?估计LD?真的要看情况了。比如说,我明白了。结果如何?还是要看情况。取决于图案的强度。大样本量=更好的检测能力。样本量小=检测能力低。顺便说一句,如果您不进行引导,对于您的应用程序,不进行替换的采样应该更合适(这就是sample
的作用)。谢谢,我将试用建议的代码。有没有一种方法可以找到有效分析的样本大小?这很难说。这取决于你在做什么。系统发育重建?估计序列多态性?估计LD?真的要看情况了。比如说,我明白了。结果如何?还是要看情况。取决于图案的强度。大样本量=更好的检测能力。样本量小=检测能力低。顺便说一句,如果您不进行引导,那么对于您的应用程序来说,不进行替换的采样应该更合适(这就是sample
的目的)。
>>> import random
>>> sequences = range(100)
>>> for i in range(1000):
... # Sample a random group
... random_group = random.sample( lf, 10 )
# Output group
...