![見出し画像](https://assets.st-note.com/production/uploads/images/15449903/rectangle_large_type_2_4e7d9edaf8b877daeb223e5d9745dbcc.png?width=1200)
Biopython Tutorial and Cookbook 3.3[和訳]
ここ最近リアルでドタバタしていたため、更新に間が空いてしまいました。どんなに遅くても一週間に一項目は投稿したいな、いやするんだよ
と、心意気を新たにしたところで本題へ入っていきましょう。
前回使用したペンギンの写真が気に入ったので今後これで行きます。
ぺんぺん
第3章3節 Slicing a sequence
更に複雑な例として、配列のスライスを得てみましょう。
>>> from Bio.Seq import Seq
>>> from Bio.Alphabet import IUPAC
>>> my_seq = Seq("GATCGATGGGCCTATATAGGATCGAAAATCGC", IUPAC.unambiguous_dna)
>>> my_seq[4:12]
Seq(’GATGGGCC’, IUPACUnambiguousDNA())
注意すべき興味深いことが二つあります。最初に、Pythonの通常の挙動に従うこと。要素の最初は0であること(コンピュータサイエンスでは常識でも、生物学ではそうではない)。最初の要素を含め (この場合では4)、最後の要素を除外(この場合では12)したスライスを実行する方法は 、Pythonでの挙動であり世界中の誰もが期待する方法ではないでしょう。主な目標はPythonの機能と一致することです。
二つ目は、スライスはシーケンスデータで行われるが、作成された新たなオブジェクトは元のSeqオブジェクトからのアルファベット情報を保持する別のSeqオブジェクトとなることです。
Pythonの文字列のように、スライスをスタート、ストップ、ストライド (ステップサイズ、デフォルトでは1に設定)で扱えます。例えば、このDNA配列の1,2,3番目のコドンの位置を取得するとき
>>> my_seq[0::3]
Seq('GCTGTAGTAAG', IUPACUnambiguousDNA())
>>> my_seq[1::3]
Seq('AGGCATGCATC', IUPACUnambiguousDNA())
>>> my_seq[2::3]
Seq('TAGCTAAGAC', IUPACUnambiguousDNA())
他のストライドとしては、文字列を逆転する-1のストライドの使用がある。
>>> my_seq[::-1]
Seq('CGCTAAAAGCTAGGATATATCCGGGTAGCTAG', IUPACUnambiguousDNA())
今回のまとめ
さて…
以前Pythonの挙動について書いてると趣旨を外れるので解説しないと言った誰かの頭を叩きたいですね。Pythonの文字列の扱い方がわからない私のために下に調べながらまとめようと思います。
Pythonにおけるstringの扱い
基本から列挙していきます。
・最初の一文字は0に対応する。
・"-n"で後ろからn番目を表現できる (最後尾は-1)。
・[n]でn番目の文字を抜き出す。
・[n:m]でn番目からm番目までの文字列を抜き出す。
>>> from Bio.Seq import Seq
>>> myseq = Seq("ABCDEFGHIJKLMNOPQRSTUVWXYZ")
>>> myseq[4:12]
Seq('EFGHIJKL')
>>> myseq[-22:-14]
Seq('EFGHIJKL')
・[n::m]でn番目開始のm個毎にピックアップ
>>> myseq[0::2]
Seq('ACEGIKMOQSUWY')
なるほど、だからこれを使ってコドンの情報を取得してたんですね。
ちょっと試しに…
出来心で順序逆にしてみました。
>>> myseq[12:4]
Seq('')
>>> myseq[-14:-22]
Seq('')
必ず0番目側から指定しないと空になるようです。
おわりに
というわけで以上、Pythonにおける文字列の扱い方でした。
Cookbookのこの節に出ている方法だけまとめたので、今後使えそうな扱い方がわかり次第追記していこうと思います。
それはそうと、最近パソコンちゃんのご機嫌が悪いようです。
具体的には特定のディレクトリに移動して ls で中を見ようとするとInput/output error を吐くんですよね。OS載ってるドライブなんだけどこれまずいんじゃないかなぁ…
保証がギリギリ切れてるしもう泣きっ面に蜂です…
この記事が気に入ったらサポートをしてみませんか?