Makura安裝與使用 - 批量下載NCBI genomes


Introduction

目的是要一次大量下載NCBI的assembly genome
Q:這種需求什麼時候會用上呢?
A: 生物資訊分析genomics或metageomics資料常會需要下載指定物種或是所有屬於微生物的genomes

可以達到這下載genomes的工具比較有名的有2個

  1. NCBI有推出一個下載工具datasets,但實測發現一次下載數千個genome會常失敗,而且是沒有resume模式的,得要重新下載
    更新: v14之後比較穩定了,數千等級genomes可以在數小時內下載完成
    還有註冊NCBI帳號獲得API key可以獲得更高的訪問限制(10次/s)

  2. 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_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理論上就安裝好了

https://github.com/hunglin59638/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…

Author: Hung-Lin, Chen
Reprint policy: All articles in this blog are used except for special statements CC BY 4.0 reprint policy. If reproduced, please indicate source Hung-Lin, Chen !
 Previous
2022 Review雞腸道菌相分析方法 2022 Review雞腸道菌相分析方法
研究雞的腸道菌相除了要做基礎研究外,大多是為了提升生長和生產表現以及減少對抗生素依賴來看看近幾年的相關研究的菌相分析方法以及分析流程會使用到哪些工具
2022-12-19
Next 
No space left on device - Too many files in a single directory No space left on device - Too many files in a single directory
最近從NCBI下載大量的genome fasta到硬碟的單一目錄下到16000左右的時候就跳出類似下方的錯誤訊息 mv: cannot move ‘/soure/genome.fna.gz’ to ‘/d
2022-12-02
  TOC