見出し画像

Biopython Tutorial and Cookbook 3.1[和訳]

いきなり和訳を書き始めると物々しくなるかと思い、前置きを。
この文章はPython少しだけ齧ったことあるよーという前提で書かれています。悪しからず。
頭から綺麗に理解したい方は下にある「Pythonにおけるクラス (class)とは何か」を読んでから和訳を読むと順序良く少しわかった気になれる気がします。
では、早速本題へ入ります。

第3章1節 Sequence and Alphabets

 Alphabetオブジェクトは恐らくSeqオブジェクトを単なる文字列以上にする重要なものです。現在Biopythonで用いられるアルファベットは Bio.Alphabet モジュールで定義されています。私たちは、ここでDNA, RNA, タンパクに対するお気に入りのオブジェクトを扱うために、IUPACアルファベット(http://www.sbcs.qmul.ac.uk/iupac/)を使用します。
 Bio.Alphabet.IUPACはタンパク、DNA、RNAの基本的な定義を提供しますが、加えて拡張可能性と基本定義のカスタマイズを提供します。例えば、タンパクならBasic IUPAC Protein classがあり、“U”(または“Sec”:セレノシステイン)と“O”(または“Pyl”:ピロリジン)、加えて多義的シンボルである“B”(または“Asx”:アスパラギンまたはアスパラギン酸)、“Z”(または“Glx”:グルタミンまたはグルタミン酸)、“J”(または“Xle”:ロイシンまたはイソロイシン)、“X”(または“Xxx”:未知のアミノ酸)の要素が追加された、ExtendedIUPACProtein classも用意されています。DNA用では、基本的パックであるIUPACUnamiguousDNA、多義性を提供しどんな状況にも対応可能なIUPACAmbiguousDNA、改変が許されるExtendedIUPACDNAの3つの選択肢があります。類似して、RNAはIUPACAmbiguousRNA、IUPACUnambiguousRNAが使用可能です。
 アルファベットクラスが持つ利点は二つある。まず、このアルファベットクラスはSeqオブジェクトが含む情報の種類がわかること。二つ目は、タイプチェックとして限定した情報を提供することです。
 今、私たち扱っているもののタイプがわかっているとき、このクラスがどのように使用されるのかを見てみましょう。次のようにデフォルトの一般的なアルファベットで多義性のシークエンスを作成することが出来ます。

>>> from Bio.Seq import Seq
>>> my_seq = Seq("AGTACACTGGT")
>>> my_seq
seq('AGTACACTGGT')
>>> my_seq.alphabet
Alphabet()

しかし、シークエンスオブジェクトを作成するときに、可能な場所にアルファベットを明示的に特定する必要があります。以下の場合は unambigunous DNA アルファベットオブジェクトの場合です。

>>> from Bio.Seq import Seq
>>> from Bio.Alphabet import IUPAC
>>> my_prot = Seq("AGTACACTGGT", IUPAC.unambiguous_dna)
>>> my_prot
Seq(’AGTACACTGGT’, IUPACUnambiguousDNA())
>>> my_seq.alphabet
IUPACUnambiguousDNA()

もちろんアミノ酸シークエンスも同様です。

>>> from Bio.Seq import Seq
>>> from Bio.Alphabet import IUPAC
>>> my_prot = Seq("AGTACACTGGT", IUPAC.protein)
>>> my_prot
Seq(’AGTACACTGGT’, IUPACProtein())
>>> my_prot.alphabet
IUPACProtein()

まとめ、ちょっと一呼吸

さて、わかるところをまとめると
・DNA用、RNA用、タンパク用でそれぞれ使用するクラスを明示する必要がある。
                                    ↓ここの部分
Seq("AGTACACTGGT", IUPAC.unambiguous_dna)

第一引数で""内の配列を定義、第二引数で使用するクラス (上の例ではIUPAC.unambiguous_dna)を指定。これをセットで扱うということですね。
この時、クラスを指定していないとalphabetオブジェクトを使用してなんの配列かを調べても、「Alphabet()」としか返答がないということでした。

・alphabetオブジェクトを使用することで、そのSeqオブジェクトがDNAなのかRNAなのかアミノ酸なのかがわかる。

上にも少し書きましたが、クラス指定が成功している場合は

>>> my_seq.alphabet
IUPACUnambiguousDNA()

こう表示されるということですね。DNA用の基本的なクラスを使用していることがわかります。

・それぞれにも機能の違うクラスがあり、使用用途 (Ambiguous symbolを使うか等)で選択肢を決定する。
ユニバーサルコドンを使用する生物の場合は基本的なパックを使用すればよく、ユニバーサルコドンを使用しない生物を扱う場合などは自分で適宜設定することが出来るようです。改変可能ということは非モデル生物を扱うことにも対応可能だということですね。この設定に関しては恐らく後ろの章で説明されるのでしょう。章だけに。

読んだもののPython・情報学をきちんと勉強していない私には単語がよくわからなくなってきました。
まず、最初がクラスとは何か。
次がタイプについて。これってstrとかintとかのtypeって理解だと何かおかしい。数字を使わないからstringしか無いはず。
これについて少しまとめてみます。

話は逸れますけど、表紙にnoteで公開されているjlntaさんのお写真をお借りしました。良いですよね。よくわからない話程フィーリングが重要だと思います。

Pythonにおけるクラス (class)とは何か。

まず前提として、Pythonはオブジェクト指向のインタープリタ言語だそうです。オブジェクト指向のインタープリタ言語とはより人が扱いやすい、メモリの確保など諸々の雑務を勝手にやってくれる言語らしいです。他方、コンパイラ言語であるC++の世界を少し覗いたのですが、メモリの動的確保などやらなくてはいけないことが多く、0から始めるにはちょっと敷居が高い印象。0からというか素養ないので最早 null。
さて、このオブジェクト指向のobjectとは英語そのまま「物」や「対象」という意味で、私たちがプログラミングで扱うデータや処理そのものを指す。そして、件の「クラス」とはプロパティ (属性)やメソッド (実際の処理)のことで、オブジェクトの定義や設計図のようなものと説明されているものが多かったです。以上を踏まえまして今回のような場合、

オブジェクト:配列または配列に対して行う処理
Seqオブジェクト:Seqにより定義した配列そのもの
クラス:定義された配列の情報 (その配列がアミノ酸か塩基か)

という理解で大体良さそうです。

そして、タイプって単に"どのクラスを使っているか?"って話をしているだけな気がしてきています。

またまた一呼吸

なるほど、情報学の勉強大切です。
ここまで来てもう一度和訳を読んでみると理解が深まりますね。

どうでもいい話ですけど、Pythonってダブルクォーテーション (”)とシングルクォーテーション (’)区別しないってだれか言ってませんでしたっけ?
返ってくるの全部シングルクォーテーションに変わってるじゃないですか!?
私ダブル派なのに…
ちなみにトイレットペーパーもダブルが好きです。

この内容ってどう使えるの?

現状ですと、劇的に何かがわかるようになるというものではないですね。当たり前ですが。ただ、このクラスは解析時に参照される気配がするので解析結果がおかしい場合に疑ってかかるには良い場所かと思います。

この記事が気に入ったらサポートをしてみませんか?