Entrez Direct(EDirect)を使った情報抽出

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

参考