R調(diào)用Taxonkit展示系統(tǒng)發(fā)育信息

Introduction

TaxonKit是一個用于處理生物分類學(xué)數(shù)據(jù)的命令行工具悯恍。
它的主要功能是處理NCBI的生物分類學(xué)數(shù)據(jù)锐帜,包括對分類單元(如物種、屬验毡、科等)的查找、分類單元的上下位關(guān)系查詢典蜕、分類單元名稱的標準化等。

為了方便R社區(qū)用戶(自己)使用和流程整合,我把Taxonkit工具整合進了R包pctax,也開發(fā)了一些配套的系統(tǒng)發(fā)育分析和可視化方法斋射。

R調(diào)用Taxonkit

準備工作

  1. 安裝pctax
    pctax穩(wěn)定版本可在CRAN上獲得:
install.packages("pctax")

或者你可以通過以下方式從GitHub安裝pctax的開發(fā)版本:

# install.packages("devtools")
devtools::install_github("Asa12138/pctax")
  1. 安裝taxonkit:
library(pctax)
pctax::install_taxonkit(make_sure = TRUE)

#成功后taxonkit會安裝在下面這個目錄??
tools::R_user_dir("pctax")
  1. 下載NCBI Taxonomy數(shù)據(jù)文件:
pctax::download_taxonkit_dataset(make_sure = TRUE)

#成功后Taxonomy數(shù)據(jù)文件會在下面這個目錄??
file.path(Sys.getenv("HOME"), ".taxonkit")

該函數(shù)會下載官網(wǎng)最新版本的Taxonomy數(shù)據(jù)庫,如果需要制定版本的數(shù)據(jù)庫但荤,可以自己在官網(wǎng)下載:https://ftp.ncbi.nih.gov/pub/taxonomy/绩鸣,然后指定位置:

pctax::download_taxonkit_dataset(make_sure = TRUE,taxdump_tar_gz = "~/Downloads/taxdump.tar.gz")

使用

# 下列命令不報錯說明可以正常使用
check_taxonkit(print = FALSE)

主要功能與taxonkit一致:

函數(shù) 功能
taxonkit_list 列出指定TaxId下所有子單元的的TaxID
taxonkit_lineage 根據(jù)TaxID獲取完整譜系(lineage)
taxonkit_reformat 將完整譜系轉(zhuǎn)化為“界門綱目科屬種株”的自定義格式
taxonkit_name2taxid 將分類單元名稱轉(zhuǎn)化為TaxID
taxonkit_filter 按分類學(xué)水平范圍過濾TaxIDs
taxonkit_lca 計算最低公共祖先(LCA)

并且help(taxonkit_*)可查看詳細使用說明。

# 列出[genus] Homo下的所有子單元
taxonkit_list(ids = c(9605), indent = "-", show_name = TRUE, show_rank = TRUE)
##  [1] "9605 [genus] Homo"                                    
##  [2] "-9606 [species] Homo sapiens"                         
##  [3] "--63221 [subspecies] Homo sapiens neanderthalensis"   
##  [4] "--741158 [subspecies] Homo sapiens subsp. 'Denisova'" 
##  [5] "-1425170 [species] Homo heidelbergensis"              
##  [6] "-2665952 [no rank] environmental samples"             
##  [7] "--2665953 [species] Homo sapiens environmental sample"
##  [8] "-2813598 [no rank] unclassified Homo"                 
##  [9] "--2813599 [species] Homo sp."                         
## [10] ""

taxonkit_lineage, taxonkit_reformat, taxonkit_name2taxid, taxonkit_filtertaxonkit_lca 默認從文件中讀取數(shù)據(jù)纱兑,也可通過指定text = TRUE從字符串輸入讀取輸入數(shù)據(jù):

# 查詢9606和63221的完整譜系
taxonkit_lineage("9606\n63221", show_name = TRUE, show_rank = TRUE, text = TRUE)%>%
    pcutils::strsplit2(split = "\t",colnames = c("taxid","lineage","name","level"))
##   taxid
## 1  9606
## 2 63221
##                                                                                                                                                                                                                                                                                                                                                                                          lineage
## 1                               cellular organisms;Eukaryota;Opisthokonta;Metazoa;Eumetazoa;Bilateria;Deuterostomia;Chordata;Craniata;Vertebrata;Gnathostomata;Teleostomi;Euteleostomi;Sarcopterygii;Dipnotetrapodomorpha;Tetrapoda;Amniota;Mammalia;Theria;Eutheria;Boreoeutheria;Euarchontoglires;Primates;Haplorrhini;Simiiformes;Catarrhini;Hominoidea;Hominidae;Homininae;Homo;Homo sapiens
## 2 cellular organisms;Eukaryota;Opisthokonta;Metazoa;Eumetazoa;Bilateria;Deuterostomia;Chordata;Craniata;Vertebrata;Gnathostomata;Teleostomi;Euteleostomi;Sarcopterygii;Dipnotetrapodomorpha;Tetrapoda;Amniota;Mammalia;Theria;Eutheria;Boreoeutheria;Euarchontoglires;Primates;Haplorrhini;Simiiformes;Catarrhini;Hominoidea;Hominidae;Homininae;Homo;Homo sapiens;Homo sapiens neanderthalensis
##                            name      level
## 1                  Homo sapiens    species
## 2 Homo sapiens neanderthalensis subspecies

從文件中讀取數(shù)據(jù):

names <- system.file("extdata/name.txt", package = "pctax")
taxonkit_name2taxid(names, name_field = 1, sci_name = FALSE, show_rank = FALSE)%>%
    pcutils::strsplit2(split = "\t",colnames = c("name","taxid"))
##                                              name   taxid
## 1                                    Homo sapiens    9606
## 2            Akkermansia muciniphila ATCC BAA-835  349741
## 3                         Akkermansia muciniphila  239935
## 4                 Mouse Intracisternal A-particle   11932
## 5                                        Wei Shen        
## 6 uncultured murine large bowel bacterium BAC 54B  314101
## 7                       Croceibacter phage P2559Y 1327037

系統(tǒng)發(fā)育樹

如果是做16S測序的話,在分析過程中就會得到一個帶距離的系統(tǒng)發(fā)育樹化借。宏基因組分析如果組裝MAG后用GTDB-Tk比對數(shù)據(jù)庫后也可以獲得有距離的系統(tǒng)發(fā)育樹潜慎。

但有時候我們想要從物種名或taxid獲取整齊的譜系信息,用來一個構(gòu)建系統(tǒng)發(fā)育樹(層級樹蓖康,沒有真實的距離铐炫,只展示包含關(guān)系)。這是一個常見的需求蒜焊,很多文章都會畫一個這樣的樹圖來展示自己的數(shù)據(jù)倒信。

可以實現(xiàn)這個需求的工具有一些:

當然可以使用pctax包快速完成,對于分析流程都在R里做的人來說非常方便:

names <- system.file("extdata/name.txt", package = "pctax")%>%readLines()

# 首先通過`name_or_id2df`獲取整齊的系統(tǒng)發(fā)育分類:
tax_df=name_or_id2df(names,mode = "name")

# 去除部分NA套硼,原因可能是學(xué)名不標準卡辰,或者在新數(shù)據(jù)庫里刪除了,因為taxonomy數(shù)據(jù)庫是不斷變化的
tax_df=na.omit(tax_df)

#用`df2tree`將分類層級表轉(zhuǎn)化為樹對象
tax_tree=pctax::df2tree(tax_df[,3:9])

# tax_tree是phylo對象邪意,可以用ape包直接簡單繪圖
ape:::plot.phylo(tax_tree)

可視化

pctax還提供了一些系統(tǒng)發(fā)育信息展示方法:

  1. 系統(tǒng)發(fā)育樹
data(otutab, package = "pcutils")
#otutab是豐度數(shù)據(jù)九妈,taxonomy是分類層級表(可通過name_or_id2df獲得)
ann_tree(taxonomy, otutab) -> tree

easy_tree(tree, add_abundance = TRUE) -> p
p

添加主要Phylum的strip:

easy_tree(tree, add_abundance = TRUE,add_tiplab = FALSE) -> p
some_tax <- table(taxonomy$Phylum) %>%
  sort(decreasing = TRUE) %>%
  head(5) %>%
  names()
add_strip(p, some_tax)

當然,更多系統(tǒng)發(fā)育樹的繪制可以參考我之前寫的R繪制優(yōu)美的進化樹(基礎(chǔ))R繪制優(yōu)美的進化樹(進階)雾鬼,或者使用iPhylo網(wǎng)站來交互式繪圖:iPhylo 生成并繪制優(yōu)美的分類樹

  1. 擅戎欤基圖:
sangji_plot(tree)

3.旭日圖

sunburst(tree)

TaxonKit 使用

TaxonKit是采用Go語言編寫的命令行工具, 提供Linux, Windows, macOS操作系統(tǒng)不同架構(gòu)(x86-64/arm64)的靜態(tài)編譯的可執(zhí)行二進制文件呆贿。
發(fā)布的壓縮包不足3Mb嚷兔,除了Github托管外森渐,還提供國內(nèi)鏡像供下載,同時還支持conda和homebrew安裝冒晰。

用戶只需要下載同衣、解壓,開箱即用壶运,無需配置耐齐,僅需下載解壓NCBI Taxonomy數(shù)據(jù)文件解壓到指定目錄即可。

選擇系統(tǒng)對應(yīng)的版本下載最新版 https://github.com/shenwei356/taxonkit/releases 辕翰,解壓后添加環(huán)境變量即可使用”芬辏或可選conda安裝

conda install taxonkit -c bioconda -y

表格數(shù)據(jù)處理喜命,推薦使用 csvtk 更高效:

conda install csvtk -c bioconda -y

測試數(shù)據(jù)下載可直接 https://github.com/shenwei356/taxonkit 下載項目壓縮包,或使用git clone下載項目文件夾河劝,其中的example為測試數(shù)據(jù)

git clone https://github.com/shenwei356/taxonkit

TaxonKit為命令行工具壁榕,采用子命令的方式來執(zhí)行不同功能, 大多數(shù)子命令支持標準輸入/輸出赎瞎,便于使用命令行管道進行流水作業(yè)牌里, 輕松整合進分析流程中。

  • 輸出:
    • 所有命令輸出中包含輸入數(shù)據(jù)內(nèi)容务甥,在此基礎(chǔ)上增加列牡辽。
    • 所有命令默認輸出到標準輸出(stdout),可通過重定向(>)寫入文件缓呛。
    • 或通過全局參數(shù)-o--out-file指定輸出文件催享,且可自動識別輸出文件后綴(.gz)輸出gzip格式。
  • 輸入:
    • 除了listtaxid-changelog之外哟绊,lineage, reformat, name2taxid, filterlca 均可從標準輸入(stdin)讀取輸入數(shù)據(jù)因妙,也可通過位置參數(shù)(positional arguments)輸入,即命令后面不帶 任何flag的參數(shù)票髓,如 taxonkit lineage taxids.txt
    • 輸入格式為單列攀涵,或者制表符分隔的格式,輸入數(shù)據(jù)所在列用-i--taxid-field指定洽沟。

TaxonKit直接解析NCBI Taxonomy數(shù)據(jù)文件(2秒左右)以故,配置更容易,也便于更新數(shù)據(jù)裆操,占用內(nèi)存在500Mb-1.5G左右怒详。 數(shù)據(jù)下載:

# 有時下載失敗炉媒,可多試幾次;或嘗試瀏覽器下載此鏈接
wget -c https://ftp.ncbi.nih.gov/pub/taxonomy/taxdump.tar.gz 
tar -zxvf taxdump.tar.gz

# 解壓文件存于家目錄中.taxonkit/昆烁,程序默認數(shù)據(jù)庫默認目錄
mkdir -p $HOME/.taxonkit
cp names.dmp nodes.dmp delnodes.dmp merged.dmp $HOME/.taxonkit

Taxonkit的作者大大貼心地提供了中文文檔:https://bioinf.shenwei.me/taxonkit/chinese/吊骤,非常詳細,大家可以參考使用静尼。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末白粉,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子鼠渺,更是在濱河造成了極大的恐慌鸭巴,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,490評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件拦盹,死亡現(xiàn)場離奇詭異鹃祖,居然都是意外死亡,警方通過查閱死者的電腦和手機普舆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評論 3 395
  • 文/潘曉璐 我一進店門惯豆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人奔害,你說我怎么就攤上這事〉叵ǎ” “怎么了华临?”我有些...
    開封第一講書人閱讀 165,830評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長端考。 經(jīng)常有香客問我雅潭,道長,這世上最難降的妖魔是什么却特? 我笑而不...
    開封第一講書人閱讀 58,957評論 1 295
  • 正文 為了忘掉前任扶供,我火速辦了婚禮,結(jié)果婚禮上裂明,老公的妹妹穿的比我還像新娘椿浓。我一直安慰自己,他們只是感情好闽晦,可當我...
    茶點故事閱讀 67,974評論 6 393
  • 文/花漫 我一把揭開白布扳碍。 她就那樣靜靜地躺著,像睡著了一般仙蛉。 火紅的嫁衣襯著肌膚如雪笋敞。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,754評論 1 307
  • 那天荠瘪,我揣著相機與錄音夯巷,去河邊找鬼赛惩。 笑死,一個胖子當著我的面吹牛趁餐,可吹牛的內(nèi)容都是我干的喷兼。 我是一名探鬼主播,決...
    沈念sama閱讀 40,464評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼澎怒,長吁一口氣:“原來是場噩夢啊……” “哼褒搔!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起喷面,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤星瘾,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后惧辈,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體琳状,經(jīng)...
    沈念sama閱讀 45,847評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,995評論 3 338
  • 正文 我和宋清朗相戀三年盒齿,在試婚紗的時候發(fā)現(xiàn)自己被綠了念逞。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,137評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡边翁,死狀恐怖翎承,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情符匾,我是刑警寧澤叨咖,帶...
    沈念sama閱讀 35,819評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站啊胶,受9級特大地震影響甸各,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜焰坪,卻給世界環(huán)境...
    茶點故事閱讀 41,482評論 3 331
  • 文/蒙蒙 一趣倾、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧某饰,春花似錦儒恋、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,023評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至瘟仿,卻和暖如春箱锐,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背劳较。 一陣腳步聲響...
    開封第一講書人閱讀 33,149評論 1 272
  • 我被黑心中介騙來泰國打工驹止, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留浩聋,地道東北人。 一個月前我還...
    沈念sama閱讀 48,409評論 3 373
  • 正文 我出身青樓臊恋,卻偏偏與公主長得像衣洁,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子抖仅,可洞房花燭夜當晚...
    茶點故事閱讀 45,086評論 2 355

推薦閱讀更多精彩內(nèi)容