モチーフは配列に何度も出る並び
モチーフとは、配列の中に何度も現れる、短い塩基の並びのことです。長さ k の部分配列を k-mer(ケーマー)と呼び、これを数えると、よく出る並びが分かります。
このレッスンでは、配列をずらしながら k-mer を取り出し、数え、位置を調べます。配列は作り話です。
このレッスンのゴール
メモ
配列から k-mer を取り出して数え、モチーフの出現位置を探せる。
キーワード
| ことば | いみ | れい |
|---|---|---|
| モチーフ | 配列に何度も出る短い並び | TGA |
| k-mer | 長さ k の部分配列 | 3-mer の ATG |
| 部分配列 | 配列から連続して取り出した一部 | |
| 出現位置 | モチーフが始まる場所の番号 | 0 から数える |
| 頻度 | ある並びが出る回数 |
学生が入力するセルは、このプレビューでは空白です。
k-mer は窓をずらして取り出す
配列の左端から k 文字を取り出し、1文字ずつ右にずらしながら、同じことをくり返します。取り出した1つ1つが k-mer です。
長さ n の配列からは、n - k + 1 個の k-mer が取り出せます。Python では、seq[i:i + k] で i 番目から k 文字を取り出します。
例: ATGATGATC の3-mer
| 始まる位置 | 取り出した3文字 |
|---|---|
| 0 | ATG |
| 1 | TGA |
| 2 | GAT |
| 3 | ATG |
| 4 | TGA |
| 5 | GAT |
| 6 | ATC |
学生が入力するセルは、このプレビューでは空白です。
3-mer を全部取り出す
docker exec jupyter python3 -c 'S="ATGATGATC"; print([S[i:i+3] for i in range(len(S) - 2)])'ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
k-mer を数えて頻度を調べる
取り出した k-mer を、種類ごとに数えます。出る回数が頻度です。多く出る k-mer は、モチーフの候補です。
数えるには、辞書を使います。k-mer がすでにあれば1を足し、なければ1を入れます。
例: 数えた結果
| 3-mer | 回数 | 始まる位置 |
|---|---|---|
| ATG | 2 | 0 と 3 |
| TGA | 2 | 1 と 4 |
| GAT | 2 | 2 と 5 |
| ATC | 1 | 6 |
学生が入力するセルは、このプレビューでは空白です。
多い3-mer を2つ調べる
docker exec jupyter python3 -c 'from collections import Counter; S="ATGATGATC"; print(Counter([S[i:i+3] for i in range(len(S) - 2)]).most_common(2))'ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
モチーフの出現位置を探す
同じ窓のずらし方で、モチーフと同じ並びを探すと、始まる位置が分かります。位置は 0 から数えます。
配列が長いほど、手では探せません。位置を並べたリストを作れば、どこに集まっているかも見えます。
モチーフの位置を探すコード
# 配列の中で、モチーフが始まる位置をすべて探します。
dna = "TTGATTGACTTGA"
motif = "TGA"
starts = []
for position in range(len(dna) - len(motif) + 1):
piece = dna[position:position + len(motif)]
if piece == motif:
starts.append(position)
print("始まる位置:", starts)
print("回数:", len(starts))
# motif を TT に変えて、もう一度実行してください。
# 位置はいくつ見つかりますか。
文字列の count は重なりを数えない
docker exec jupyter python3 -c 'print("AAAA".count("AA"))'ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
よくある間違い
注意
count で、モチーフの出現がすべて数えられると考えがちです。count は重なりを数えません。AAAA の中の AA は、位置 0、1、2 の3か所ですが、count は 2 を返します。重なりも数えるには、1文字ずつずらして調べます。