a) qiime2で系統推定する場合sklearn/blast/vsearchから選択できる
b) sklearnの場合は参照データとして分類機が必要。blast/vsearchの場合はfastaと系統データが必要。
c) qiime2で利用する場合はわざわざqiime2でインポートしてqza形式に変換したものを利用しなければならない。カスタムDBを作る場合fastaと系統データをq2用にフォーマットする必要がある。
# DLしてきたファイル名を変更
mv RefOTUs.fa RDPClassifier_16S_trainsetNo18_RefOTUs.fa
mv Ref_taxonomy.txt RDPClassifier_16S_trainsetNo18_taxonomy.txt
# DLしてきたものをそのままインポートしようとしたらエラー。小文字はだめらしい。
# Invalid character 'g' at position 0 on line 2 (does not match IUPAC characters for this sequence type). Allowed characters are ACGTRYKMSWBDHVN
# 配列部分を大文字に変換する。
cat RDPClassifier_16S_trainsetNo18_RefOTUs.fa \
| awk '/^>/{print}!/^>/{print toupper($0)}' > RDPClassifier_16S_trainsetNo18_RefOTUs.fasta
# qiime2でインポートqza形式にする
## fasta配列
qiime tools import \
--type FeatureData[Sequence] \
--input-path RDPClassifier_16S_trainsetNo18_RefOTUs.fasta \
--output-path RDPClassifier_16S_trainsetNo18_RefOTUs.qza
## 系統データ--source-format は--input-formatに変更
qiime tools import \
--type FeatureData[Taxonomy] \
--input-format HeaderlessTSVTaxonomyFormat \
--input-path RDPClassifier_16S_trainsetNo18_taxonomy.txt \
--output-path RDPClassifier_16S_trainsetNo18_taxonomy.qza
# トレーニング`fit-classifier-naive-bayes`, fit-classifier-sklearn開発目的で公開されている
qiime feature-classifier fit-classifier-naive-bayes \
--i-reference-reads RDPClassifier_16S_trainsetNo18_RefOTUs.qza \
--i-reference-taxonomy RDPClassifier_16S_trainsetNo18_taxonomy.qza \
--o-classifier RDPClassifier_16S_trainsetNo18.classifier.qza# taxonkit 最新版をDL
grep "^>" 220804_16S_refseq.fasta | sed 's/^>//' \
| awk '!/Candidatus/{printf("%s", $1"\t"$2" "$3"\t"); for(i=4;i<NF;++i){printf("%s ", $i)}; print $NF} \
/Candidatus/{printf("%s", $1"\t"$2" "$3" "$4"\t"); for(i=5; i<NF; ++i){printf("%s ", $i)}; print $NF}'
# NCBIから落としてきたfastaのヘッダを編集してtaxonkitに投げてlineageを取得
grep "^>" 220804_16S_refseq.fasta | sed 's/^>//' \
| awk '!/Candidatus/{printf("%s", $1"\t"$2" "$3"\t"); for(i=4;i<NF;++i){printf("%s ", $i)}; print $NF} \
/Candidatus/{printf("%s", $1"\t"$2" "$3" "$4"\t"); for(i=5; i<NF; ++i){printf("%s ", $i)}; print $NF}' \
| taxonkit name2taxid -i 2 | taxonkit lineage -i 4 | taxonkit reformat -i 5 -f "{k};{p};{c};{o};{f};{g};{s}" \
| awk -F"\t" '{x=$2" "$3; print $1"\t"x"\t"$4"\t"$6}' > ncbi16s_tax.txt
# 1つの配列に複数のtaxonomic idが振られていたので個別に確認
grep -e "NR_153679.1" -e "NR_132333.1" -e "NR_116359.1" -e "NR_118271.1" -e "NR_115954.1" -e "NR_112559.1" ncbi16s_tax.txt > temp.tsv
cat ncbi16s_tax.txt | awk -F"\t" '$3!~/^(1530043|1602736|415956|170600
0|60447)$/{print}'
# taxidつかなかったもの取り出して編集
cat ncbi16s_tax.txt | awk -F"\t" '$4==""{print}' | sed -e 's/\[//g' -e 's/\]//g' -e s/\'//g | awk -F"\t" '{print $2}' | cut -f1,2 -d " " | taxonkit name2taxid | taxonkit lineage -i 2 | taxonkit reformat -i 3 -f "{k};{p};{c};{o};{f};{g};{s}"