Friday, November 5, 2010

eutil을 이용한 genbank 파일 가져와서 biopython 으로 파싱하기

아.. 기억력이 거의 붕어급이라.. 했던거 까먹고 했던거 까먹고.. 기록으로 남겨야 한다.
예전에 썻던 NCBI의 eutil, 역시 기억이 안난다. 해서 정리한다. 


eutil을 통해 ncbi의 nucleotide 데이터베이스에 접근해서 ncbi id 에 해당하는  시퀀스와 정보를 가져온 뒤 파싱하는 프로그램을 정리할 필요가 있어서, 이거 만들면서 해당 자료를 죄다 모아보자.


-genbank file format : 
http://www.ncbi.nlm.nih.gov/Sitemap/samplerecord.html#Top



-ncbi의 데이터 모델 : 사실 이걸 찾은 이유는 검색하고자 하는 쿼리(ncbi id)에 대한 이해가 있어야 할거 같아서
http://mail.ypu.edu.tw/~wnhuang/Bioinformatics/2.pdf


-eutil 에 대한 manual : 
http://www.ncbi.nlm.nih.gov/bookshelf/picrender.fcgi?book=coursework&part=eutils&blobtype=pdf


<위 manual 설명>
eutil 자체는 entrez system을 이용하기때문에 entrez 에 속해있는 database의 search만이 가능하다(근데 대부분 다 들어 있다). 각 DB에 맞는 UID (integer id)를 이용해야 한다(예: PMID for pubmed, GI number for nucleotide & protein DB). 
-the Common Entrez engine : 
   Esearch : 정해진 database에서 text query 매치되는 uid들을 return
   ESummary : query 로 uid를 받고 이와 매치되는 DocSum(Document symmary) return
   EGQuery : Esearch의 global 버젼으로 모든 entrez database를 뒤진다.
-Entrez Databases:
   EInfo : 정해진 database의 자세한 정보제공(indexing field와 어느 DB로 연결가능한 uid return)
   EFetch : 정해진 format으로 query uid에 대한 정보를 생성한다.
   ELink : input uid와 관련된 특정 DB에서의 uid를 return 한다 (Nucleotide에 GI number를 넣어주면 관련 SNP DB의 uid를 return)
-Using the Entrez history server :
   entrez search의 장점중에 하나가 (ncbi의 pubmed 사용시 느낄수 있는것인데) 한번 검색했던 결과 (uid list)에 대해서 임시적으로 저장을 한다. 그래서 그것들의 조합을 이용할수도 있다(그러니까 첨에 pubmed에서 "cancer"라는 키워드로 검색을 하고 두번째로 "gene"이라는 키워드로 검색한담에 이 두결과에 대한 or 내지는 and 가 가능). 이렇듯 검색 결과 나온 uid를 history server에 임시적으로 저장하고 나서 "query_key"(integer label) 와 "webEnv"(endoded server address)를 제공한다.
   EPost : uid 리스트가 history server에 임시 저장시키고 query_key와 webEnv를 제공한다.
   위의 ESearch 역시 history sever에 결과를 임시 저장한다. 


-query가 url을 만들시 대문자는 쓰이지 않으며(WebEnv 파라미터명과 boolean 제외) space는 +로 대신하고 query key를 나타내는 #문자는 url encoding 인 %23 을 대신한다.   




-biopython install :  이전에는 genbank parsing 하는 스크립트를 만들었는데 이번에는 biopython을 이용해 보려 한다. 아무래도 내가 짠거보다는 완성도가 높을거 같아서.
http://www.biopython.org/DIST/docs/install/Installation.html


솔직히 이번에 biopython을 처음 써봤는데.. 강추다. 특히 DNA sequence를 다루는 사람들에게 꼭 메뉴얼을 훓어보길 권장한다. 위의 eutil 역시 biopython에 모듈로 들어가 있다. 이것 때문에 기존에 내가 만들어 놨던 module을 싹 버리고 biopython 모듈을 쓰기로 마음 먹었다. 내껀.. 허접하므로..