Python DNA序列随机抽样

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

我想用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.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
        ...