【问题标题】:Count occurrences of a fuzzy sequence within a larger DNA sequence计算较大 DNA 序列中模糊序列的出现次数
【发布时间】:2017-09-27 18:51:03
【问题描述】:

我正在尝试搜索并计算出现在较大序列 (F) 中的小 DNA 序列 (R) 的数量,但 R 有一些可能是可变的字符。我能想到的最简单的方法是为 R 设置一个比率并计算 F 中高于 80% 的所有命中,但似乎这样做的唯一命令(例如 difflib 的 SequenceMatcher 或 get_close_matches)需要列表才能工作。我不能将 F 分解为任何此类列表。有什么想法吗?

编辑 2:根据要求提供更多信息。

DNA 片段 (F) 中存在一定数量的重复 (R)。 F 长度为 353 个字符,单次重复长度为 15 个字符。不应发生重叠,因为 R 足够不同而不会重叠。问题是 R 可以是可变的,15 个字符中有 2 个可以改变或保持不变。我需要能够检测到这些变化以及未来可能发生的任何变化。我试图避免在 R 中拥有一个充满这些变体的单独数据库。变量字符也可能不在同一位置,因此使用如下正则表达式:

re.findall(pattern = "CTGCTTGGCGGG[TC]T[CG]", string = fragment)

无法工作。另外,这是我在通过 difflib 尝试时使用的:

difflib.get_close_matches(repeat, fragment, cutoff = 0.85)

重复是CTGCTTGGCGGGTTC,DNA 片段是AAAATTGCGGCATGTGGGCTGACTCTGAAAGCGATGCTCACGAAAAGGGAACGCGGCGCCGTCGGGCGCCGCGCGCCGCTTAGGACTGCTGGCCTGCGGCCGGCGCCTGCTTGGCGGGTTCCTGCTTGGCGGGCTCCTGCTTGGCGGGTTCCTGCTTGGCGGGTTCCTGCTTGGCGGGTTCCTGCTTGGCGGGCTGCTGCTTGGCGGGCTGCTGGGCCGGCGCCTGCTGGCCAGGAGCGGGCTGCTGGCCGGCAGGCGCCGCGCCCCCCTTGTTCCAGGGCGAAGCCTGCACCGGCGCCCCCGGACGGATCTTCTGGAAGCCTTCGACCACCACCACGTCTCCCGCCGCCAGG

重复是指 R 在 DNA 片段中重复多次。

谢谢。

【问题讨论】:

  • 不完全清楚你想做什么。请举个例子。此外,您最好指定是否重叠计数等。
  • 您能否粘贴RF 的示例并进一步解释您对重复的定义?
  • 谢谢,但如果可以的话,我想避免添加 biopython。
  • 您能解释一下“未来可能发生的任何变化”是什么意思吗?

标签: python-2.7 bioinformatics fuzzy-search


【解决方案1】:

你的问题有点缺乏细节,所以我做了一些假设。

如果您可以将R 重写为列表的列表,那么您只需计算R 的所有可能变体并在F 中查找这些变体:

import re
from itertools import product

R = [['CTGCTTGGCGGG'] , ['T', 'C'], ['T'], ['C', 'G']]

F = 'AAAATTGCGGCATGTGGGCTGACTCTGAAAGCGATGCTCACGAAAAGGGAACGCGGCGCC' +\
    'GTCGGGCGCCGCGCGCCGCTTAGGACTGCTGGCCTGCGGCCGGCGCCTGCTTGGCGGGTT' +\
    'CCTGCTTGGCGGGCTCCTGCTTGGCGGGTTCCTGCTTGGCGGGTTCCTGCTTGGCGGGTT' +\
    'CCTGCTTGGCGGGCTGCTGCTTGGCGGGCTGCTGGGCCGGCGCCTGCTGGCCAGGAGCGG' +\
    'GCTGCTGGCCGGCAGGCGCCGCGCCCCCCTTGTTCCAGGGCGAAGCCTGCACCGGCGCCC' +\
    'CCGGACGGATCTTCTGGAAGCCTTCGACCACCACCACGTCTCCCGCCGCCAGG'

for repeat in product(*R):
    repeat = ''.join(repeat)
    matches = re.findall(repeat, F)
    if matches:
        print "The repeat '{}' is found {} time(s)".format(repeat, len(matches))

作为结果给出:

The repeat 'CTGCTTGGCGGGTTC' is found 4 time(s)
The repeat 'CTGCTTGGCGGGCTC' is found 1 time(s)
The repeat 'CTGCTTGGCGGGCTG' is found 2 time(s)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多