3

私はPythonにまったく慣れていないので、可能であれば助けていただければ幸いです。私は 2 つの近縁生物 [E_C & E_F] のゲノムを比較し、いくつかの基本的な挿入と削除を特定しようとしています。両方の生物の配列を使用して、FASTA ペアワイズ アラインメント (glsearch36) を実行しました。

以下は、私の python スクリプトのセクションで、1 つのシーケンス (データベース) で 7 ヌクレオチド (ヘプタマー) を特定できましたが、これは他のシーケンス (クエリ) のギャップに対応しています。これは私が持っているものの例です:

ATGCACAA-ACCTGTATG # query
ATGCAGAGGAAGAGCAAG # database
9
GAGGAAG

ギャップが 9 位にあると仮定します。スクリプトを改良して、両方の配列で 20 ヌクレオチド以上離れており、周囲のヌクレオチドも一致する場合にのみギャップを選択しようとしています。

ATGCACAAGTAAGGTTACCG-ACCTGTATGTGAACTCAACA
                 ||| |||
GTGCTCGGGTCACCTTACCGGACCGCCCAGGGCGGCCCAAG
21
CCGGACC

これは私のスクリプトのセクションで、上半分はさまざまなファイルを開く処理です。また、最後に各シーケンスのカウントを含む辞書も出力します。

list_of_positions = []

for match in re.finditer(r'(?=(%s))' % re.escape("-"), dict_seqs[E_C]): 
    list_of_positions.append(match.start())

set_of_positions = set(list_of_positions)
for position in list_of_positions:
    list_no_indels = []
    for number in range(position-20, position) :
        list_no_indels.append(number)
    for number in range(position+1, position+21) :
        list_no_indels.append(number)
    set_no_indels = set(list_no_indels)
    if len(set_no_indels.intersection(set_of_positions))> 0 : continue

    if len(set_no_indels.intersection(set_of_positions_EF))> 0 : continue


    print position 
    #print match.start()

    print dict_seqs[E_F][position -3:position +3]

    key = dict_seqs[E_F][position -3: position +3]

    if nt_dict.has_key(key):
        nt_dict[key] += 1 
    else:
        nt_dict[key] = 1


print nt_dict

基本的に、基本的な挿入/削除分析を行うために、ペアワイズ アラインメントの結果を編集して、クエリ シーケンスとデータベース シーケンスの両方でギャップの反対側のヌクレオチドを特定しようとしていました。

以前の問題の 1 つは、ノイズを減らすためにギャップ "-" 間の距離を 20 nt に増やすことで解決できました。これにより、結果が改善されました。上で編集されたスクリプト。

これは私の結果の例であり、最後に各シーケンスの出現回数をカウントする辞書があります。

ATGCACAA-ACCTGTATG # query
ATGCAGAGGAAGAGCAAG # database
9 (position on the sequence)
GAGGAA (hexamer)


ATGCACAAGACCTGTATG # query
ATGCAGAG-AAGAGCAAG # database
9 (position)
CAAGAC (hexamer)

ただし、ギャップの周りのヌクレオチドをこのように正確に一致させるスクリプトを修正しようとしています。各シーケンスで一致するntを表示するだけです:

GGTTACCG-ACCTGTATGTGAACTCAACA # query
     ||| ||
CCTTACCGGACCGCCCAGGGCGGCCCAAG # database

9
ACCGAC

これについて何か助けていただければ幸いです。

4

1 に答える 1

1

あなたがやろうとしていることは理解していると思いますが、@alko が言ったように、コード内のコメントは間違いなく大いに役立ちます。

ギャップの周りで完全に一致するものを見つけるには、文字列比較を実行できます。

次のようなもの:

if query[position -3: position] == database[position -3: position] and query[position +1: position +3] == database[position +1: position +3]:
   # Do something

「クエリ」と「データベース」を、比較したい文字列と呼んだものに置き換える必要があります。

于 2013-11-06T15:43:13.427 に答える