NCBIデータベースへのアクセス方法
NCBIにはデータベースにアクセスするための統合的なインターフェースとしてEntrez(発音:アントレ)が用意されています。
EntrezではEntrez Programming Utilities (E-utilities, EUtils)を介してプログラムからアクセスすることも可能です。ただし、プログラムからNCBIデータベースにアクセスするためには「アクセス頻度の上限を守る」「API keyやemailアドレスを指定する」などのルールがありやや敷居の高いものになっています。
PythonのバイオインフォマティクスライブラリであるBiopythonでは、Entrezにアクセスするためのラッパーが用意されており、それを用いると自動的にEntrezのルールに則ったプログラムを書くことができるので、ぜひそれを用いましょう。
本記事ではデータベースアクセスの基本となるデータベースからの情報の取得方法について解説します。
なお、記事中の
Entrez.email = "your_mail_address@sample.com" # 自分のメールアドレスを指定します
の部分は自分のメールアドレスに置き換える必要があります。自分のメールアドレスを指定することによって、データベースへのアクセスに問題がある場合などに通知されるようです。
Entrezでアクセスできるデータベースについての情報を取得する
データベースの一覧を取得する
Entrez.einfo関数の引数に何も指定しないで実行すると、Entrezでアクセス可能なデータベースの一覧を取得することができます。
from Bio import Entrez
Entrez.email = "your_mail_address@sample.com" # 自分のメールアドレスを指定します
handle = Entrez.einfo()
record = Entrez.read(handle)
handle.close()
print(record)
{'DbList': ['pubmed', 'protein', 'nuccore', 'ipg', 'nucleotide', 'structure', 'sparcle', 'genome', 'annotinfo', 'assembly', 'bioproject', 'biosample', 'blastdbinfo', 'books', 'cdd', 'clinvar', 'gap', 'gapplus', 'grasp', 'dbvar', 'gene', 'gds', 'geoprofiles', 'homologene', 'medgen', 'mesh', 'ncbisearch', 'nlmcatalog', 'omim', 'orgtrack', 'pmc', 'popset', 'probe', 'proteinclusters', 'pcassay', 'biosystems', 'pccompound', 'pcsubstance', 'seqannot', 'snp', 'sra', 'taxonomy', 'biocollections', 'gtr']}
DictionaryElementオブジェクトのキーが’DbList’で、値でデータベース一覧が得られました。
データベースの詳細情報を取得する
次に、Entrez.einfo関数の引数にデータベース名を指定して、そのデータベースの詳細を確認します。戻り値はキーが’DbInfo’のDictionaryElementオブジェクトとなり、’DbInfo’の値としてデータベースの情報が格納されます。
from Bio import Entrez
Entrez.email = "your_mail_address@sample.com" # 自分のメールアドレスを指定します
handle = Entrez.einfo(db='pubmed')
record = Entrez.read(handle)
handle.close()
print(record["DbInfo"].keys())
dict_keys(['DbName', 'MenuName', 'Description', 'DbBuild', 'Count', 'LastUpdate', 'FieldList', 'LinkList'])
上のコードはdb引数に’pubmed’を指定していますが、ほかのデータベースでも同様の結果が得られて、データベースについての情報としては以下の項目が格納されていることが分かります。
- DbName : E-utilitiesにおけるデータベース名
- MenuName : Entrezデータベース名
- Description : データベースの説明
- DbBuild : ビルド
- Count : エントリー数
- LastUpdate : 最終更新日
- FieldList : データベースのフィールドリスト
- LinkList : データベースのリンク名のリスト (リンク名の一覧)
データベースからレコードを取得する
Entrez.efetch関数を用いて、データベースからレコードを取得できます。
Entrez.efetch関数のdb引数にどのデータベースからレコードを検索するかを指定します。指定できるデータベース名はこちらのE-utility Database Nameの中から指定します。なお、一部のデータベースは別名(Entrez Databaseで示されている名前など)で指定しても正しく認識されるようです。
id引数にはそれぞれのデータベースにおけるUIDを指定します。こちらの表のそれぞれのデータベースのUID common nameがここで指定できるUIDとなります。
rettype引数とretmode引数の組み合わせで、データベースから取得する要素とその形式を指定します。こちらにそれぞれのデータベースごとに、有効なrettype引数とretmode引数の組み合わせが載っています。
PubMedのAbstractを取得する
Entrez.efetch関数のdb引数を’pubmed’とし、id引数にはPMIDを指定します。また、Abstractを取得するためにはこちらを参考にして、rettype引数を’abstract’とし、retmode引数を’text’とします。
from Bio import Entrez
Entrez.email = "your_mail_address@sample.com" # 自分のメールアドレスを指定します
handle = Entrez.efetch(db='pubmed', id="19304878", rettype='abstract', retmode='text')
record = handle.read()
handle.close()
print(record)
1. Bioinformatics. 2009 Jun 1;25(11):1422-3. doi: 10.1093/bioinformatics/btp163. Epub 2009 Mar 20. Biopython: freely available Python tools for computational molecular biology and bioinformatics. Cock PJ(1), Antao T, Chang JT, Chapman BA, Cox CJ, Dalke A, Friedberg I, Hamelryck T, Kauff F, Wilczynski B, de Hoon MJ. Author information: (1)Plant Pathology, SCRI, Invergowrie, Dundee, UK. peter.cock@scri.ac.uk SUMMARY: The Biopython project is a mature open source international collaboration of volunteer developers, providing Python library for a wide range of bioinformatics problems. Biopython includes modules for reading and writing different sequence file formats and multiple sequence alignments, dealing with 3D macro molecular structures, interacting with common tools such as BLAST, ClustalW and EMBOSS, accessing key online databases, as well as providing numerical methods for statistical learning. AVAILABILITY: Biopython is freely available, with documentation and source code at (www.biopython.org) under the Biopython license. DOI: 10.1093/bioinformatics/btp163 PMCID: PMC2682512 PMID: 19304878 [Indexed for MEDLINE]
これにより、PubMed(PMID : 19304878)と同じ情報が得られました。ちなみに、この論文がBiopythonについての論文になります。
GenBankからシークエンスデータを取得する
Entrez.efetch関数のdb引数を’nuccore’とし、id引数にはアクセッション番号を指定します。GenBank flat fileとして取得するためにはこちらを参考にして、rettype引数を’gb’とし、retmode引数を’text’とします。GenBank flat fileとして取得することで、SeqRecordオブジェクトに変換することができるので、最後にSeqIO.read関数でパースします。
from Bio import Entrez, SeqIO
Entrez.email = "your_mail_address@sample.com" # 自分のメールアドレスを指定します
handle = Entrez.efetch(db='nuccore', id='NC_045512.2', rettype='gb', retmode='text')
record = SeqIO.read(handle, "genbank")
handle.close()
print(record)
ID: NC_045512.2 Name: NC_045512 Description: Severe acute respiratory syndrome coronavirus 2 isolate Wuhan-Hu-1, complete genome Database cross-references: BioProject:PRJNA485481 Number of features: 57 ...... Seq('ATTAAAGGTTTATACCTTCCCAGGTAACAAACCAACCAACTTTCGATCTCTTGT...AAA', IUPACAmbiguousDNA())
これによりSARS-CoC-2のゲノムデータのリファレンス配列がSeqRecordオブジェクトとして得られました。
参考
参考文献
Biopython を利用したNCBIのEntrez データベースへのアクセス(Qiita)
- Biopythonのcookbookの日本語訳です。本記事で紹介していないことも含めて詳細に解説されています。
コメント