1.4. バイオ編#

数字問題を淡々とこなしてきたネコに、今度はバイオインフォマティクスの世界をのぞかせてみましょう。数字の世界では、どんな誤りも、せいぜいバグとして笑って済ませられました。けれど核酸配列の世界では、一文字の狂いが、物語を終わらせてしまいます。本節では、そんな冷酷な暗号を題材に、Scratch で小さな実験を試みます。

1.4.1. 塩基の出現頻度#

A、C、G、T からなる塩基配列に対して、ある塩基の出現確率を求める Scratch プログラムを作ってみましょう。たとえば、「AACGCT」という配列の中に、C がどれくらいの割合で現れるかを計算します。

まずは、塩基配列や計算結果を保存するための変数を用意します。

  • dna: 塩基配列を保存するリストです。ここには、A、A、C、G、C、T のように 6 つの塩基を追加しておきます。

  • i: 現在、リストのどの位置を処理しているかを記録するための変数です。

  • nC: C が何回出現したかを数えるための変数です。

  • pC: 計算された C の出現確率を保存するための変数です。

基本的な考え方は、繰り返し処理を使って、リスト dna の各要素を 1 つずつ調べていき、もしその要素が C だったら nC に 1 を加えていく、というものです。最後に、C の出現回数 nCdna の長さで割れば、C の出現確率が求まります。

まず、inC を 0 に初期化します。その後、繰り返しブロックを使って、リスト dna の長さ分だけ処理を繰り返します。繰り返しのたびに、i の値を 1 ずつ増やしていきましょう。

文字が C かどうかの判定には、もし<>ならブロックを使います。<>の部分には、演算カテゴリーにある = ブロックをはめ込み、左側には dna i 番目 ブロックを、右側には C を入力します。条件が真であれば、nC nC + 1 にする ブロックをその内側に置きます。

すべての繰り返しが終わったあとに、pC nC / dna の長さ にする ブロックで確率を計算し、最後に pC を言う ブロックをつければ、プログラムの完成です。試しに実行して、正しく確率が表示されるか確かめてみましょう。

../_images/scratch-b01-001.png

練習問題 SB3-B1

塩基配列が与えられたとき、その GC 含量を求める Scratch プログラムを作成してください。GC 含量とは、塩基配列の中に含まれる G と C の出現割合を合わせたものです。

1.4.2. 相補鎖変換#

与えられた塩基配列の相補鎖を作成するプログラムを考えてみましょう。たとえば、TTAGGG という配列が与えられたとき、相補鎖である AATCCC を出力するプログラムです。

プログラムを組む前に、以下の変数やリストを準備します。

  • dna: 入力となる塩基配列を保存するリストです。ここには、T、T、A、G、G、G などの塩基を順番に追加しておきます。

  • cdna: 相補鎖を保存するためのリストです。リストを作成し、データを追加しません。

  • i: 現在処理している dna 位置を記録するための変数です。

基本的な考え方としては、dna リストに入っている塩基を 1 つずつ調べ、それに対応する相補塩基を cdna に追加していくという流れです。具体的には、A → T、T → A、C → G、G → C のように置き換えます。これらの処理はすべて、繰り返しブロックと条件分岐ブロックを組み合わせて実現できますが、処理が長くなるため、「ブロック定義」を使ってまとめてしまいましょう。

ここで、相補鎖を求めるブロックの定義します。ブロック定義カテゴリーにある「ブロックを作る」をクリックします。ブロック名を相補鎖に変更し、左下の「引数を追加」をクリックします。表示された number or text入力塩基に変更してください。続けて、「OK」をクリックして作成を完了します。

スクリプトエリアには、相補鎖の定義ブロックが表示されます。このブロックに繋げる形で、もし 入力塩基 = A ならT cdna に追加する のような処理を加えていきます。同様に、T のときは A、C のときは G、G のときは C を cdna に追加するように設定します。このようにして完成した相補鎖ブロックは、1 文字を入力されると、その相補となる文字を cdna に追加する、という動作をするようになります。

../_images/scratch-b02-001.png

ここまでの処理を終えたら、次に dna のすべての要素に対してこの相補鎖ブロックを適用する主処理部分を作成します。まず、開始時に i0 に初期化します。次に、dna の長さだけ繰り返すブロックを作成し、その内部で i を 1 ずつ増やしながら、毎回 dna i 番目の文字を相補鎖ブロックに渡します。すべての塩基に対して処理を行い終わったら、最後にcdna を言うブロックを使って、ネコに相補鎖の結果を表示させます。

../_images/scratch-b02-002.png

このプログラムを実行すると、ネコが正しく相補鎖を読み上げるようになります。ただし、注意点として、開始ボタンを何度も押すと cdna にデータが追加され続けて、表示される内容がどんどん長くなってしまいます。これは、cdna の初期化処理が抜けているためで、前回のデータがそのまま残ってしまうからです。

テロメアを延ばし続ければ細胞は死ななくなりますが、プログラムは不具合になります。腫瘍化する前に、cdna を空にしておきましょう。

練習問題 SB3-B2

塩基配列が与えられたとき、その逆相補鎖を求めるプログラムを作成しなさい。 逆相補鎖とは、まず与えられた塩基配列の相補鎖を求め、その結果を逆向きに並べたものです。 たとえば、塩基配列が TTAGGG の場合、相補鎖は AATCCC となり、逆相補鎖は CCCTAA になります。

ブロックをいくつも積み重ね、ついにネコが語りはじめる。それが Scratch の詩情なのかもしれません。けれども、「そろそろこのネコ、黙ってくれないかな」と思ったとき、それはきっと Python という言語との出会いのときです。