2012年6月7日木曜日

高速シーケンスのデータをリファレンスにアライメント

BWA(Burrows-Wheeler Aligner)を使って
生データ(.fastq)をリファレンス(.fasta)にアライメントする(.sam)

必要なファイル
 ref.fasta リファレンスゲノム(multiple fasta)
 fastq1.txt FASTQデータ
 fastq2.txt FASTQデータ(paired-endの場合はFASTQを2つ)

bwa index
 bwa index -a is <ref.fasta>
 → 8種類のファイルが作られる
   (.amb, .ann, .bwt, .pac, .rbwt, .rpac, .rsa, .sa)

bwa aln
 bwa aln <ref.fasta> <fastq1.txt> > <aln.result1.sai> | 
 bwa aln <ref.fasta> <fastq2.txt> > <aln.result2.sai>
 → single-endの場合は上の1行のみ
   .saiファイルが作られる

bwa sampe(paired-endの場合)
 bwa sampe <ref.fasta> <aln.result1.sai> <aln.result2.sai> <fastq1.txt> <fastq2.txt> > <sampe.result.sam>
 → .samファイルが作られる

bwa samse(single-endの場合)
 bwa samse <ref.fasta> <aln.result1.sai> <fastq1.txt> > <samse.result.sam>
 → .samファイルが作られる

2012年6月6日水曜日

MEMEでモチーフ探し

ある一群のDNA配列が特定のエレメントをもつかどうかを知りたい。例えば、転写因子が結合するエレメントがあると期待している。そんなときは、MEMEが便利。


MEME (Multiple Em for Motif Elicitation)


MEMEに一群の配列を渡すと、その中に存在するエレメントをLOGOとして返してくれる。


 MEMEは、ダウンロードして自分のmacで走らせることができる。サーバの混雑に影響されずに済むし、CUIだとパラメータを少しずつ変更しながらの作業が楽。 


自分のmacで走らせると、指定したディレクトリにHTML書類(meme.html)を出力してくれる。同じディレクトリに発見されたモチーフの順鎖と逆鎖のPNG画像(logo1.png, logo_rc1.png等)があり、HTMLをブラウザで開くとそれらが参照される。


meme.txtと名付けられたファイルに重要な情報がまとめられている。こちらからコピペすれば、HTML越しに作業をするより楽。 meme.txtにはモチーフの定義が記述されており、これを切り抜いて個別のファイルにしておくとFIMO (Find Individual Motif Occurences)に渡すことができる。




アウトプットについての情報


モチーフのフォーマットはこちら
MEME Minimal Motif Format (sample DNA motif)



2012年6月4日月曜日

ファイルの行数を調査する


テキトーな表」を使う。
<dir_name>と名付けたディレクトリに「テキトーな表」に由来するファイルが入っているとする。


ディレクトリ(フォルダ)に移動する。
cd <dir_name>


カレントディレクトリ内の、ファイル名が「.txt」で終わるファイルの行数を調べる
wc -l *.txt


$ wc -l *.txt
       8 dataA.txt
       8 dataA_col23.txt
       5 dataA_2over0.txt
       7 dataA_2plus3.txt
       8 dataB.txt
      36 total


「.csv」で終わるファイルなら、
wc -l *.csv


$ wc -l *.csv
       8 dataA.csv
       8 dataB.csv
      16 total


「dataA」で始まるファイルなら、
wc -l dataA*


$ wc -l dataA*
       8 dataA.csv
       8 dataA.txt
       5 dataA_2over0.txt
       7 dataA_2plus3.txt
       8 dataA_col23.txt
      36 total


特定のファイルの行数を調べる(例えば「dataA.txt」)
wc -l dataA.txt


$ wc -l dataA.txt
       8 dataA.txt

awkで特定の列や行を抽出する


テキトーな表」を使う


awkでタブ区切りファイルを開き、2列目と3列目だけを抽出して新規ファイルとして保存する。
awk 'BEGIN{FS="\t"; OFS="\t"} {print $2,$3}' dataA.txt > dataA_col23.txt


上を実行する際に、1行目(ヘッダー行)だけを省く
awk 'BEGIN{FS="\t"; OFS="\t"} {if(NR >= 2) {print $2,$3}}' dataA.txt > dataA_col23_noHead.txt


あるいは
awk 'BEGIN{FS="\t"; OFS="\t"} {if(NR != 1) {print $2,$3}}' dataA.txt > dataA_col23_noHead.txt


あるいは
awk 'BEGIN{FS="\t"; OFS="\t"} {if(NR > 1) {print $2,$3}}' dataA.txt > dataA_col23_noHead.txt




2列目がゼロより大きい行を抽出して保存する。
awk 'BEGIN{FS="\t"; OFS="\t"} $2 > 0' dataA.txt > dataA_2over0.txt


2列目と3列目を足した値を4列目として保存する。
awk 'BEGIN{FS="\t"; OFS="\t"} $4=$2+$3 {print $0}' dataA.txt > dataA_2plus3.txt

awkによる、タブ区切りからcsvへの変換、およびその逆


テキトーな表」を使う

awkでタブ区切りファイルを開き、CSVファイルとして保存する
awk 'BEGIN{FS="\t"; OFS=","} {print $0}' dataA.txt > dataB.csv

あるいは
awk 'BEGIN{FS="\t"; OFS=","} $0' dataA.txt > dataB.csv

awkでCSVファイルを開き、タブ区切りファイルとして保存する
awk 'BEGIN{FS=","; OFS="\t"} {print $0}' dataA.csv > dataB.txt
awk 'BEGIN{FS=","; OFS="\t"} $0' dataA.csv > dataB.txt

Rでタブ区切り(.txt)やcsv(.csv)を開く


テキトーな表」を使う


タブ区切りファイルを読み込む
data.B <- read.table(file="dataA.txt",header=T,sep="\t")


あるいは
data.B <- read.table(file="dataA.txt",header=T)
data.B <- read.delim(file="dataA.txt",header=T)


read.delim() に header=T を与えなくても、ヘッダーがカラム名になる
data.B <- read.delim(file="dataA.txt")


> data.B
   name1  name2  name3
1 -1.220 -0.321 -0.585
2  1.584 -1.410 -0.378
3 -0.305  1.061 -0.392
4 -1.344  0.814  0.974
5 -0.798  0.139  0.742
6  0.688 -1.462 -0.149
7  0.023  0.342  2.005


read.table() に header=T を与えなければ、1行目にヘッダーが入ってしまう
data.B <- read.table(file="dataA.txt")


> data.B
      V1     V2     V3
1  name1  name2  name3
2  -1.22 -0.321 -0.585
3  1.584  -1.41 -0.378
4 -0.305  1.061 -0.392
5 -1.344  0.814  0.974
6 -0.798  0.139  0.742
7  0.688 -1.462 -0.149
8  0.023  0.342  2.005

Rで表をつくり、カラム名をつけ、タブ区切り(.txt)やcsv(.csv)として保存する


Rでテキトーな表を作る
data.A <- matrix(round(rnorm(21),digits=3),ncol=3)


rnorm: 乱数発生
round: 丸め処理(digits: 小数点以下の桁数)
matrix: リストから行列をつくる(ncol: カラムの数)


> data.A
       [,1]   [,2]   [,3]
[1,] -1.220 -0.321 -0.585
[2,]  1.584 -1.410 -0.378
[3,] -0.305  1.061 -0.392
[4,] -1.344  0.814  0.974
[5,] -0.798  0.139  0.742
[6,]  0.688 -1.462 -0.149
[7,]  0.023  0.342  2.005


カラム名をつける
colnames(data.A) <- c("name1","name2","name3")


> data.A
      name1  name2  name3
[1,] -1.220 -0.321 -0.585
[2,]  1.584 -1.410 -0.378
[3,] -0.305  1.061 -0.392
[4,] -1.344  0.814  0.974
[5,] -0.798  0.139  0.742
[6,]  0.688 -1.462 -0.149
[7,]  0.023  0.342  2.005


タブ区切りファイルとして保存するなら、
write.table(data.A,file="dataA.txt",sep="\t",col.names=T,row.names=F,quote=F)


csvとして保存するなら、
write.table(data.A,file="dataA.csv",sep=",",col.names=T,row.names=F,quote=F)


dataA.txtをエディタで開くと、


name1 name2 name3
-1.22 -0.321 -0.585
1.584 -1.41 -0.378
-0.305 1.061 -0.392
-1.344 0.814 0.974
-0.798 0.139 0.742
0.688 -1.462 -0.149
0.023 0.342 2.005


dataA.csvをエディタで開くと、


name1,name2,name3
-1.22,-0.321,-0.585
1.584,-1.41,-0.378
-0.305,1.061,-0.392
-1.344,0.814,0.974
-0.798,0.139,0.742
0.688,-1.462,-0.149
0.023,0.342,2.005