Introduction
目的是要一次大量下載NCBI的assembly genome
Q:這種需求什麼時候會用上呢?
A: 生物資訊分析genomics或metageomics資料常會需要下載指定物種或是所有屬於微生物的genomes
可以達到這下載genomes的工具比較有名的有2個
NCBI有推出一個下載工具datasets,但實測發現一次下載數千個genome會常失敗,而且是沒有resume模式的,得要重新下載
更新: v14之後比較穩定了,數千等級genomes可以在數小時內下載完成
還有註冊NCBI帳號獲得API key可以獲得更高的訪問限制(10次/s)ncbi-genome-download
但他沒有辦法下載某個rank以下的所有genome,還有一個痛點是下載大量genomes時難免會有下載的檔案不完整或是因為頻繁的訪問導致被NCBI阻擋導致下載中斷
所以自己開發一套可以滿足自己需求的下載工具 Makura
Makura可以達到以下需求,但在介紹之前先做一些基本知識補充
基本知識補充
對於很了解NCBI資料庫的人來說接下來提到的一些名詞應該很熟悉,如果很懂的就直接跳過吧
NCBI把genome存放在Assembly資料庫
除了基本的genome的fasta還有組裝(assembly)的QC統計結果和基因註解結果
A database providing information on the structure of assembled genomes, assembly names and other meta-data, statistical reports, and links to genomic sequence data.
Assembly資料庫分成Genbank和RefSeq兩個子資料庫
簡單說Genbank收錄所有上傳的genomes, 而RefSeq則是NCBI挑選出序列資料較完整的genome
會有這樣的區分是因為Genbank只要是貢獻者上傳就會收錄,不管他的genome組裝的多爛
沒有註解資料也沒關係
也算是不要對貢獻者設限太多,畢竟不是每個人都對基因體資料很熟悉,搞得太難,讓人不想上傳反而本末導致
每個assembly genome都會有個唯一的ID: assembly accession
收錄在RefSeq的話開頭是GCF_
, Genbank則是GCA_
後面會接9個數字,然後是組裝的版本號碼
e.g. GCF_016699485.2
.2表示這個genome是第2版,更新原因可能是上傳者用不同組裝演算法組裝出更完整的genome
Taxonomy資料庫記錄物種的分類資訊
每個genome都會有個Taxonomy ID (taxid)
taxid大致依照三域分類法,但也是有些特殊排序
繼續上面的例子,GCF_016699485.2的taxid為9031, name為Gallus gallus
該taxid的階層關係稱為lineage, 每個rank都會有taxid,
像是Eukaryota的taxid為2759, rank name為superkingdom
Lineage( full )
cellular organisms; Eukaryota; Opisthokonta; Metazoa; Eumetazoa; Bilateria; Deuterostomia; Chordata; Craniata; Vertebrata; Gnathostomata; Teleostomi; Euteleostomi; Sarcopterygii; Dipnotetrapodomorpha; Tetrapoda; Amniota; Sauropsida; Sauria; Archelosauria; Archosauria; Dinosauria; Saurischia; Theropoda; Coelurosauria; Aves; Neognathae; Galloanserae; Galliformes; Phasianidae; Phasianinae; Gallus
Assembly summary: 記錄所有的genome report
要知道NCBI收錄的所有assembly genome有哪些需要下載assembly_summary
content consists of four summary report files that include meta-data details of all the latest GenBank assemblies, all the latest RefSeq assemblies
依據Genbank和RefSeq分成兩個tab檔
- assembly_summary_genbank.txt
- assembly_summary_refseq.txt
(genbank有450多M別直接點開)
下載這張大表之後主要會使用到assembly_accession, taxid, ftp_path
assembly_accession是唯一ID,所以用來檢索符合條件的genome
taxid會轉換成lineage,得知該genome的所有rank的taxid
ftp_path是下載時的連結
指定下載bacteria, archea, viral, fungi, invertebrate等大分類的group中的genome
會說是大分類是因為雖然NCBI主要是用三域分類法區分,但在他們的FTP儲存的子目錄也不是完全以這個分類方法區分
舉例來看RefSeq的子目錄有archaea, bacteria, fungi, invertebrate, plant, protozoa, vertebrate_mammalian, vertebrate_other, viral
所以實際上是要下載子目錄(如vertebrate_other)下的genome
https://ftp.ncbi.nlm.nih.gov/genomes/refseq
Index of /genomes/refseq
Name Last modified Size Parent Directory -
archaea/ 2022-12-11 00:34 -
bacteria/ 2022-12-11 01:18 -
fungi/ 2022-12-11 00:33 -
invertebrate/ 2022-12-11 08:08 -
mitochondrion/ 2022-11-10 17:48 -
plant/ 2022-12-11 08:08 -
plasmid/ 2022-11-10 13:06 -
plastid/ 2022-11-11 04:53 -
protozoa/ 2022-12-11 00:32 -
unknown/ 2022-09-27 00:25 -
vertebrate_mammalian/ 2022-12-11 00:32 -
vertebrate_other/ 2022-12-11 00:32 -
viral/ 2022-12-11 01:18 -
README.txt 2020-01-27 16:55 11K
assembly_summary_refseq.txt 2022-12-11 08:09 83M
assembly_summary_refseq_historical.txt 2022-12-11 08:09 18M
指定下載某個rank以下的genome
假設想要下載bacillus這個屬以下的所有genomes,首先就要查詢taxid的lineage
然後找出所有在這個taxid之下的assembly genomes有哪些
Installation
Makura是Python的套件,至少要Python 3.8以上
還需要Rsync,經過反覆測試之後發現以rsync協議下載最穩定
ftp或https都滿常會中斷
我有上傳到Pypi,所以用pip install makura
理論上就安裝好了
Usage
有三個subcommand可以用
update
從NCBI更新assembly summary和taxonomy資訊
makura update --assembly-source refseq
download
makura的核心功能就是下載genomes
為了確保下載的檔案是完整的會做MD5檔案驗證
會在輸出的目錄寫入名為md5checksums.txt
的檔案
e.g. 每行是以tab分隔md5和genome檔案相對位置
7d281bb5dc436b2df3e5fea319d6d4f7 ./GCF_000979925.1_gtlEnvA5udCFS_genomic.fna.gz
bfcbcd6cf629b1929b48a861631249b7 ./GCF_000980075.1_gtlEnvA5udCFS_genomic.fna.gz
e1d9a0865497344c512d8e9606a1e654 ./GCF_000979995.1_gtlEnvA5udCFS_genomic.fna.gz
b42281843e6fa66b99b448488a24325c ./GCF_000979575.1_gtlEnvA5udCFS_genomic.fna.gz
如果不幸下載中斷,makura也會依據這份檔案確認下載進度,不會全部重新下載
若是要更新assembly summary再下載也可以只下載NCBI新收錄的genomes
下載所有微生物genomes
一般微生物是bacteria, archea, fungi, viral, protozoa
但一些藻類也是他們分散在plant和protozoa
所以我自己有整理出一個group類別是aglea
makura download --groups bacteria,archea,fungi,viral,protozoa,aglea -o /path/to/dir
或是
makura download --microbiome -o /path/to/dir
RefSeq屬於微生物的genomes大概有28萬個,實測全部下載完大概要4天
下載Bacillus屬以下的genome
Bacillus的taxid是55087
makura download --taxids 55087 -o /path/to/dir
以檔案作為輸入
如果要輸入的id太多可以用以換行符號為分隔的檔案作為輸入
e.g. taxid_list.txt
61645
69218
550
makura download --taxid-list taxid_list.txt -o /path/to/dir
summary
如果只是想知道輸入的參數會回傳那些assembly可以使用summary
makura summary --taxid 2 | less
Features in the future
未來預計makura會新增以下功能
- 依據下載的genomes,建立minimap2, bwa, mash等比對演算法的index files
- 可以選擇更多類別篩選下載的genomes, 如organism name, bioproject, biosample…