2017-09-27 7 views
1

大きな配列(F)内で発生する小さなDNA配列(R)の数を検索してカウントしようとしていますが、Rには数文字変数。私が考えることができる最も簡単な方法は、Rの比率を設定し、Fの80%を超えるすべてのヒットをカウントすることですが、これを行うようなコマンド(difflibのSequenceMatcherやget_close_matchesなど)は動作するリストが必要です。私はそのようなリストにFを入れることはできません。何か案は?より大きなDNA配列内のファジー配列の出現をカウントする

EDIT 2:さらに詳しい情報が必要です。

DNA断片(F)には、設定されたリピート数(R)が存在する。 Fは353文字、1回の繰り返しは15文字です。 Rは重複しないほど明確であるため、重複は起こらない。問題は、Rが可変であり、15文字のうち2文字が変わるか同じままであることである。私はこれらのバリエーションや今後発生する可能性のあるバリエーションを検出できる必要があります。

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

働くことができない:私は、変数の文字も同様に正規表現を使用するので、どちらかの同じ位置に配置することはできませんR.におけるこれらの変動の完全な独立したデータベースを避けるためにしようとしています。

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

繰り返しがCTGCTTGGCGGGTTCだろうとDNA断片がAAAATTGCGGCATGTGGGCTGACTCTGAAAGCGATGCTCACGAAAAGGGAACGCGGCGCCGTCGGGCGCCGCGCGCCGCTTAGGACTGCTGGCCTGCGGCCGGCGCCTGCTTGGCGGGTTCCTGCTTGGCGGGCTCCTGCTTGGCGGGTTCCTGCTTGGCGGGTTCCTGCTTGGCGGGTTCCTGCTTGGCGGGCTGCTGCTTGGCGGGCTGCTGGGCCGGCGCCTGCTGGCCAGGAGCGGGCTGCTGGCCGGCAGGCGCCGCGCCCCCCTTGTTCCAGGGCGAAGCCTGCACCGGCGCCCCCGGACGGATCTTCTGGAAGCCTTCGACCACCACCACGTCTCCCGCCGCCAGGを次のようになります。また、ここdifflibを通してそれをしようとしたとき、私が使っていたものです。

反復すると、RはDNA断片中で複数回繰り返されることを意味する。

ありがとうございました。

+0

それは、あなたがしたいことは完全には明確ではありません。例を挙げてください。さらに、重複カウントなどを指定するのが良いでしょう。 –

+0

あなたは 'R'と' F'の例を貼り付けて、あなたが繰り返しとして定義するものをさらに説明できますか? – mitoRibo

+0

多分あなたはこれを見ることができます:http://biopython.org/DIST/docs/api/Bio.motifs-module.html – bli

答えて

0

ご質問には細かいところがありますので、私はいくつかの仮定をしています。

あなたは、あなただけのRの全ての可能な変形を計算し、Fのものを探すことができ、リストのリストとしてRを書き換えることができる場合:

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) 
関連する問題