shell-vs-genome

 shell-vs-genome

シェル芸でヒトゲノムを構築する

991f3366d9cc17386e6a66ef4abc6dbc?s=128

Tazro Inutano Ohta

October 18, 2017
Tweet

Transcript

  1. tw: inut, gh: inutano

  2. 宣伝: 国内版バイオハッカソン BH17.11 http://wiki.lifesciencedb.jp/mw/BH17.11 11/26 ‑ 12/1 @ 熊本県熊本市 菊南温泉ユウベルホテル

  3. pfastq‑dump github.com/inutano/pfastq‑dump 鈍足fastq‑dump をspot 指定で部分展開 + 並列実行 pure bash

  4. Bioinformatics シェル芸

  5. Bioinformatics 1. 生命科学の問題を解くための情報科学の道具を作る 2. 情報科学の道具を使って生命科学の問題を解く シェル芸はこっち

  6. ゲノム科学 シェル芸 ゲノム: 生物のソー スコー ド ゲノム情報はどのように生物の機能をコー ドしているか? ゲノム多型 遺伝子発現

    遺伝子発現制御 etc. 何ができればゲノムを理解したと言えるのか 任意の表現型を示す生物のゲノムを設計する
  7. シェル芸でヒトゲノムを構築する

  8. FASTQ を生成するワンライナー R E A D L E N G

    T H = 1 0 0 s e q 4 0 0 0 0 0 0 0 0 | a w k - v r l e n g t h = " $ { R E A D L E N G T H } " ' B E G I N { b a s e [ 0 ] = " A " ; b a s e [ 1 ] = " T " ; b a s e [ 2 ] = " G " ; b a s e [ 3 ] = " C " ; } N R % 4 = = 1 { p r i n t " @ r e a d . " i n t ( N R / 4 ) + 1 } N R % 4 = = 2 { s e q = " " ; f o r ( i = 1 ; i < r l e n g t h ; i + + ) { s e q = s e q s p r i n t f ( " % c " , b a s e [ i n t ( r a n d ( ) * 1 0 0 % 4 ) ] ) } ; p r i n t s e q } N R % 4 = = 3 { p r i n t " + " } N R % 4 = = 0 { q l = " " ; f o r ( i = 1 ; i < r l e n g t h ; i + + ) { q l = q l s p r i n t f ( " % c " , s u b s t r ( r a n d ( ) , 3 ) % 9 3 + 3 3 ) } ; p r i n t q l } ' 好きな数だけリー ド吐いてくれるので便利 これをリファレンスにマップできたらヒトゲノム出来たことにする
  9. The Infinite Monkey Theorem ランダムな文字列を生成し続ければいつかは任意の文章を生成できる

  10. 無限にFASTQ を生成する R E A D L E N G

    T H = 1 0 0 y e s | a w k - v r l e n g t h = " $ { R E A D L E N G T H } " ' B E G I N { b a s e [ 0 ] = " A " ; b a s e [ 1 ] = " T " ; b a s e [ 2 ] = " G " ; b a s e [ 3 ] = " C " ; } N R % 4 = = 1 { p r i n t " @ r e a d . " i n t ( N R / 4 ) + 1 } N R % 4 = = 2 { s e q = " " ; f o r ( i = 1 ; i < r l e n g t h ; i + + ) { s e q = s e q s p r i n t f ( " % c " , b a s e [ i n t ( r a n d ( ) * 1 0 0 % 4 ) ] ) } ; p r i n t s e q } N R % 4 = = 3 { p r i n t " + " } N R % 4 = = 0 { q l = " " ; f o r ( i = 1 ; i < r l e n g t h ; i + + ) { q l = q l s p r i n t f ( " % c " , s u b s t r ( r a n d ( ) , 3 ) % 9 3 + 3 3 ) } ; p r i n t q l } ' hashtag: #yes
  11. 無限に生成されるFASTQ を延々 とmap する R E A D L E

    N G T H = 1 0 0 y e s | a w k - v r l e n g t h = " $ { R E A D L E N G T H } " ' B E G I N { b a s e [ 0 ] = " A " ; b a s e [ 1 ] = " T " ; b a s e [ 2 ] = " G " ; b a s e [ 3 ] = " C " ; } N R % 4 = = 1 { p r i n t " @ r e a d . " i n t ( N R / 4 ) + 1 } N R % 4 = = 2 { s e q = " " ; f o r ( i = 1 ; i < r l e n g t h ; i + + ) { s e q = s e q s p r i n t f ( " % c " , b a s e [ i n t ( r a n d ( ) * 1 0 0 % 4 ) ] ) } ; p r i n t s e q } N R % 4 = = 3 { p r i n t " + " } N R % 4 = = 0 { q l = " " ; f o r ( i = 1 ; i < r l e n g t h ; i + + ) { q l = q l s p r i n t f ( " % c " , s u b s t r ( r a n d ( ) , 3 ) % 9 3 + 3 3 ) } ; p r i n t q l } ' | b w a m e m g e n o m e . f a - > o n e l i n e h u m a n . s a m 永遠に結果が返ってこないので生成できたかどうか分からない
  12. 無限にFASTQ をmap しつつdepth をカウント し続ける そのうちヒトゲノムが完成します 待っている間に研究をしましょう R E A

    D L E N G T H = 1 0 0 y e s | a w k - v r l e n g t h = " $ { R E A D L E N G T H } " ' B E G I N { b a s e [ 0 ] = " A " ; b a s e [ | a w k ' N R % 4 ! = 0 { p r i n t f $ 0 " \ t " } N R % 4 = = 0 { p r i n t $ 0 } ' \ \ | w h i l e r e a d s e q ; d o b w a m e m g e n o m e . f a < ( e c h o $ s e q | t r ' \ t ' ' \ n ' ) \ | s a m t o o l s v i e w - b - \ > $ ( e c h o $ s e q | a w k ' { s u b ( " @ " , " " ) ; p r i n t $ 1 } ' ) . b a m s a m t o o l s c a t * b a m | s a m t o o l s s o r t \ | s a m t o o l s d e p t h - a - \ | a w k ' { s u m + = $ 3 } E N D { p r i n t s u m / N R } ' d o n e
  13. 寒い冬に暖を取るためのバイオワンライナー for シェル芸勉強会 meets バイオインフォマティクス vol.1, 2017/10/18 Tazro Ohta /

    @inutano
  14. おまけ: コピペ用一行野郎 R E A D L E N G

    T H = 1 0 0 ; y e s | a w k - v r l e n g t h = " $ { R E A D L E N G T H } " ' B E G I N { b a s e [ 0 ] = " A " ; b a s e [ 1 ] = " T " ; b a s e [ 2 ] = " G " ; b a s e [ 3 ] = " C " } N R % 4 = = 1 { p r i n t " @ r e a d . " i n t ( N R / 4 ) + 1 } N R % 4 = = 2 { s e q = " " ; f o r ( i = 1 ; i < r l e n g t h ; i + + ) { s e q = s e q s p r i n t f ( " % c " , b a s e [ i n t ( r a n d ( ) * 1 0 0 % 4 ) ] ) } ; p r i n t s e q } N R % 4 = = 3 { p r i n t " + " } N R % 4 = = 0 { q l = " " ; f o r ( i = 1 ; i < r l e n g t h ; i + + ) { q l = q l s p r i n t f ( " % c " , s u b s t r ( r a n d ( ) , 3 ) % 9 3 + 3 3 ) } ; p r i n t q l } ' | a w k ' N R % 4 ! = 0 { p r i n t f $ 0 " \ t " } N R % 4 = = 0 { p r i n t $ 0 } ' | w h i l e r e a d s e q ; d o b w a m e m g e n o m e . f a < ( e c h o $ s e q | t r ' \ t ' ' \ n ' ) | s a m t o o l s v i e w - b - > $ ( e c h o $ s e q | a w k ' { s u b ( " @ " , " " ) ; p r i n t $ 1 } ' ) . b a m ; s a m t o o l s c a t * b a m | s a m t o o l s s o r t | s a m t o o l s d e p t h - a - | a w k ' { s u m + = $ 3 } E N D { p r i n t s u m / N R } ' ; d o n e