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
Location Restriction Sites: Using, Testing, and...
Search
nkimoto
March 04, 2022
Programming
0
320
Location Restriction Sites: Using, Testing, and Sharing Code
2022/03/04 (金) 【第13回】ゼロから始めるゲノム解析(Python編) 資料
nkimoto
March 04, 2022
Tweet
Share
More Decks by nkimoto
See All by nkimoto
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
270
【第5回】ゼロから始めるゲノム解析(Python編)
nkimoto
0
640
【第3回】ゼロから始めるゲノム解析(Python編)
nkimoto
0
420
【第1回】ゼロから始めるゲノム解析(Python編).pdf
nkimoto
0
830
【第7回】ゼロから始めるゲノム解析.pdf
nkimoto
0
450
【第5回】ゼロから始めるゲノム解析(R編)
nkimoto
0
550
【第3回】ゼロから始めるゲノム解析(R編)
nkimoto
0
1.6k
Other Decks in Programming
See All in Programming
GoのWebAssembly活用パターン紹介
syumai
3
10k
型付きアクターモデルがもたらす分散シミュレーションの未来
piyo7
0
770
List Unfolding - 'unfold' as the Computational Dual of 'fold', and how 'unfold' relates to 'iterate'"
philipschwarz
PRO
0
190
Practical Tips and Tricks for Working with Compose Multiplatform Previews (mDevCamp 2025)
stewemetal
0
120
「兵法」から見る質とスピード
ickx
0
260
GoのGenericsによるslice操作との付き合い方
syumai
2
560
単体テストの始め方/作り方
toms74209200
0
440
レガシーシステムの機能調査・開発におけるAI利活用
takuya_ohtonari
0
590
DroidKnights 2025 - 다양한 스크롤 뷰에서의 영상 재생
gaeun5744
2
140
Haskell でアルゴリズムを抽象化する / 関数型言語で競技プログラミング
naoya
17
4.3k
SODA - FACT BOOK
sodainc
1
850
RubyKaigiで得られる10の価値 〜Ruby話を聞くことだけが RubyKaigiじゃない〜
tomohiko9090
0
140
Featured
See All Featured
Building Applications with DynamoDB
mza
95
6.4k
Speed Design
sergeychernyshev
31
990
Agile that works and the tools we love
rasmusluckow
329
21k
Building Flexible Design Systems
yeseniaperezcruz
328
39k
Art, The Web, and Tiny UX
lynnandtonic
299
21k
Designing Experiences People Love
moore
142
24k
jQuery: Nuts, Bolts and Bling
dougneiner
63
7.8k
Rails Girls Zürich Keynote
gr2m
94
14k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
29
9.5k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
10
900
Faster Mobile Websites
deanohume
307
31k
Stop Working from a Prison Cell
hatefulcrawdad
269
20k
Transcript
【第13回】ゼロから始めるゲノム解析 (Python編) Location Restriction Sites: Using, Testing, and Sharing Code
@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
本日のお題 4~12の長さを持つすべての回文配列の位置と長さを出力せよ https://rosalind.info/problems/revp/
• 回文配列を見つける方法 • 汎用的な関数をシェアするためのモジュールの作成方法 • PYTHONPATH環境変数について 本日学ぶこと
前提知識編
回文配列 https://en.wikipedia.org/wiki/Palindromic_sequence 回文配列とは、二本鎖DNA分子またはRNA分子内の核酸配列であり、片方の一本鎖における特定の方向での塩 基配列の読み取りが、もう片方の相補鎖における同じ方向での読み取りと一致する配列 AGATTCGAATCT TCTAAGCTTAGA 1. Complement 2. Reverse
Complement 5’ 3’ 3’ 5’ >>> from Bio import Seq >>> seq = 'GCATGC' >>> Seq.reverse_complement(seq) == seq True
回文配列は制限酵素の認識領域 https://en.wikipedia.org/wiki/Palindromic_sequence 制限酵素は制限部位として知られるDNAの特定の回文配列を認識し、その中で切断することが知られている 制限酵素はもともとバクテリアが ファージなどの感染から自身を 守るために外来DNAを切断する 役割
問題のIN/OUT TCAATGCATGCGGGTCTATATGCAT $ ./revp.py tests/inputs/1.fa 5 4 7 4 17
4 18 4 21 4 4 6 6 6 20 6 与えられた配列に含まれている回文配列の位置と長さを出力することが求められている
(振り返り)k-merの抽出 配列から全てのk-mer(k文字の部分配列)を抽出する関数は以下のように書ける >>> def find_kmers(seq, k): ... n = len(seq)
- k + 1 ... return [] if n < 1 else [seq[i:i + k] for i in range(n)] ...
部分配列を抽出 find_kmers関数を使うと、指定したkの範囲それぞれについて部分配列を抽出できる # k=4~k=12のkmerがいくつ含まれているか出力 >>> for k in range(4, 13):
... print(k, len(find_kmers(seq, k))) ... 4 22 5 21 6 20 7 19 8 18 9 17 10 16 11 15 12 14
部分配列の逆相補鎖配列を抽出 取得した部分配列に対してreverse_complementメソッドを適用することで逆相補鎖配列を抽出する # find_kmersは文字列のリストで返す >>> kmers = find_kmers(seq, 12) >>>
kmers ['TCAATGCATGCG', 'CAATGCATGCGG', 'AATGCATGCGGG', 'ATGCATGCGGGT', 'TGCATGCGGGTC', 'GCATGCGGGTCT', 'CATGCGGGTCTA', 'ATGCGGGTCTAT', 'TGCGGGTCTATA', 'GCGGGTCTATAT', 'CGGGTCTATATG', 'GGGTCTATATGC', 'GGTCTATATGCA', 'GTCTATATGCAT'] # map関数で全ての要素に関数を適用 >>> revc = list(map(Seq.reverse_complement, kmers))
モジュールの活用 再利用可能な処理に関しては、関数化して分離しておく。 使用する際は 「from ファイル名 import 関数名」のように使う >>> from common
import find_kmers >>> kmers = find_kmers(seq, 12) >>> kmers ['TCAATGCATGCG', 'CAATGCATGCGG', 'AATGCATGCGGG', 'ATGCATGCGGGT', 'TGCATGCGGGTC', 'GCATGCGGGTCT', 'CATGCGGGTCTA', 'ATGCGGGTCTAT', 'TGCGGGTCTATA', 'GCGGGTCTATAT', 'CGGGTCTATATG', 'GGGTCTATATGC', 'GGTCTATATGCA', 'GTCTATATGCAT'] common.py
モジュールの呼び先 - PYTHONPATH 環境変数PYTHONPATHに検索対象のパスを指定することで、デフォルトの検索パスに加えて指定したパスを検索 するように変更することができる # 例:$HOME/.local/binを追加 (bash) $ export
PYTHONPATH="$HOME/.local/bin:$PYTHONPATH" https://docs.python.org/ja/3/using/cmdline.html#envvar-PYTHONPATH
解法編
解法1zip()関数とenumerate()関数を使用 1 指定した範囲の部分配列を抽出 1 2 部分配列を逆相補鎖に変換 2 3 部分配列とその逆相補鎖が一致して いれば出力
3
解法 2 .eq()関数を使用 1 指定した範囲の部分配列を抽出 1 2 部分配列を逆相補鎖に変換 2 3
部分配列とその逆相補鎖が一致して いれば出力 3
解法 3 revp()関数を作成する 1 与えられた文字列からk文字の回文配 列を抽出する関数を作成 2 指定したkの範囲で回文配列の検索を 行い出力 2
1
追加課題 プログラムを拡張して探索する回文配列の長さ( k)をコマンドラインパラメータとして渡せるようにし て下さい。