Upload
caru-shi
View
572
Download
5
Embed Size (px)
Citation preview
2
でかくて困っているデータ解析
4
でかくて困っているデータ解析
開発に参加させていただいたソフトです、!よろしくお願いします!!
• 今日はソフトで出したデータの処理の部分の話
• 特にシェルでのコマンドラインによる処理の高速化
• 要するにワンライナーをやります
• ふだんmac + zsh + coreutils/binutils
でかくて困っているデータ解析(再)
今回の流れ
Coding RNAを抽出
ファイルを1000個に分割
並列で実行
出力を確認
解析用のCSV, TXT作成
Rとかに投げる…
For busy people!!!
先輩に巨大ファイルの解析を頼まれた
1. やる
2. 帰ってやる
3. 帰ってカレー食べてからやる
4. 明日やる
5. 明後日やる
6. …
どんなファイル?
>cat ookiifile.fa>NM_000001ACACACACACACAC…>NR_000001CACACACACACACA…>NM_000002AAAAAAAAAAAAAA……
二行ずつRefSeqのCodingとNon-coding RNAの配列が含まれている
この配列のうちcoding RNAだけをfastaを受け付けるソフトに投げて計算させたい
計算資源がたくさんあるので1000並列で走らせることにしました
• bashから使うコマンド
• 組み込みのコマンド群 export, set, if, while(man builtin)
• /bin/, /usr/binなんかに入っているコマンド群(ふっとばすと使えないやつ)
• ワイルドカードやpipe (|)などはコマンドではない(man bash参照)
bashを動かす
まず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}}'
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
行数一定で分割(実例)
> 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って喋らせる(オススメ)
スパコンあるある
なぜか数ジョブ落ちてる
計算結果!>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)
出力を整形>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
コメントを入れているとあとで後悔することも。。
!> cat log.csv | grep -v "\@" | cut -d"," -f3,3 | tr -d "\"" | mecab | sort | uniq -c | sort -r -n -k1 > all.txt
おまけ
ワンライナーには空白区切り・csvファイル!
mecabを使って自分のTwitterログを解析してみる
個人的オススメコマンドtime
script
tee
cowsay
awk
• シェルプログラミング実用テクニック
• どこまでいってもman
参考
20
Thank you for your listening!