2本の配列を並べて比べる
ペアワイズアラインメントとは、2本の配列を縦に並べて、どこが同じでどこが違うかを調べる方法です。並べ方に点をつければ、似ている度合いを1つの数で比べられます。
このレッスンでは、点のつけ方と、いちばん高い点の探し方を学びます。配列はすべて作り話です。
このレッスンのゴール
メモ
2本の配列の並べ方に、一致、不一致、ギャップの点をつけて、スコアを求められる。
キーワード
| ことば | いみ | れい |
|---|---|---|
| アラインメント | 2本の配列を縦に並べた形 | |
| 一致 | 同じ塩基が縦に並ぶこと | A と A |
| 不一致 | 違う塩基が縦に並ぶこと | A と G |
| ギャップ | 片方にだけ入れる空白 | - |
| スコア | 並べ方の良さを表す合計点 |
学生が入力するセルは、このプレビューでは空白です。
アラインメントは1列ずつ点をつける
2本の配列を、上と下に並べます。縦の1列ごとに、一致、不一致、ギャップのどれかです。
ここでは、一致は +1 点、不一致は -1 点、ギャップは -2 点とします。全部の列の点を足した値が、スコアです。
例: GATC と GA-C のスコア
| 列 | 上 | 下 | 種類 | 点 |
|---|---|---|---|---|
| 1 | G | G | 一致 | +1 |
| 2 | A | A | 一致 | +1 |
| 3 | T | - | ギャップ | -2 |
| 4 | C | C | 一致 | +1 |
| 合計 | 1 |
学生が入力するセルは、このプレビューでは空白です。
並べ方のスコアを求める
docker exec jupyter python3 -c 'A="GATC"; B="GA-C"; print(sum([1 if p == q else -2 if "-" in (p, q) else -1 for p, q in zip(A, B)]))'ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
並べ方は何通りもある
同じ2本の配列でも、ギャップの入れ方で、並べ方は何通りにもなります。スコアが最も高い並べ方が、いちばんよいアラインメントです。
下の表は、GATC と GAC の2通りの並べ方です。1つ目のほうが、スコアが高くなります。
例: 2通りの並べ方を比べる
| 並べ方 | 上 | 下 | スコア |
|---|---|---|---|
| 1つ目 | GATC | GA-C | 1 |
| 2つ目 | GATC | G-AC | -1 |
学生が入力するセルは、このプレビューでは空白です。
よくある間違い
注意
ギャップを入れるほど、よく似た並べ方になると考えがちです。ギャップは減点です。入れすぎるとスコアは下がります。ギャップを入れてよいのは、そのぶん一致が増えるときだけです。
表を埋めると最高のスコアが分かる
並べ方を全部試すと、配列が長いとき時間がかかります。そこで、表を作って、マスを1つずつ埋めます。
各マスは、3つの方向から来る値のうち、いちばん大きい値です。左上からは一致か不一致の点、上と左からはギャップの点を足します。右下のマスが、最高のスコアです。
例: GAC と GATC の表
| 空 | G | A | T | C | |
|---|---|---|---|---|---|
| 空 | 0 | -2 | -4 | -6 | -8 |
| G | -2 | 1 | -1 | -3 | -5 |
| A | -4 | -1 | 2 | 0 | -2 |
| C | -6 | -3 | 0 | 1 | 1 |
学生が入力するセルは、このプレビューでは空白です。
1つのマスの値を決める
# 表のマス1つの値を、3つの方向から決めます。
diagonal = 0 # 左上のマスの値
above = -2 # 上のマスの値
left = 1 # 左のマスの値
match_score = 1
gap = -2
via_diagonal = diagonal + match_score
via_above = above + gap
via_left = left + gap
print("斜めから:", via_diagonal)
print("上から:", via_above)
print("左から:", via_left)
print("このマスの値:", max(via_diagonal, via_above, via_left))
# diagonal を -5 に変えて、もう一度実行してください。
# どの方向の値が選ばれますか。