【问题标题】:DNA sequence random samplingDNA序列随机抽样
【发布时间】:2013-11-19 03:01:10
【问题描述】:

我想使用 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()

【问题讨论】:

    标签: python bioinformatics


    【解决方案1】:

    查看random.sample。它允许您从序列(在您的情况下为 lf)中采样 k(在您的情况下为 k=10)元素:

    >>> import random
    >>> sequences = range(100)
    >>> for i in range(1000):
    ...     # Sample a random group
    ...     random_group = random.sample( lf, 10 )
    
            # Output group
            ...
    

    【讨论】:

      【解决方案2】:

      您没有正确使用random.randrangerandom.randrange(start, stop[, step])。如果您提供两个值,它们将变为 startstop。您的 len("sequence.txt") 已经大于 10 (12)。

      为什么len("sequence.txt") 不是len(lf)len("sequence.txt") 只是给你string 的长度。

      [random.randrange(0, len(lf)) for i in range(10)] 应该是你想要的,或者使用random.sample

      【讨论】:

      • 谢谢,我会尝试建议的代码。有没有办法找到有效分析的样本大小?
      • 这很难说。取决于你在做什么。系统发育重建?估计序列多态性?估计LD?真的取决于。
      • 用于基序分析
      • 我明白了。芯片序列结果?还是要看的。取决于图案的强度。大样本量=更好的检测能力。小样本量=较少的检测能力。顺便说一句,如果您不进行引导,那么对于您的应用程序采样而无需替换应该更合适(这就是 sample 的用途)。
      猜你喜欢
      • 1970-01-01
      • 2021-11-02
      • 1970-01-01
      • 1970-01-01
      • 2016-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多