case4 - nibb-gitc/gitc2025mar-rnaseq GitHub Wiki
Quick Annotation of Trinity Assembly Using BLAST
ダイコン(Raphanus sativus var. hortensis (long and thick root radish)) のRNA-seq データをTrinityでアセンブルした。Trinityで得られたダイコンのコンティグはそれぞれがどのような遺伝子をコードしているだろうか?ここでは、ダイコンのコンティグを対象に、BLASTを使った簡易アノテーションを学ぶ。
BLASTによる相同性検索はおおまかなアノテーションを行なうのに便利な手法である。ここでは、シロイヌナズナのタンパク質データベースを検索することにより、各コンティグがシロイヌナズナのどのタンパク質に対応するかを調べる。ダイコンとシロイヌナズナはどちらもアブラナ科に属するので、進化距離が近く配列も比較似ていると考えられ、配列によるアノテーションは効果的であると期待できる。
Data
必要なデータは、"~/gitc/data/EX/case4/" ディレクトリにある。
- Trinity_Daikon.fasta -- ダイコンのIllumina RNAseq からTrinityによってde novo assembly したコンティグ配列
(参考)このTrinity_Daikon.fasta は、以下の論文で用いられているデータの一部(accession#: DRR010353, DRR014773)を使って、今回のコースのために新たに生成したものである。
Mitsui, Y. et al. (2015). The radish genome and comprehensive gene expression profile of tuberous root formation and development. Scientific reports 5(1), 10835. https://dx.doi.org/10.1038/srep1083
Software
- NCBI BLAST+
- PythonとRubyのスクリプトを実行する
Setup
case4 ディレクトリを作成し、その下で作業しよう。
$ mkdir case4
$ cd case4
Trinity アセンブルファイルをカレントディレクトリにコピーしておこう。
$ cp ~/gitc/data/EX/case4/Trinity_Daikon.fasta ./
less などで、Trinity_Daikon.fasta の中身を確認しよう。エントリー数を確認しておくとさらに良いだろう。
Build BLAST DB
国際コンソーシアムの運営するシロイヌナズナデータベース TAIRから、シロイヌナズナのタンパク質アミノ酸配列セットをダウンロードする。
ダウンロード
(このファイルは、~/gitc/data/EX/case4/ ディレクトリにもコピーしてある)。
ダウンロードしたファイルを''TAIR10.pep''の名前に変更。
$mv TAIR10_pep_20110103_representative_gene_model_updated TAIR10.pep
BLAST DBをビルド。
$ makeblastdb -in TAIR10.pep -dbtype prot -parse_seqids
Similarity search with BLAST
$ blastx -query Trinity_Daikon.fasta -db TAIR10.pep -num_threads 4 \
-evalue 1.0e-8 -outfmt 6 > blastx_results.txt
計算に時間がかかるため、参考のため、あらかじめ計算済みの結果をdataディレクトリに保存しておいた。~/gitc/data/EX/case4/blastx_results.txt
less などで blastx_results.txt の中身を確認しておこう。
一つのqueryに対し複数のヒットが記録されているのがわかる。下流の解析を簡単にするために、トップヒットのみを抽出する。 そのためにsortコマンドを駆使する(内山先生の講義資料のp14[BLASTタブ区切り出力からのベストヒット抽出]を参照)[https://github.com/nibb-gitc/gitc2024jul-rnaseq/blob/main/textbook/8_GO%E8%A7%A3%E6%9E%90.pdf]。
sort -k1,1 -s -u blastx_results.txt > blastx_results_tophit.txt
〜〜〜参考〜〜〜
同じことを実現する(トップヒットのみを抽出する)、python scriptも示しておく。
imput_file = "blastx_results.txt"
prev_id = ""
f = open(imput_file)
for line in f:
ary = line.split("\t")
curr_id = ary[0]
if curr_id == prev_id:
pass
else:
print(line.rstrip("\n") )
prev_id = curr_id
f.close()
これを、"select_first_hit.py" というファイル名で保存しよう。(dataフォルダにも置いてある)。
$ python select_first_hit.py > blastx_results_tophit.txt
=> blastx_results_tophit.txt
〜〜〜参考終わり〜〜〜
hit率を計算してみよう。inputのTrinity_Daikon.fastaにはいくつのエントリーがあって、そのうちいくつがシロイヌナズナのタンパク質にヒットしただろうか。
$ seqkit stat -a Trinity_Daikon.fasta
file format type num_seqs sum_len min_len avg_len max_len Q1 Q2 Q3 sum_gap N50 Q20(%) Q30(%)
Trinity_Daikon.fasta FASTA DNA 23,167 35,138,830 500 1,516.8 16,191 818 1,269 1,888 0 1,801 0 0
$ wc blastx_results_tophit.txt
21173 254076 1664743 blastx_results_tophit.txt
21173 / 23167 = 0.9139
Ans. 91.4%
Similarity search with diamond
上記のBLAST検索はかなり時間を要する。diamondを使えば、検索精度をほとんど犠牲にすることなく超高速に検索することが可能である。ここではdiamondを使ってみよう。
diamond makedb --in TAIR10.pep --db TAIR10.dmnd --threads 8
diamond blastx --query Trinity_Daikon.fasta \
--db TAIR10.dmnd --evalue 1.0e-8 --max-target-seqs 10 \
--outfmt 6 --threads 8 --out diamond_results.txt
驚くほど高速に結果が得られる。
出力フォーマットは--outfmtオプションでBLASTのformat 6 と同じ形式を指定している。従って得られたテーブルは上記で説明したのと全く同じ方法で処理できる。
sort -k1,1 -s -u diamond_results.txt > diamond_results_tophit.txt
wc diamond_results_tophit.txt
21011 252132 1639624 diamond_results_tophit.txt
map率はblastxと比べてどうだろうか?
21011 / 23167 = 0.9069
diamondは90.7%。blastxの91.4% に比べ僅かに下回るだけで、高速性によって検索の感度はほとんど犠牲になっていないといえる。
Populate annotations
blastx_results_tophit.txt (およびdiamond_results_tophit.txt)は、ヒットしたAdabidopsisのIDが記録されているのみなので、具体的になんという名前のどのような機能の遺伝子なのかはいちいちデータベースを検索しなければわからない。これらの情報を追記したいというニーズは大きいだろう。
モデル生物の場合、大半の遺伝子に詳細なアノテーションがついているので、それらの情報を取り入れることを考える。シロイヌナズナの場合、各遺伝子のfunctional annotationは以下のファイルにまとめられており、TAIRのウェブサイトからダウンロードすることができる。
(このファイルは、~/gitc/data/EX/case4/ ディレクトリにもコピーしてある)。
blastx_results_tophit.txt に TAIR10_functional_descriptions のアノテーション情報を付加する短い Ruby scriptを用意した。
#=== conf ===
result_blast = "blastx_results_tophit.txt"
gene_annotation_file = "TAIR10_functional_descriptions"
#===
## load gene annotation
data_annot = {}
File.open(gene_annotation_file).each_with_index do |l, i|
next if i == 0
a = l.chomp.split(/\t/)
gene = a[0]
data_annot[gene] = a
end
## load blast tophit
File.open(result_blast).each do |l|
a = l.chomp.split(/\t/)
id = a[0]
hitid = a[1]
out = [a, data_annot[hitid]].flatten.join("\t")
puts out
end
これを add_TAIRdesc_to_blast6.rb という名前で保存し、以下のように実行する。
$ ruby add_TAIRdesc_to_blast6.rb > blastx_results_tophit_annot.txt
スクリプトの中の、
result_blast = "blastx_results_tophit.txt"
result_blast = "diamond_results_tophit.txt"
に変更すれば、diamondの結果も処理できる。
タブ区切りテキストになっているので、MS Excelなどのスプレッドシートで開くと見易いだろう。
Links
BLASTは汎用性が高くそして奥の深い配列解析ツールである。私たちは基生研ゲノムインフォマティクストレーニングコースの一つとして、BLAST自由自在を不定期に開催している。以下に最近のコースの資料を公開しているので是非参考にしていただきたい。
Revision History
2024-7-31
- 動作確認 on bias5 (NCBI BLAST: 2.13.0; diamond 2.0.15)
2023-2-25
- 動作確認 on bias5
- NCBI BLAST: 2.13.0; diamond 2.0.15
2022-8-28
- 動作確認。軽微な修正。(NCBI BLAST: 2.13.0; diamond: 2.0.12)
2021-9-12
- TAIR10のファイルのリンクをアップデート
- diamond での解析を追加。