fastqの前処理に便利なSeqKit使い方まとめ

SeqKitとは?

シーケンサーから得られた配列は何かしらの処理をすることが多い。

そこで結構便利かつ軽量なソフトであるseqkitを紹介する。

論文はこちら1

公式ページ(ドキュメント)はこちら


SeqKitのインストール

https://github.com/shenwei356/seqkit/releases

解凍してパスを通すだけ。

ちなみに、.tar.gzの解凍は tar -zxvf *.tar.gz でできます。


SeqKitのコマンド例

以下のような疑似FASTQを例とする。 以下をexample.fqとして保存し、以下を実行する。 シーケンスの長さが10〜14,クオリティは24〜28としている。

example.fqからもダウンロード可能

@seq0
ATGCATGCAT
+
9999999999
@seq1
ATGCATGCATG
+
:::::::::::
@seq2
ATGCATGCATGC
+
;;;;;;;;;;;;
@seq3
ATGCATGCATGCA
+
<<<<<<<<<<<<<
@seq4
ATGCATGCATGCAT
+
==============
@seq5
ATGCATGCATGCATG
+
>>>>>>>>>>>>>>>

# 基本的なコマンド

基本的には seqkit ${コマンド} ${fastqファイル} で使用することができる。

デフォルトでは標準出力に出力されるため、ファイルに吐き出したい場合はリダイレクトする必要がある。


# SeqKitでfastqの統計値を見る

fastqの長さに関する簡単な統計値は seqkit stats *.fq で見ることができる。

タブ区切りで出力してくれる -T オプションが便利

$ seqkit stats -T example.fq
file	format	type	num_seqs	sum_len	min_len	avg_len	max_len
example.fq	FASTQ	DNA	6	75	10	12.5	15

クオリティの統計値もみたい場合は、 -aオプションをつけることでクオリティの統計値なども見ることができる。

$ seqkit stats -a -T example.fq
file	format	type	num_seqs	sum_len	min_len	avg_len	max_len	Q1	Q2	Q3	sum_gap	N50	Q20(%)	Q30(%)
example.fq	FASTQ	DNA	6	75	10	12.5	15	11	12	14	0	13	100.00	0.00

# SeqKitでfastqからfastaへ変換

seqkit fq2fa *.fq でfastqからfastaへ変換が可能。

$ seqkit fq2fa example.fq
>seq0
ATGCATGCAT
>seq1
ATGCATGCATG
>seq2
ATGCATGCATGC
>seq3
ATGCATGCATGCA
>seq4
ATGCATGCATGCAT
>seq5
ATGCATGCATGCATG

# SeqKitで平均クオリティーフィルタリング

seqkit seq -Q ${quality_value} ${path_fastq} で平均クオリティーによるフィルタリングが可能。

以下の例では、平均クオリティが25以上のリードのみを抽出している。

$ seqkit seq -Q 25 example.fq
@seq1
ATGCATGCATG
+
:::::::::::
@seq2
ATGCATGCATGC
+
;;;;;;;;;;;;
@seq3
ATGCATGCATGCA
+
<<<<<<<<<<<<<
@seq4
ATGCATGCATGCAT
+
==============
@seq5
ATGCATGCATGCATG
+
>>>>>>>>>>>>>>>

想定通り、1本目のリードが除かれ、その他リードは残った。


# SeqKitで長さフィルタリング

seqkit seq -m ${min_len} -M ${max_len} ${path_fastq} で長さによるフィルタリングが可能。

11以上、13以下のリード数を取得してみる。

$ seqkit seq -m 11 -M 13 example.fq
@seq1
ATGCATGCATG
+
:::::::::::
@seq2
ATGCATGCATGC
+
;;;;;;;;;;;;
@seq3
ATGCATGCATGCA
+
<<<<<<<<<<<<<

想定通り、1本目,5本目のリードが除かれ、その他リードは残った。


# SeqKitでリードのランダムサンプリング①

seqkit seq -n ${read_num} ${path_fastq} で本数を指定してサンプリングが可能。

ただし、 seqkitは指定した本数に近づけるだけで、指定した本数通りサンプリングしてくれるわけではない ことに注意。

$ seqkit sample -n 3 -s 1 example.fq 
[INFO] sample by number
[INFO] 2 sequences outputted
@seq3
ATGCATGCATGCA
+
<<<<<<<<<<<<<
@seq4
ATGCATGCATGCAT
+
==============

# SeqKitでリードのランダムサンプリング②

本数を厳密に指定したい場合、shuffleしてheadなどが考えられる。

以下のコマンドで実行可能。

$ seqkit shuffle -s 0 example.fq | seqkit head -n 3 # -sはseed。
[INFO] read sequences ...
[INFO] 6 sequences loaded
[INFO] shuffle ...
[INFO] output ...
@seq4
ATGCATGCATGCAT
+
==============
@seq2
ATGCATGCATGC
+
;;;;;;;;;;;;
@seq3
ATGCATGCATGCA
+
<<<<<<<<<<<<<

# SeqkitでGC含量の計算

seqkit fx2tab -n -g ${path_fastq} でGC含量の計算ができる。

$ seqkit fx2tab -n -g example.fq
seq0			40.00
seq1			45.45
seq2			50.00
seq3			46.15
seq4			42.86
seq5			46.67

参考

  1. Shen, W., Le, S., Li, Y. & Hu, F. SeqKit: A Cross-Platform and Ultrafast Toolkit for FASTA/Q File Manipulation. PLoS One 11, e0163962 (2016).