Upgrade to Pro — share decks privately, control downloads, hide ads and more …

shell-vs-genome

 shell-vs-genome

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

Tazro Inutano Ohta

October 18, 2017
Tweet

More Decks by Tazro Inutano Ohta

Other Decks in Science

Transcript

  1. tw: inut, gh: inutano

    View Slide

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

    View Slide

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

    View Slide

  4. Bioinformatics
    シェル芸

    View Slide

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

    View Slide

  6. ゲノム科学 シェル芸
    ゲノム:
    生物のソー
    スコー

    ゲノム情報はどのように生物の機能をコー
    ドしているか?
    ゲノム多型
    遺伝子発現
    遺伝子発現制御
    etc.
    何ができればゲノムを理解したと言えるのか
    任意の表現型を示す生物のゲノムを設計する

    View Slide

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

    View Slide

  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
    }
    '
    好きな数だけリー
    ド吐いてくれるので便利
    これをリファレンスにマップできたらヒトゲノム出来たことにする

    View Slide

  9. The Infinite Monkey Theorem
    ランダムな文字列を生成し続ければいつかは任意の文章を生成できる

    View Slide

  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

    View Slide

  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
    永遠に結果が返ってこないので生成できたかどうか分からない

    View Slide

  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

    View Slide

  13. 寒い冬に暖を取るためのバイオワンライナー
    for
    シェル芸勉強会 meets
    バイオインフォマティクス vol.1, 2017/10/18
    Tazro Ohta / @inutano

    View Slide

  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

    View Slide