$30 off During Our Annual Pro Sale. View Details »
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
300
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
250
Overlap Graphs: Sequence Assembly Using Shared K-mers
nkimoto
0
170
Computing GC Content: Parsing FASTA and Analyzing Sequences
nkimoto
0
250
【第5回】ゼロから始めるゲノム解析(Python編)
nkimoto
0
570
【第3回】ゼロから始めるゲノム解析(Python編)
nkimoto
0
410
【第1回】ゼロから始めるゲノム解析(Python編).pdf
nkimoto
0
790
【第7回】ゼロから始めるゲノム解析.pdf
nkimoto
0
430
【第5回】ゼロから始めるゲノム解析(R編)
nkimoto
0
510
【第3回】ゼロから始めるゲノム解析(R編)
nkimoto
0
1.5k
Other Decks in Programming
See All in Programming
as(型アサーション)を書く前にできること
marokanatani
10
2.9k
eBPF Deep Dive: Architecture and Safety Mechanisms
takehaya
12
860
AWS Lambdaから始まった Serverlessの「熱」とキャリアパス / It started with AWS Lambda Serverless “fever” and career path
seike460
PRO
1
270
romajip: 日本の住所CSVデータを活用した英語住所変換ライブラリを作った話
sangunkang
0
2.1k
みんなでプロポーザルを書いてみた
yuriko1211
0
300
Serverless苦闘史
mosh_inc
0
120
Swift Testing - iPlayground
chiaoteni
0
120
Contemporary Test Cases
maaretp
0
150
3 Effective Rules for Using Signals in Angular
manfredsteyer
PRO
0
110
Better Code Design in PHP
afilina
PRO
0
140
Java 23の概要とJava Web Frameworkの現状 / Java 23 and Java web framework
kishida
2
340
カンファレンスの「アレ」Webでなんとかしませんか? / Conference “thing” Why don't you do something about it on the Web?
dero1to
1
150
Featured
See All Featured
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
159
15k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
25
1.8k
Docker and Python
trallard
40
3.1k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
169
50k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
33
1.9k
Music & Morning Musume
bryan
46
6.2k
Unsuck your backbone
ammeep
668
57k
A designer walks into a library…
pauljervisheath
204
24k
GraphQLとの向き合い方2022年版
quramy
43
13k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
131
33k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
356
29k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
27
2.1k
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)をコマンドラインパラメータとして渡せるようにし て下さい。