はじめに
NCBIからゲノム情報をダウンロード(genbank, fastaファイルの取得)するにはWEBからポチポチやるのが一般的だとは思うのですが、ダウンロード数が100個とか1000個となると、流石にしんどいと思います。自分でスクリプト組んでも良いのかも知れませんが、いい感じのスクリプトを作ってくれている人達がいますので、拝借しましょう。今回はncbi-genome-downloadを使用します。
ncbi-genome-downloadのインストール
pipコマンドを使用してncbi-genome-downloadをインストールします。 “pip install ncbi-genome-download”
bio@bio:$pip install ncbi-genome-download
Defaulting to user installation because normal site-packages is not writeable
Collecting ncbi-genome-download
Downloading ncbi_genome_download-0.3.1-py2.py3-none-any.whl (25 kB)
Requirement already satisfied: tqdm in ./.local/lib/python3.10/site-packages (from ncbi-genome-download) (4.63.1)
Collecting appdirs
Downloading appdirs-1.4.4-py2.py3-none-any.whl (9.6 kB)
Requirement already satisfied: requests>=2.4.3 in ./.local/lib/python3.10/site-packages (from ncbi-genome-download) (2.27.1)
Requirement already satisfied: urllib3<1.27,>=1.21.1 in ./.local/lib/python3.10/site-packages (from requests>=2.4.3->ncbi-genome-download) (1.26.8)
Requirement already satisfied: charset-normalizer~=2.0.0 in ./.local/lib/python3.10/site-packages (from requests>=2.4.3->ncbi-genome-download) (2.0.12)
Requirement already satisfied: certifi>=2017.4.17 in ./.local/lib/python3.10/site-packages (from requests>=2.4.3->ncbi-genome-download) (2021.10.8)
Requirement already satisfied: idna<4,>=2.5 in ./.local/lib/python3.10/site-packages (from requests>=2.4.3->ncbi-genome-download) (3.3)
Installing collected packages: appdirs, ncbi-genome-download
Successfully installed appdirs-1.4.4 ncbi-genome-download-0.3.1
インストールが終わったらひとまず “ncbi-genome-download -h” と打ち込み、どんなオプションがあるか確認しましょう。
bio@bio:$ncbi-genome-download -h
usage: ncbi-genome-download [-h] [-s {refseq,genbank}] [-F FILE_FORMATS] [-l ASSEMBLY_LEVELS] [-g GENERA] [--genus GENERA] [--fuzzy-genus] [-S STRAINS] [-T SPECIES_TAXIDS] [-t TAXIDS]
[-A ASSEMBLY_ACCESSIONS] [-R REFSEQ_CATEGORIES] [--refseq-category REFSEQ_CATEGORIES] [-o OUTPUT] [--flat-output] [-H] [-P] [-u URI] [-p N] [-r N] [-m METADATA_TABLE] [-n]
[-N] [-v] [-d] [-V] [-M TYPE_MATERIALS]
groups
positional arguments:
groups The NCBI taxonomic groups to download (default: all). A comma-separated list of taxonomic groups is also possible. For example: "bacteria,viral"Choose from: ['all', 'archaea',
'bacteria', 'fungi', 'invertebrate', 'metagenomes', 'plant', 'protozoa', 'vertebrate_mammalian', 'vertebrate_other', 'viral']
options:
-h, --help show this help message and exit
-s {refseq,genbank}, --section {refseq,genbank}
NCBI section to download (default: refseq)
-F FILE_FORMATS, --formats FILE_FORMATS
Which formats to download (default: genbank).A comma-separated list of formats is also possible. For example: "fasta,assembly-report". Choose from: ['genbank', 'fasta', 'rm',
'features', 'gff', 'protein-fasta', 'genpept', 'wgs', 'cds-fasta', 'rna-fna', 'rna-fasta', 'assembly-report', 'assembly-stats', 'all']
-l ASSEMBLY_LEVELS, --assembly-levels ASSEMBLY_LEVELS
Assembly levels of genomes to download (default: all). A comma-separated list of assembly levels is also possible. For example: "complete,chromosome". Choose from: ['all',
'complete', 'chromosome', 'scaffold', 'contig']
-g GENERA, --genera GENERA
Only download sequences of the provided genera. A comma-seperated list of genera is also possible. For example: "Streptomyces coelicolor,Escherichia coli". (default: [])
--genus GENERA Deprecated alias of --genera
--fuzzy-genus Use a fuzzy search on the organism name instead of an exact match.
-S STRAINS, --strains STRAINS
Only download sequences of the given strain(s). A comma-separated list of strain names is possible, as well as a path to a filename containing one name per line.
-T SPECIES_TAXIDS, --species-taxids SPECIES_TAXIDS
Only download sequences of the provided species NCBI taxonomy IDs. A comma-separated list of species taxids is also possible. For example: "52342,12325". (default: [])
-t TAXIDS, --taxids TAXIDS
Only download sequences of the provided NCBI taxonomy IDs. A comma-separated list of taxids is also possible. For example: "9606,9685". (default: [])
-A ASSEMBLY_ACCESSIONS, --assembly-accessions ASSEMBLY_ACCESSIONS
Only download sequences matching the provided NCBI assembly accession(s). A comma-separated list of accessions is possible, as well as a path to a filename containing one
accession per line.
-R REFSEQ_CATEGORIES, --refseq-categories REFSEQ_CATEGORIES
Only download sequences of the provided refseq categories (default: all)
--refseq-category REFSEQ_CATEGORIES
Deprecated alias for --refseq-categories
-o OUTPUT, --output-folder OUTPUT
Create output hierarchy in specified folder (default: /home/bio)
--flat-output Dump all files right into the output folder without creating any subfolders.
-H, --human-readable Create links in human-readable hierarchy (might fail on Windows)
-P, --progress-bar Create a progress bar for indicating the download progress
-u URI, --uri URI NCBI base URI to use (default: https://ftp.ncbi.nih.gov/genomes)
-p N, --parallel N Run N downloads in parallel (default: 1)
-r N, --retries N Retry download N times when connection to NCBI fails (default: 0)
-m METADATA_TABLE, --metadata-table METADATA_TABLE
Save tab-delimited file with genome metadata
-n, --dry-run Only check which files to download, don't download genome files.
-N, --no-cache Don't cache the assembly summary file in /home/bio/.cache/ncbi-genome-download.
-v, --verbose increase output verbosity
-d, --debug print debugging information
-V, --version print version information
-M TYPE_MATERIALS, --type-materials TYPE_MATERIALS
Specifies the relation to type material for the assembly (default: any). "any" will include assemblies with no relation to type material value defined, "all" will download only
assemblies with a defined value. A comma-separated list of relatons. For example: "reference,synonym". Choose from: ['any', 'all', 'type', 'reference', 'synonym', 'proxytype',
'neotype'] .
とにかく何か入れたらまずはhelpを見るクセをつけておくと、エラーが出たときにさっと対処出来ますし、便利機能を見逃さずに済みます。”-h”と打つか”–help”と打てば大抵はヘルプが出ます。
今回は練習としてみんな大好きE. coliのゲノムデータをダウンロードしてみましょう。
ゲノムデータのdownload (dry-run)
“ncbi-genome-download -g “Escherichia coli” bacteria -n”で実行してみます。
-g が菌種や属名で今回はE. coliを指定しています。
-n はドライランで実際にダウンロードする前にそのリストを見ることができます。
bio@bio:$ncbi-genome-download -g "Escherichia coli" bacteria -n
# すごくいっぱいリストが返されると思います
bio@bio:$ncbi-genome-download -g "Escherichia coli" bacteria -n >e_coli_list
# ひとまず、リストを出力
bio@bio:$less e_coli_list
# リストの中身を見てみる
Considering the following 29875 assemblies for download:
GCF_000157115.2 Escherichia coli 3_2_53FAA
GCF_000308975.1 Escherichia coli IMT2125
GCF_000597845.1 Escherichia coli ST540
GCF_000599625.1 Escherichia coli ST540
GCF_000599645.1 Escherichia coli ST540
GCF_000599665.1 Escherichia coli ST2747
GCF_000599685.1 Escherichia coli ST2747
GCF_000599705.1 Escherichia coli ST2747
GCF_000599725.2 Escherichia coli UCD_JA03
・
・
・
# 29875株分のリストが得られている
流石と言うべきか、E. coliはデータ数が多いので全データをダウンロードするのは時間がかかりますね。とりあえず今回はReference genomesとなっているE. coliのみをダウンロードしようと思います。”ncbi-genome-download -g “Escherichia coli” bacteria -n –refseq-categories reference”を実行してみましょう。
bio@bio:$ncbi-genome-download -g "Escherichia coli" bacteria -n --refseq-categories reference
Considering the following 2 assemblies for download:
GCF_000008865.2 Escherichia coli O157:H7 str. Sakai Sakai substr. RIMD 0509952
GCF_000005845.2 Escherichia coli str. K-12 substr. MG1655 K-12 substr. MG1655
これで2つの菌株がダウンロードされることがわかりました。
ちなみに普通?はReference genomeは1つですね。
あと菌種によってReference genomeがあるパターンとRepresentative genomeがあるパターンのどちらかになります。
この違いは前者がNCBIやコミュニティが他のデータと比較する際に基準として重要なハイクオリティのゲノムを手動で選択したもので、後者はReference genomeほどいい感じのものはないけど、とりあえず代表的なものを選択しました。的な感じです。参照(https://www.ncbi.nlm.nih.gov/assembly/help/#glossary)
上記のような理由で選択されていますので、少しマイナーな菌種ですと、いいデータがアップロードされたときなど、比較的頻繁に更新されます。
E. coliはReference genomeでしたが、Representative genomeであるパターンも考慮し、–refseq-categoriesに,referenceを加えて
bio@bio:$ncbi-genome-download -g "Escherichia coli" bacteria -n --refseq-categories representative,reference
Considering the following 2 assemblies for download:
GCF_000008865.2 Escherichia coli O157:H7 str. Sakai Sakai substr. RIMD 0509952
GCF_000005845.2 Escherichia coli str. K-12 substr. MG1655 K-12 substr. MG1655
とするのが無難でしょう。
さらに今回は-Fでgenbank形式とFASTA形式の2つをダウンロードの対象にします。(defaultはgenbankのみ)
bio@bio:$ncbi-genome-download -g "Escherichia coli" bacteria -n --refseq-categories representative,reference -F genbank,fasta
Considering the following 2 assemblies for download:
GCF_000008865.2 Escherichia coli O157:H7 str. Sakai Sakai substr. RIMD 0509952
GCF_000005845.2 Escherichia coli str. K-12 substr. MG1655 K-12 substr. MG1655
ゲノムデータのdownload
それでは、いよいよ-n をはずしてダウンロードしましょう
bio@bio:$ncbi-genome-download -g "Escherichia coli" bacteria --refseq-categories representative,reference -F genbank,fasta
# 回線速度によりますが、10秒程度でダウンロードできると思います
bio@bio:$ls refseq/bacteria/GCF_00000*
refseq/bacteria/GCF_000005845.2:
GCF_000005845.2_ASM584v2_genomic.fna.gz GCF_000005845.2_ASM584v2_genomic.gbff.gz MD5SUMS
refseq/bacteria/GCF_000008865.2:
GCF_000008865.2_ASM886v2_genomic.fna.gz GCF_000008865.2_ASM886v2_genomic.gbff.gz MD5SUMS
#こんな感じでダウンロードされていればOKです。
“実行先/refseq/bacteria/ここにダウンロードされる”にファイルがあれば成功です。gz形式で圧縮されていますので、gzip等で解凍して中身をlessコマンドを使用して見てみましょう。
bio@bio:$gzip -d GCF_000008865.2_ASM886v2_genomic.gbff.gz
# -dで解凍です
bio@bio:$less GCF_000008865.2_ASM886v2_genomic.gbff
LOCUS NC_002695 5498578 bp DNA circular CON 12-FEB-2021
DEFINITION Escherichia coli O157:H7 str. Sakai DNA, complete genome.
ACCESSION NC_002695
VERSION NC_002695.2
DBLINK BioProject: PRJNA226
BioSample: SAMN01911278
KEYWORDS RefSeq.
SOURCE Escherichia coli O157:H7 str. Sakai
ORGANISM Escherichia coli O157:H7 str. Sakai
・
・
・
# こんな感じで.gzがとれてlessで中身を確認できればOKです
できましたか?
問題が起こった場合はgitのissuesなどを参考にするといいでしょう。
参照(https://github.com/kblin/ncbi-genome-download)
おまけ
まとめて解凍するには以下のようにやったりします。
#findコマンドで.gzのついたファイルのパスを取得します
bio@bio:$find -name "*.gz"
./refseq/bacteria/GCF_000005845.2/GCF_000005845.2_ASM584v2_genomic.fna.gz
./refseq/bacteria/GCF_000005845.2/GCF_000005845.2_ASM584v2_genomic.gbff.gz
./refseq/bacteria/GCF_000008865.2/GCF_000008865.2_ASM886v2_genomic.gbff.gz
./refseq/bacteria/GCF_000008865.2/GCF_000008865.2_ASM886v2_genomic.fna.gz
#パイプで上のリストをつないでxargsでgzipに持っていき解凍します。(内部の処理的には一行ずつ実行していくのかな?)
bio@bio:$find -name "*.gz"|xargs gzip -d
#.gzがとれて解凍できていることを確認
bio@bio:$ls refseq/bacteria/GCF_000005845.2/
GCF_000005845.2_ASM584v2_genomic.fna GCF_000005845.2_ASM584v2_genomic.gbff MD5SUMS
#今回はfnaの方を確認
bio@bio:$less refseq/bacteria/GCF_000005845.2/GCF_000005845.2_ASM584v2_genomic.fna
>NC_000913.3 Escherichia coli str. K-12 substr. MG1655, complete genome
AGCTTTTCATTCTGACTGCAACGGGCAATATGTCTCTGTGTGGATTAAAAAAAGAGTGTCTGATAGCAGCTTCTGAACTG
GTTACCTGCCGTGAGTAAATTAAAATTTTATTGACTTAGGTCACTAAATACTTTAACCAATATAGGCATAGCGCACAGAC
AGATAAAAATTACAGAGTACACAACATCCATGAAACGCATTAGCACCACCATTACCACCACCATCACCATTACCACAGGT
AACGGTGCGGGCTGACGCGTACAGGAAACACAGAAAAAAGCCCGCACCTGACAGTGCGGGCTTTTTTTTTCGACCAAAGG
TAACGAGGTAACAACCATGCGAGTGTTGAAGTTCGGCGGTACATCAGTGGCAAATGCAGAACGTTTTCTGCGTGTTGCCG
ATATTCTGGAAAGCAATGCCAGGCAGGGGCAGGTGGCCACCGTCCTCTCTGCCCCCGCCAAAATCACCAACCACCTGGTG
GCGATGATTGAAAAAACCATTAGCGGCCAGGATGCTTTACCCAATATCAGCGATGCCGAACGTATTTTTGCCGAACTTTT
GACGGGACTCGCCGCCGCCCAGCCGGGGTTCCCGCTGGCGCAATTGAAAACTTTCGTCGATCAGGAATTTGCCCAAATAA
AACATGTCCTGCATGGCATTAGTTTGTTGGGGCAGTGCCCGGATAGCATCAACGCTGCGCTGATTTGCCGTGGCGAGAAA
ATGTCGATCGCCATTATGGCCGGCGTATTAGAAGCGCGCGGTCACAACGTTACTGTTATCGATCCGGTCGAAAAACTGCT
GGCAGTGGGGCATTACCTCGAATCTACCGTCGATATTGCTGAGTCCACCCGCCGTATTGCGGCAAGCCGCATTCCGGCTG
・
・
・
これで一括でダウンロードと解凍ができるようになります。ncbi-genome-downloadでダウンロード中にたまにproxy error(だったかな)とかで止まるんですが、もう一度実行し直せばMD5SUMS(いまからダウンロードするものと同じファイルがあるか識別するためのもの)があるので、すでにダウンロードして同じファイルがあるものはスキップされて続きからダウンロードされます。
さらに余談ですが、catでは文字列が多いファイルや先頭にタイトルやファイルの情報がある場合、表示や、先頭へ行くのに時間がかかるのでlessがオススメです。そもそもcatはファイルを繋げるのが本来の用途らしいです。
他にも色々オプションがあります。そのうち追記するかもです。
(-Fオプションを入れたバージョンにしました)
コメント