20
WACODE 忙しいバイオインフォマティシャ ンのための時短ワンライナー @waco RIKEN github.com/carushi 1

Wacode 忙しいバイオインフォマティシャンのための時短ワンライナー

Embed Size (px)

Citation preview

Page 1: Wacode 忙しいバイオインフォマティシャンのための時短ワンライナー

WACODE 忙しいバイオインフォマティシャンのための時短ワンライナー

@waco RIKEN

github.com/carushi

1

Page 2: Wacode 忙しいバイオインフォマティシャンのための時短ワンライナー

2

でかくて困っているデータ解析

Page 3: Wacode 忙しいバイオインフォマティシャンのための時短ワンライナー

3

O(NW^2) → O(NW^2/K+KW^2)github.com/carushi/ParasoR

Page 4: Wacode 忙しいバイオインフォマティシャンのための時短ワンライナー

4

でかくて困っているデータ解析

Page 5: Wacode 忙しいバイオインフォマティシャンのための時短ワンライナー

開発に参加させていただいたソフトです、!よろしくお願いします!!

Page 6: Wacode 忙しいバイオインフォマティシャンのための時短ワンライナー

• 今日はソフトで出したデータの処理の部分の話

• 特にシェルでのコマンドラインによる処理の高速化

• 要するにワンライナーをやります

• ふだんmac + zsh + coreutils/binutils

でかくて困っているデータ解析(再)

Page 7: Wacode 忙しいバイオインフォマティシャンのための時短ワンライナー

今回の流れ

Coding RNAを抽出

ファイルを1000個に分割

並列で実行

出力を確認

解析用のCSV, TXT作成

Rとかに投げる…

For busy people!!!

Page 8: Wacode 忙しいバイオインフォマティシャンのための時短ワンライナー

先輩に巨大ファイルの解析を頼まれた

1. やる

2. 帰ってやる

3. 帰ってカレー食べてからやる

4. 明日やる

5. 明後日やる

6. …

Page 9: Wacode 忙しいバイオインフォマティシャンのための時短ワンライナー

どんなファイル?

>cat ookiifile.fa>NM_000001ACACACACACACAC…>NR_000001CACACACACACACA…>NM_000002AAAAAAAAAAAAAA……

二行ずつRefSeqのCodingとNon-coding RNAの配列が含まれている

この配列のうちcoding RNAだけをfastaを受け付けるソフトに投げて計算させたい

計算資源がたくさんあるので1000並列で走らせることにしました

Page 10: Wacode 忙しいバイオインフォマティシャンのための時短ワンライナー

• bashから使うコマンド

• 組み込みのコマンド群 export, set, if, while(man builtin)

• /bin/, /usr/binなんかに入っているコマンド群(ふっとばすと使えないやつ)

• ワイルドカードやpipe (|)などはコマンドではない(man bash参照)

bashを動かす

Page 11: Wacode 忙しいバイオインフォマティシャンのための時短ワンライナー

まずNon-codingを抜きます

!

>grep -A 1 NM ookiifile.fa (後1行)!

>grep -B 1 NM ookiifile.fa (前1行) !

>grep -A 1 NM ookiifile.fa | grep -v “\-\-“ > temp.fa

codingはNM, Non-codingはNRなので、NMを含む行とその次の行を出力します

複数行に分割されている場合は例えばawkで”>NM”のある行だけ改行を入れれば形式ok

cat ookiifile.fa | awk '{if (substr($0,1,3) == ">NM") {print "\n"$0 }else{printf $0}}'

Page 12: Wacode 忙しいバイオインフォマティシャンのための時短ワンライナー

1000ファイルに分割(実例)>wc (行数ゲット)!split.sh!for i in {1..1000}do START=`(echo "($i - 1 ) * 行数/1000 + 1" | bc)` tail -n +$START temp.fa | head -n 行数 > split_$i.fa --なんか計算--done

Page 13: Wacode 忙しいバイオインフォマティシャンのための時短ワンライナー

行数一定で分割(実例)

> split -a 5 -d -l 50 temp.fa tmp!!> ls tmp* | sed 'p; s/tmp0*\(.*\)\(.\)/tmp\1\2/g' | xargs -n 2 mv!!> ls tmp* | sed 'p; s/tmp0*\(.*\)\(.\)/tmp\1\2/g' | xargs -n 2 mv; osascript -e 'say "end" using “Cellos"'

↑ジョブが終わったらendって喋らせる(オススメ)

Page 14: Wacode 忙しいバイオインフォマティシャンのための時短ワンライナー

スパコンあるある

なぜか数ジョブ落ちてる

Page 15: Wacode 忙しいバイオインフォマティシャンのための時短ワンライナー

計算結果!>ls!out_1.txt out_2.txt out_4.txt … out_998.txt out_1000.txt

抜けがある

こういう確認もシェル芸で!

!>find . -name out_*.txt | cut -d”_” -f2 | sed ’s/.txt//‘ | sort -n | diff <(cat -) <(seq 1 1000)

Page 16: Wacode 忙しいバイオインフォマティシャンのための時短ワンライナー

出力を整形>cat out_0.txt>NM_0000011 0.5 0.32 0.4 0.11 0.3 0.3# owattayo!>NM_0000020 0.8 0.40 0.1 0.23 0.5 0.5…

!> seq 0 10 | xargs -I{} echo “grep -h \“^{} \“ out_*.txt > result_{}.txt” | bash

コメントを入れているとあとで後悔することも。。

Page 17: Wacode 忙しいバイオインフォマティシャンのための時短ワンライナー

!> cat log.csv | grep -v "\@" | cut -d"," -f3,3 | tr -d "\"" | mecab | sort | uniq -c | sort -r -n -k1 > all.txt

おまけ

ワンライナーには空白区切り・csvファイル!

mecabを使って自分のTwitterログを解析してみる

Page 18: Wacode 忙しいバイオインフォマティシャンのための時短ワンライナー

個人的オススメコマンドtime

script

tee

cowsay

awk

Page 19: Wacode 忙しいバイオインフォマティシャンのための時短ワンライナー

• シェルプログラミング実用テクニック

• どこまでいってもman

参考

Page 20: Wacode 忙しいバイオインフォマティシャンのための時短ワンライナー

20

Thank you for your listening!