Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
【第5回】ゼロから始めるゲノム解析(Python編)
Search
nkimoto
December 23, 2021
Technology
0
660
【第5回】ゼロから始めるゲノム解析(Python編)
2021/12/23 (木) 【第5回】ゼロから始めるゲノム解析(Python編) 資料
nkimoto
December 23, 2021
Tweet
Share
More Decks by nkimoto
See All by nkimoto
Location Restriction Sites: Using, Testing, and Sharing Code
nkimoto
0
320
Finding a Protein Motif: Fetching Data and Using Regular Expressions
nkimoto
0
290
Overlap Graphs: Sequence Assembly Using Shared K-mers
nkimoto
0
190
Computing GC Content: Parsing FASTA and Analyzing Sequences
nkimoto
0
280
【第3回】ゼロから始めるゲノム解析(Python編)
nkimoto
0
420
【第1回】ゼロから始めるゲノム解析(Python編).pdf
nkimoto
0
840
【第7回】ゼロから始めるゲノム解析.pdf
nkimoto
0
450
【第5回】ゼロから始めるゲノム解析(R編)
nkimoto
0
560
【第3回】ゼロから始めるゲノム解析(R編)
nkimoto
0
1.6k
Other Decks in Technology
See All in Technology
Claude Codeが働くAI中心の業務システム構築の挑戦―AIエージェント中心の働き方を目指して
os1ma
9
1.1k
[TechNight #91] Oracle Database 最新パフォーマンス分析手法
oracle4engineer
PRO
4
300
製造業の課題解決に向けた機械学習の活用と、製造業特化LLM開発への挑戦
knt44kw
0
110
FAST導入1年間のふりかえり〜現実を直視し、さらなる進化を求めて〜 / Review of the first year of FAST implementation
wooootack
1
220
猫でもわかるQ_CLI(CDK開発編)+ちょっとだけKiro
kentapapa
0
150
激動の時代、新卒エンジニアはAIツールにどう向き合うか。 [LayerX Bet AI Day Countdown LT Day1 ツールの選択]
tak848
0
620
Datasets for Critical Operations by Dataform
kimujun
0
130
Unson OS|48時間で「売れるか」を判定する AI 市場検証プラットフォーム
unson
0
150
AIに全任せしないコーディングとマネジメント思考
kikuchikakeru
0
310
AWS表彰プログラムとキャリアについて
naoki_0531
1
150
【CEDEC2025】『ウマ娘 プリティーダービー』における映像制作のさらなる高品質化へ!~ 豊富な素材出力と制作フローの改善を実現するツールについて~
cygames
PRO
0
100
AI エンジニアの立場からみた、AI コーディング時代の開発の品質向上の取り組みと妄想
soh9834
8
620
Featured
See All Featured
Typedesign – Prime Four
hannesfritz
42
2.7k
Raft: Consensus for Rubyists
vanstee
140
7k
How GitHub (no longer) Works
holman
314
140k
Code Reviewing Like a Champion
maltzj
524
40k
Learning to Love Humans: Emotional Interface Design
aarron
273
40k
Art, The Web, and Tiny UX
lynnandtonic
301
21k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
18
1k
4 Signs Your Business is Dying
shpigford
184
22k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
656
60k
Rails Girls Zürich Keynote
gr2m
95
14k
Six Lessons from altMBA
skipperchong
28
3.9k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
33
2.4k
Transcript
【第5回】ゼロから始めるゲノム解析 (Python編) Computing GC Content: Parsing FASTA and Analyzing Sequences
@kimoton
本勉強会の概要・目的 書籍名 対象者/目的 Mastering Python for Bioinformatics Python・バイオインフォ知識ほぼゼロの人 を対象に、正しいPythonのコーディング手 法について学ぶ
頻度 毎週〜隔週開催予定 登壇者 募集中!
Rosalindとは • 問題解決を通じてバイオインフォマティク ス、プログラミング、およびアルゴリズムを 学習するためのプラットフォーム • 大学やハッカソン、就職の面接にも 600回 以上の採用実績あり 参考:https://qiita.com/_kimoton/items/d534d0fa9b83dd7dc412
概要
環境構築 - 必要パッケージ群のインストール # 公開されているレポジトリからファイル群を取得 $ git clone https://github.com/kyclark/biofx_python $
cd biofx_python # requirements.txt に記載のパッケージをインストール $ pip3 install -r requirements.txt # pylintの設定ファイルをホームディレクトリに移動 $ cp pylintrc ~/.pylintrc # mypyの設定ファイルをホームディレクトリに移動 $ cp mypy.ini ~/.mypy.ini
本日のお題 GC含量(%)を計算せよ https://rosalind.info/problems/gc/
本日学ぶこと • Bio.Seqモジュールを用いたFASTAファイルのパースの仕方 • 標準入力の受け取り方 • formatメソッドを用いた文字列フォーマットの仕方 • リスト内包表記、filter()関数、map()関数を用いたforループの書き換 え
• 正規表現を用いた文字列内のパターンカウント
前提知識編
ファイル入力の渡し方 読み取り可能なファイルを入力としたい場合、argparseではtypeで指定する。 これを指定すると、読み取り不可能なを入力とした際にエラーで弾くことができる def get_args() -> Args: """ Get command-line
arguments """ parser = argparse.ArgumentParser( description='Compute GC content', formatter_class=argparse.ArgumentDefaultsHelpFormatter) parser.add_argument('file', metavar='FILE', type=argparse.FileType('rt'), nargs='?', default=sys.stdin, help='Input sequence file') args = parser.parse_args() return Args(args.file)
FASTAファイル 今回の入力フォーマットはFASTAファイルとなっている。 「>」から始まる配列IDと複数行の配列情報から構成される。 $ cat tests/inputs/1.fa >Rosalind_6404 CCTGCGGAAGATCGGCACTAGAATAGCCAGAACCGTTTCTCTGAGGCTTCCGGCCTTCCC TCCCACTAATAATTCTGAGG >Rosalind_5959
CCATCGGTAGCGCATCCTTAGTCCAATTAAGTCCCTATCCAGGCGCTCCGCCGAAGGTCT ATATCCATTTGTCAGCAGACACGC >Rosalind_0808 CCACCCTCGTGGTATGGCTAGGCATTCAGGAACCGGAGAACGCTTCAGACCAGCCCGGAC TGGGAACCTGCGGGCAGTAGGTGGAAT
Bio.SeqIOモジュールを使った配列解析 SeqIOモジュールを使うとバイオ系のフォーマットを適切に扱うことができる >>> from Bio import SeqIO >>> recs =
SeqIO.parse('tests/inputs/1.fa', 'fasta') >>> type(recs) <class 'Bio.SeqIO.FastaIO.FastaIterator'> >>> rec = next(recs) >>> type(rec) <class 'Bio.SeqRecord.SeqRecord'> 1 1 第1引数にファイル名、第2引数にファイルのフォーマットを指定する 2 返り値はイテレータとなっている 2 3 3 イテレータの中身はSeqRecordクラスのオブジェクトが格納されている
SeqRecordクラス SeqIOモジュールで読み取ったデータはSeqRecordクラスのオブジェクトとして扱う >>> rec SeqRecord( seq=Seq('CCTGCGGAAGATCGGCACTAGAATAGCCAGAACCGTTTCTCTGAGGCTTCCGGC...AGG'), id='Rosalind_6404', name='Rosalind_6404', description='Rosalind_6404', dbxrefs=[]
) 1 1 seq属性には、FASTAファイルに含まれていた配列のSeqオブジェクトが格納され ている 2 id属性には、FASTAファイルに含まれていた配列IDが格納される 2 3 他にもnameやdescriptionといった情報が格納できる。 3
SeqRecordクラスからの配列情報の取り出し 配列情報は.seq属性に含まれている。 Seqオブジェクトとして扱うと配列に係わる様々な便利なモジュールが使える。 # 配列情報の取り出し >>> rec.seq Seq('CCTGCGGAAGATCGGCACTAGAATAGCCAGAACCGTTTCTCTGAGGCTTCCGGC...AGG') # 相補鎖配列を使用する場合は
reverse_complement メソッドを使う(第3回の内容) >>> rec.seq.reverse_complement() Seq('CCTCAGAATTATTAGTGGGAGGGAAGGCCGGAAGCCTCAGAGAAACGGTTCTGG...AGG') 参考:https://biopython.org/docs/1.75/api/Bio.Seq.html
SeqIOモジュールを使ったループ処理 SeqIO.parseで読み取ったオブジェクトはイテレータなのでforループで逐次的に値を取り出せる >>> recs = SeqIO.parse('tests/inputs/1.fa', 'fasta') >>> for rec
in recs: ... print(rec.id, rec.seq[:10]) ... Rosalind_6404 CCTGCGGAAG Rosalind_5959 CCATCGGTAG Rosalind_0808 CCACCCTCGT # イテレータが値を出し尽くすと、中身は空 >>> for rec in recs: ... print(rec.id, rec.seq[:10]) ...
GC含量(個数)の算出 純粋にGC含量(個数)をカウントする場合以下のように実装すればよい seq = 'CCACCCTCGTGGTATGGCT' gc = 0 for base
in seq: if base in ('G', 'C'): gc += 1 1 1 GC含量を格納する変数を0で初期化 2 seqに格納された文字列 をイテレーション 3 ループしている文字列がGまたはCのいずれかであればカウントアップ 2 3
formatメソッドを用いた文字列フォーマット # formatメソッドを使う場合 >>> '{:0.6f}'.format(gc * 100 / len(seq)) '63.157895'
# f文字列を使う場合 >>> f'{gc * 100 / len(seq):0.6f}' '63.157895' foramtメソッドやf文字列を使用すると、 {}をプレースホルダーとして使用することで変数を文字列 に埋め込める。また、「 :」の後に表示したい任意の桁数を指定することができる。
解法編
解法1~3 demo 解法1 1. 配列IDごとにループし、GC含量とIDをセットにしたタプルを作成 2. 最大のGC含量を持つタプルを max()関数で取得し、f文字列で必要な情報 を出力 解法2
解法1を以下によって改善 1. 名前付きタプルを使用 2. テストを実装 解法3 解法2を以下によって改善(メモリ効率) 1. GC含量最大のデータのみを保持するようにループを回す
解法4~8 demo 解法4 ループをリスト内包表記に書き換え 解法5 ループをfilter()関数を使って書き換え 解法6 ループをmap()関数を使って書き換え 解法7 正規表現を使った検索の実装&処理の関数化
解法8 単体テストを実装