Skip to content

E-utility #
Find similar titles

Structured data

Category
Software

The Entrez Programming Utilities (E-utilities) #

E-utilityNCBI에서 제공하는 프로그램으로 Entrez 데이터데이스에 접근할 수 있는 인터페이스를 제공한다. 총 8개의 프로그램으로 구성되어 있다. 정해진 URL 문법을 통해서 NCBI Entrez 데이터를 검색하고 불러올 수 있다. 현재 biomedical data, nucleotide, protein 서열, gene 레코드, 분자 입체구조 등을 포함한 38개의 데이터베이스를 포함하고있다.

E-utility에 포함된 9개 프로그램은 다음과 같다.

# 프로그램 명 용도 URL
1 EInfo (database statistics) 데이터베이스의 레코드수, 최근 업데이트일 등 데이터 현황을 확인 할 수 있음 einfo.fcgi
2 ESearch (text searches) 입력한 키워드에 대해 검색하고 결과를 UIDs로 제공함, UID는 ESummary나 EFetch, ELink에서 query id로 사용됨 esearch.fcgi
3 EPost (UID uploads) epost.fcgi
4 ESummary (document summary downloads) 입력한 UID에 대한 요약정보를 XML 포맷으로 제공함 esummary.fcgi
5 EFetch (data record downloads) UID 리스트를 받아서 사용자가 원하는 포맷으로 결과를 제공함 efetch.fcgi
6 ELink (Entrez links) UID 리스트를 받아서 같은 DB나 다른 Entrez 에서 관련된 다른 UID의 링크를 제공함 elink.fcgi
7 EGQuery (global query) 키워드를 입력 받아 Entrez의 각 DB별 매칭된 결과의 수를 제공함 egquery.fcgi
8 ESpell (spelling suggestions) 입력한 키워드가 오타일경우 spelling suggestions를 제공함 espell.fcgi
9 ECitMatch (batch citation searching in PubMed) citation 문자열을 입력 받고 해당하는 PubMed IDs를 제공함 ecimatch.cgi

모든 E-utility는 같은 기본 URL을 통해 실행되는데, 기본 URL는 다음과 같다.

    http://eutils.ncbi.nlm.nih.gov/entrez/eutils/

예를들어, 'ESearch'를 사용하고자 한다면 다음과 같은 URL를 통해 사용할 수 있다.

    http://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?

'ESearch'는 Entrez Database를 검색하는 프로그램인데, NCBI의 검색창에서 키워드 검색하는 것과 똑같은 기능을 수행한다. 이때, 검색하고자 하는 DB종류와 term을 다음과 같이 정해 줄 수 있다.

    http://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?db=<database>&term=<query>

검색결과는 이곳을 통해서 확인 할 수 있듯이 XML 포맷으로 제공된다. 결과 중 'IdList'가 각각의 검색결과를 의미한다.

Esearch를 통해 얻은 검색결과 중 특정 결과를 선택하여 다운받고 싶다면, 'EFetch'를 이용할 수 있다. id항목에 Esearch에서 나온 id들을 ','로 구분하여 넣어준다.

    http://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=<database>&id=<id_list>&rettype=<retrival_type>&retmode=<retrival_mode>

다음은 NCBI에서 제공하는 E-utility 소개 영상이다.

"E-Utilities Introduction" [출처] NCBI, youtube

Entrez History Server #

Entrez는 결과로 나온 UIDs를 임시로 저장할 수 있는 History server를 제공한다. 저장된 결과를 불러와서 E-utility call들을 합치거나 다른 검색의 input으로 사용할 수 있다. 다만 ESearch의 &usehistory 파라메터의 값을 "y"로 해야 history를 저장 할 수 있다. Histoy server에는 각 검색마다 query_key (uid set)와 WebEnv (웹환경)을 저장하고 사용하는 아래 가지 파라메터를 이용해 기존 검색에 접근하거나 검색결과를 다른 검색의 input으로 사용할 수 있다.

&db = database;
&query_key = query key;
&WebEnv = web environment

ESearch 시 다음과 같이 "usehistory"를 y로 지정해줘야 query_key와 WebEnv를 생성할 수 있다.

esearch.fcgi?db=database&term=query&usehistory=y

생성된 query_key와 WebEnv는 다음과 같이 사용한다.

esummary.fcgi?db=database&WebEnv=webenv&query_key=key

efetch.fcgi?db=database&WebEnv=webenv&query_key=key&rettype=report_type&retmode=data_mode

History server를 이용해서 multiple data 생성하기 #

Entrez검색을 통해 생성된 query key들은 AND, OR, NOT을 통해서 합칠 수 있는데, 이때 WebEnv가 같아야 한다. 일반적으로 각 검색마다 유니크한 WebEnv가 생성되기 때문에 query key들을 합치기 위해서는 검색시 기존에 존재하는 WebEnv를 이용해야 한다.

Image

[그림1] 일반적인 검색
출처: http://www.library.ucsf.edu/sites/all/files/ucsf_assets/eutil_pipes.pdf

Image

[그림2] 기존에 존재하는 WebEnv를 사용한 검색
출처:http://www.library.ucsf.edu/sites/all/files/ucsf_assets/eutil_pipes.pdf

[그림2]와 같이 기존의 WebEnv 값을 새 검색의 WebEnv 파라메터 값으로 지정해 주면 된다.

Basic Pipelines #

E-utility를 사용하여 데이터를 다루는 몇가지 파이프라인를 소개 하고자 한다.

Retrieving data records matching an Entrez query #

ESearch → ESummary

ESearch → EFetch

Retrieving data records matching a list of UIDs #

EPost → ESummary

EPost → EFetch

Finding UIDs linked to a set of records #

ESearch → ELink

EPost → ELink

Limiting a set of records with an Entrez query #

EPost → ESearch

ELink → ESearch

Biopython 으로 Entrez 데이터베이스 접근하기 #

E-utilityNCBI 웹사이트를 통해서 Entrez 데이터베이스에 접근할 수도 있지만 Biopython의 Bio.Entrez 모듈을 통해서도 접근한 수 있다. Bio.Entrez 모듈은 e-utility와 마찬가지로 EUtils라고 하는 Entrez Programming Utility를 제공한다. EUtils은 앞서 말한 E-utility의 9가지 프로그램을 모두 포함하고 있다.

Entrez는 다음과 같이 사용할 수 있다. 먼저 아래와 같이 email정보를 입력해주어야한다.

>>>from Bio import Entrez
>>>Entrez.email = "example@example.com"

EInfo를 이용해 pubmed정보를 보려면 다음과 같이 입력한다.

#분석 handle 생성
>>>handle = Entrez.eino(db="pubmed")
>>>record = Entrez.read(handle)

#record 수 확인
>>>record[DbInfo"]["Count"]
'17989604'
#최근 업데이트 일 확인
>>>record["DbInfo"]["LastUpdate"]
'2008/05/24 06:45'

ESearch는 다음과 같이 사용한다.

>>> handle = Entrez.esearch(db="pubmed", term="biopython")
>>> record = Entrez.read(handle)
>>> record["IdList"]
['19304878', '18606172', '16403221', '16377612', '14871861', '14630660', '12230038']

또한, 다음과 같이 Entrez.EFetch를 이용해 full record를 다운받을 수도 있다.

>>> from Bio import Entrez
>>> Entrez.email = "A.N.Other@example.com"     # Always tell NCBI who you are
>>> handle = Entrez.efetch(db="nucleotide", id="186972394", rettype="gb", retmode="text")
>>> print(handle.read())
LOCUS       EU490707                1302 bp    DNA     linear   PLN 05-MAY-2008
DEFINITION  Selenipedium aequinoctiale maturase K (matK) gene, partial cds;
            chloroplast.
ACCESSION   EU490707
VERSION     EU490707.1  GI:186972394
KEYWORDS    .
SOURCE      chloroplast Selenipedium aequinoctiale
  ORGANISM  Selenipedium aequinoctiale
            Eukaryota; Viridiplantae; Streptophyta; Embryophyta; Tracheophyta;
            Spermatophyta; Magnoliophyta; Liliopsida; Asparagales; Orchidaceae;
            Cypripedioideae; Selenipedium.
REFERENCE   1  (bases 1 to 1302)
  AUTHORS   Neubig,K.M., Whitten,W.M., Carlsward,B.S., Blanco,M.A.,
            Endara,C.L., Williams,N.H. and Moore,M.J.
  TITLE     Phylogenetic utility of ycf1 in orchids
                ... 생략 ...

참고로, rettype="gb" 대신 rettype='fasta'를 이용하면 데이터를 FASTA 포맷으로 받을 수 있다.

Bio.Entrez에서도 History와 WebEnv를 사용할 수 있다. usehistory="y"를 이용한다.

>>>from Bio import Entrez
>>>Entrez.email = "ss@example.com"
>>>search_handle = Entrez.esearch(db="nucleotide",term="Opuntia[orgn] and rpl16", usehistory="y")
>>> search_results = Entrez.read(search_handle)
>>> search_handle.close()

이 Query에 대한 WebEnv와 QueryKey는 다음과 같이 확인할 수 있다.

>>> webenv = search_results["WebEnv"]
>>> query_key = search_results["QueryKey"]

QueryKey와 WebEnv는 Entrez.efetch를 사용할때 다음과같이 gi 번호 대신 사용할 수있다.

batch_size = 3
out_handle = open("orchid_rpl16.fasta", "w")
for start in range(0,count,batch_size):
    end = min(count, start+batch_size)
    print("Going to download record %i to %i" % (start+1, end))
    # webenv와 query_key를 이용한 검색
    fetch_handle = Entrez.efetch(db="nucleotide", rettype="fasta", retmode="text", retstart=start, retmax=batch_size, webenv=webenv, query_key=query_key)
    # 검색결과를 파일로 쓴다.  
    data = fetch_handle.read()
    fetch_handle.close()
    out_handle.write(data)
out_handle.close()

Referneces #

0.0.1_20210630_7_v33