E-utility
#
Find similar titles
- (rev. 19)
- lca
Structured data
- Category
- Software
Table of Contents
The Entrez Programming Utilities (E-utilities) #
E-utility는 NCBI에서 제공하는 프로그램으로 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를 이용해야 한다.
[그림1] 일반적인 검색
출처: http://www.library.ucsf.edu/sites/all/files/ucsf_assets/eutil_pipes.pdf
[그림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-utility 나 NCBI 웹사이트를 통해서 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()