NCBI Entrezは、30以上もの生物学的な目的で作成されたデータベースに対する統合的なテキストベースの検索、情報抽出システムです。
このシステムは、国立バイオテクノロジー情報センター(NCBI)によって作成されています。
APIはE-utilitiesと呼ばれ、これを利用することで、Entrezが公開しているDBからデータを抽出することができます。このAPIをUNIXコマンドベースで扱いやすくしたツールが今回ご紹介するEntrez Direct(EDirect)です。
インストール
こういう時anaconda はとっても便利。
$ conda install -c bioconda entrez-direct
使い方
Entrez DirectはUNIXのターミナル上での利用を想定した下記のツール群を提供しています。
- esearch
- efetch
- xtract
- efilter
- elink
- einfo
- epost
- nquire
これらを組み合わせることにより、PubMedに限らず、RefSeqやPMCといったデータベースに簡単にアクセス、情報抽出することが可能となります。
以下ではそのそれぞれについて見ていきます。
esearch
XML形式のデータを返します。
返ってきたXMLのCount
フィールドを見ると、ブラウザベースでアクセスしたときと同じ件数の論文がヒットしていることが分かります。
$ esearch -db pubmed -query "diabetes mellitus" <ENTREZ_DIRECT> <Db>pubmed</Db> <WebEnv>NCID_1_36104953_130.14.22.33_9001_1596115476_945096257_0MetA0_S_MegaStore</WebEnv> <QueryKey>1</QueryKey> <Count>499756</Count> <Step>1</Step> </ENTREZ_DIRECT>
ブラウザでの検索結果
efetch
esearchの結果はefetchによりXMLやJSONといった扱いやすい形式で結果を取得することができます。
$ esearch -db pubmed -query "diabetes mellitus[MeSH Terms] genome[TITL]" | efetch -format xml| head -n 20 <?xml version="1.0" ?> <!DOCTYPE PubmedArticleSet PUBLIC "-//NLM//DTD PubMedArticle, 1st January 2019//EN" "https://dtd.nlm.nih.gov/ncbi/pubmed/out/pubmed_190101.dtd"> <PubmedArticleSet> <PubmedArticle> <MedlineCitation Status="MEDLINE" Owner="NLM"> <PMID Version="1">32084158</PMID> <DateCompleted> <Year>2020</Year> <Month>05</Month> <Day>05</Day> </DateCompleted> <DateRevised> <Year>2020</Year> <Month>05</Month> <Day>05</Day> </DateRevised> <Article PubModel="Electronic-eCollection"> <Journal> <ISSN IssnType="Electronic">1932-6203</ISSN> <JournalIssue CitedMedium="Internet">
xtract
XML形式データの特定のフィールドから、条件に合う属性値を抽出することができます。
このツールにより扱いやすいタブ区切りテキストとしてデータを取得することができます。
$ esearch -db pubmed -query "diabetes mellitus[MeSH Terms] genome[TITL]" | efetch -format docsum | xtract -pattern DocumentSummary -element Id Title | head -n 5 32084158 Genome wide analysis of gene expression changes in skin from patients with type 2 diabetes. 32000589 Genome-Wide Polygenic Score and the Risk of Ischemic Stroke in a Prospective Cohort: The Hisayama Study. 31910446 Genome-wide association study of metabolic syndrome in Korean populations. 31835862 The Detection and Partial Localisation of Heteroplasmic Mutations in the Mitochondrial Genome of Patients with Diabetic Retinopathy. 31757015 Altered Genome-Wide DNA Methylation in Peripheral Blood of South African Women with Gestational Diabetes Mellitus.
efilter
クエリや期間などにより結果の絞り込みを行うことができます。
例えば「Japanese」という単語で絞り込みを行う際には下記のようにします。
$ esearch -db pmc -query "diabetes mellitus[MeSH Terms] genome[TITL]" | efilter -query "Japanese" <ENTREZ_DIRECT> <Db>pmc</Db> <WebEnv>NCID_1_36488250_130.14.22.33_9001_1596128125_1396174236_0MetA0_S_MegaStore</WebEnv> <QueryKey>2</QueryKey> <Count>106</Count> <Step>2</Step> </ENTREZ_DIRECT>
347 → 106に絞り込めていることが分かりますね。
elink
データベース内外から関連性の高い書誌情報を提示します。
返り値はesearchと同様のXML形式となっています。
$ esearch -db pubmed -query "diabetes mellitus[MeSH Terms] genome[TITL]" | elink -related <ENTREZ_DIRECT> <Db>pubmed</Db> <WebEnv>NCID_1_19078587_130.14.18.97_9001_1596127386_1829630108_0MetA0_S_MegaStore</WebEnv> <QueryKey>3</QueryKey> <Count>38943</Count> <Step>2</Step> </ENTREZ_DIRECT>
einfo
einfoを使うと、Entrezで使用可能なデータベースの情報を取得することができます。
$ einfo -dbs
annotinfo
assembly
biocollections
.
.
.
使用可能なフィールドに関しては-fields
を使用して同様に取得可能です。
$ einfo -db pubmed -fields
epost
一意の識別子(UID)またはシーケンスアクセッション番号をアップロードし、
その情報に対して識別子がWebEnvフィールドの値として返されます。
これを使うことで、IDでのクエリ検索が可能となります。
$ epost -db pubmed -id 22966225,19880848 <ENTREZ_DIRECT> <Db>pubmed</Db> <WebEnv>NCID_1_36211697_130.14.22.33_9001_1596118997_191731836_0MetA0_S_MegaStore</WebEnv> <QueryKey>2</QueryKey> <Count>2</Count> <Step>1</Step> </ENTREZ_DIRECT>
$ epost -db pubmed -id 22966225,19880848 | efetch -format pubmed | xtract -pattern DocumentSummary -element Id PubDate Title 22966225 2012 The Key to Unlocking the Chemotherapeutic Potential of PPARγ Ligands: Having the Right Combination. 19880848 2009 Dec Treating inflammation in atherosclerotic cardiovascular disease: emerging therapies.
nquire
URLリクエストをWebページまたはCGIサービスに送信します。
curl
のパラメータを渡しやすくしただけみたいなコマンドです。
$ nquire -url "https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi" -db pubmed -term insulin <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE eSearchResult PUBLIC "-//NLM//DTD esearch 20060628//EN" "https://eutils.ncbi.nlm.nih.gov/eutils/dtd/20060628/esearch.dtd"> <eSearchResult><Count>415492</Count><RetMax>20</RetMax><RetStart>0</RetStart><IdList> <Id>32726796</Id> <Id>32726654</Id> <Id>32726642</Id> <Id>32726606</Id> <Id>32726560</Id> <Id>32726409</Id> <Id>32726270</Id> <Id>32725594</Id> <Id>32725591</Id> <Id>32725585</Id> <Id>32725517</Id> <Id>32725444</Id> <Id>32725362</Id> <Id>32725339</Id> <Id>32725280</Id> <Id>32725267</Id> <Id>32725188</Id> <Id>32725157</Id> <Id>32725096</Id> <Id>32725063</Id> </IdList><TranslationSet><Translation> <From>insulin</From> <To>"insulin"[MeSH Terms] OR "insulin"[All Fields]</To> </Translation></TranslationSet><TranslationStack> <TermSet> <Term>"insulin"[MeSH Terms]</Term> <Field>MeSH Terms</Field> <Count>184630</Count> <Explode>Y</Explode> </TermSet> <TermSet> <Term>"insulin"[All Fields]</Term> <Field>All Fields</Field> <Count>415515</Count> <Explode>N</Explode> </TermSet> <OP>OR</OP> <OP>GROUP</OP> </TranslationStack><QueryTranslation>"insulin"[MeSH Terms] OR "insulin"[All Fields]</QueryTranslation></eSearchResult>
下記コマンドでも同じ結果が得られます。
$ curl "https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?db=pubmed&term=insulin"
その他
ローカルでのテキストマイニング
achive-pubmed
コマンドを使うと3,000万件近いPubMedの全データをローカルに落とすことができちゃいます(注意:300GB程度のストレージが必要です)。
$ achive-pubmed /path/to/save
これを行うと、毎回httpリクエストを投げる必要がなくなり、高速に処理を行うことが可能です。
なお、ローカルに落としたDBの検索にはPubMed IDを標準入力として受け付けるfetch-pubmed
コマンドを使用します。
簡易なプロット
2列のタブ区切りテキストを入力としてxy-plot
に渡すと、簡易なプロットを描画してくれます。
$ esearch -db pubmed -query "diabetes mellitus[MeSH Terms]" | efetch -format docsum | xtract -pattern DocumentSummary -element PubDate | cut -c 1-4 | sort-uniq-count-rank -r | awk '{print $2,$1}' | sort | xy-plot
別DBでも
例えば論文アーカイブであるPMC (PubMed Central) に対しても同様にクエリを投げることができます。
$ esearch -db pmc -query "diabetes mellitus[MeSH Terms] genome[TITL]" | efetch -format docsum | xtract -pattern DocumentSummary -element Id Title | head -n 5 6753138 Discovering genetic interactions bridging pathways in genome-wide association studies 6739370 Genome-wide association meta-analyses and fine-mapping elucidate pathways influencing albuminuria 6764842 A flexible and parallelizable approach to genome‐wide polygenic risk scores 6567400 Waist circumference trajectories and risk of type 2 diabetes mellitus in Korean population: the Korean genome and epidemiology study (KoGES) 6647170 Genome editing of human pancreatic beta cell models: problems, possibilities and outlook