User Tools

Site Tools


bioinfo:e-direct로_명령행에서_entrez_db_접근하기

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
bioinfo:e-direct로_명령행에서_entrez_db_접근하기 [2023/06/22 17:18] – [미생물 대표 유전체 염기서열의 일괄 다운로드] hyjeongbioinfo:e-direct로_명령행에서_entrez_db_접근하기 [2023/06/22 17:26] (current) – [기본 개념 및 설치 방법] hyjeong
Line 5: Line 5:
 Entrez는 미국 NCBI가 보유한 biomedical database의 통합적 질의 시스템 혹은 웹 포털을 의미한다. NCBI에서는 유닉스 혹은 리눅스의 명령행 환경에서 Entrez에 직접 접속하여 검색을 실시하고 그 결과를 활용하는데 필요한 유틸리티를 제공하고 있는데, 이것이 바로 [[https://www.ncbi.nlm.nih.gov/books/NBK179288/|Entrez Direct(E-Direct)]]이다. URL 구문을 이용하여 Entrez 시스템의 활용을 도와주는 API의 일종인 [[https://www.ncbi.nlm.nih.gov/books/NBK25501/|Entrez Programming Utilities(E-utilities)]]의 명령행 버전 정도로 이해하면 된다. Entrez의 모든 데이터베이스를 알아보려면  https://eutils.ncbi.nlm.nih.gov/entrez/eutils/einfo.fcgi를 접속해 보라. Entrez는 미국 NCBI가 보유한 biomedical database의 통합적 질의 시스템 혹은 웹 포털을 의미한다. NCBI에서는 유닉스 혹은 리눅스의 명령행 환경에서 Entrez에 직접 접속하여 검색을 실시하고 그 결과를 활용하는데 필요한 유틸리티를 제공하고 있는데, 이것이 바로 [[https://www.ncbi.nlm.nih.gov/books/NBK179288/|Entrez Direct(E-Direct)]]이다. URL 구문을 이용하여 Entrez 시스템의 활용을 도와주는 API의 일종인 [[https://www.ncbi.nlm.nih.gov/books/NBK25501/|Entrez Programming Utilities(E-utilities)]]의 명령행 버전 정도로 이해하면 된다. Entrez의 모든 데이터베이스를 알아보려면  https://eutils.ncbi.nlm.nih.gov/entrez/eutils/einfo.fcgi를 접속해 보라.
  
-웹사이트에서 설명한 설치방법 외에도 biocond(entrez-direct) 또는 데비안 패키지(ncbi-entrez-direct)로도 제공되므로 이를 활용할 수 있다.+웹사이트에서 설명한 설치방법 외에도 bioconda(entrez-direct) 또는 데비안 패키지(ncbi-entrez-direct)로도 제공되므로 이를 활용할 수 있다.
  
 설치와 간단한 사용법에 대한 동영상은 유튜브('[[https://youtu.be/rPDXGsLcTQ0|How to Install EDirect on Mac, Unix or Linux]]')에서 볼 수 있다. E-Direct는 사용자가 제시하는 질의에 대하여 **esearch**로 탐색을 실시하고, **efetch**로는 찾아낸 레코드를 원하는 포맷에 맞게 가져오며, **xtract**를 사용하여 프로그래밍을 하지 않고도 전단계의 명령어에서 반환되는 정보로부터 필요한 필드만을 추출하는 다단계로 이루어진다. 기본적으로 표준 입출력을 사용하므로 각 명령어는 파이프(|)로 연결하여 사용할 수 있다. [[https://ncbi-hackathons.github.io/EDirectCookbook/|EDirect Cookbook]]에서는 직접 복사하여 쓸 수 있는 풍부한 예제가 실려 있으며, 특히 [[https://github.com/NCBI-Hackathons/ncbi-hackathons.github.io/wiki/EDirect-Wiki!|EDirect Wiki!]]에도 참조할만한 정보가 많다. CVR(MRC-University of Glasgow Centre for Virus Research)에서도 [[https://bioinformatics.cvr.ac.uk/ncbi-entrez-direct-unix-e-utilities/|NCBI Enterz Direct UNIX E-utilities]]라는 웹문서를 통해 몇 가지의 예제를 소개하였다.  설치와 간단한 사용법에 대한 동영상은 유튜브('[[https://youtu.be/rPDXGsLcTQ0|How to Install EDirect on Mac, Unix or Linux]]')에서 볼 수 있다. E-Direct는 사용자가 제시하는 질의에 대하여 **esearch**로 탐색을 실시하고, **efetch**로는 찾아낸 레코드를 원하는 포맷에 맞게 가져오며, **xtract**를 사용하여 프로그래밍을 하지 않고도 전단계의 명령어에서 반환되는 정보로부터 필요한 필드만을 추출하는 다단계로 이루어진다. 기본적으로 표준 입출력을 사용하므로 각 명령어는 파이프(|)로 연결하여 사용할 수 있다. [[https://ncbi-hackathons.github.io/EDirectCookbook/|EDirect Cookbook]]에서는 직접 복사하여 쓸 수 있는 풍부한 예제가 실려 있으며, 특히 [[https://github.com/NCBI-Hackathons/ncbi-hackathons.github.io/wiki/EDirect-Wiki!|EDirect Wiki!]]에도 참조할만한 정보가 많다. CVR(MRC-University of Glasgow Centre for Virus Research)에서도 [[https://bioinformatics.cvr.ac.uk/ncbi-entrez-direct-unix-e-utilities/|NCBI Enterz Direct UNIX E-utilities]]라는 웹문서를 통해 몇 가지의 예제를 소개하였다. 
Line 43: Line 43:
   $ safe_download.sh download_path.txt   $ safe_download.sh download_path.txt
      
 +
 +===== 다른 정보를 추출하기 =====
 +
 만약 FtpPath뿐만 아니라 여러 가지의 정보를 추출하고 싶다면 '-element Genbank FtpPath_GenBank BioSampleAccn BioprojectAccn((RefSeq에도 등재된 레코드는 두 개의 BioprojectAccn이 출력된다. 두 번째 것은 RefSeq Prokaryotic Genome Annotation Project(PRJNA224116)로서 모든 레코드에 대하여 동일하다.))'와 같이 xtract 명령어의 옵션을 확장하면 된다. 어떤 종류의 element가 있는지 알고 싶다면 xtract 명령 없이 'esearch … | efetch -format docsum' 명령으로 XML 형태의 자료를 출력하여 <DocumentSummary>..</DocumentSummary> 사이의 블록을 살펴보도록 한다. 만약 FtpPath뿐만 아니라 여러 가지의 정보를 추출하고 싶다면 '-element Genbank FtpPath_GenBank BioSampleAccn BioprojectAccn((RefSeq에도 등재된 레코드는 두 개의 BioprojectAccn이 출력된다. 두 번째 것은 RefSeq Prokaryotic Genome Annotation Project(PRJNA224116)로서 모든 레코드에 대하여 동일하다.))'와 같이 xtract 명령어의 옵션을 확장하면 된다. 어떤 종류의 element가 있는지 알고 싶다면 xtract 명령 없이 'esearch … | efetch -format docsum' 명령으로 XML 형태의 자료를 출력하여 <DocumentSummary>..</DocumentSummary> 사이의 블록을 살펴보도록 한다.
  
Line 53: Line 56:
     <Step>1</Step>     <Step>1</Step>
   </ENTREZ_DIRECT>   </ENTREZ_DIRECT>
 +  $ esearch -db assembly -query GCA_000017025.1 | efetch -format docsum
 +  <?xml version="1.0" encoding="UTF-8" ?>
 +  <!DOCTYPE DocumentSummarySet PUBLIC "-//NLM//DTD esummary assembly 20200615//EN" 
 +  "https://eutils.ncbi.nlm.nih.gov/eutils/dtd/20200615/esummary_assembly.dtd">
 +  
 +  <DocumentSummarySet status="OK">
 +  <DocumentSummary>
 +  <Id>38128</Id>
 +  <RsUid>38128</RsUid>
 +  … 중간 생략 …
 +  </DocumentSummary>
 +  </DocumentSummarySet>
 +
 +이번에는 유전체 정보가 공개된 특정 종 균주가 어떤 곳에서 분리되었는지 알아내는 방법에 대해여 설명하고자 한다. 위에서 설명한 xtract 명령어에서 ‘-element BioSampleAccn’ 옵션을 적용하여 그 결과를 biosample_acc.txt 파일에 저장한다. 이를 esearch + efetch + xtract 명령어에 적용하여 BioSample 데이터베이스를 검색하되 모든 Accession Number에 대해서 적용하도록 반복문을 돌리는 것이 핵심이다.
 +
 +  $ cat biosample_acc.txt
 +  SAMN13428652
 +  SAMN11521245
 +  SAMN11521242
 +  SAMN11521244
 +  SAMN10822424
 +  $ for i in $(cat biosample_acc.txt)
 +  > do
 +  > ll=$(esearch -db biosample -query $i | efetch -format docsum | \
 +  > xtract -pattern DocumentSummary -block Attribute \
 +  > -if Attribute@attribute_name -equals isolation_source \
 +  > -element Attribute)
 +  > echo -e "$i\t$ll"
 +  > done
 +  SAMN13428652    Carrot juice
 +  SAMN11521245    missing
 +  SAMN11521242    missing
 +  SAMN11521244    Homo sapiens
 +  SAMN10822424    missing
 +  …(후략)
 +
 +BioSample 데이터베이스의 Attribute 항목에는 여기에서 소개한 isolation_source 외에도 strain, collection_date, geo_loc_name, sample_type, host_disease 등이 있으니 용도에 맞게 적절히 활용하면 된다. 그러나 BioSample 데이터베이스에 수록된 정보는 자료마다 일정하지가 않아서 특정 attribute의 것만을 취하면 중요한 정보를 놓치는 경우가 많다. 따라서 모든 자료를 (key, value) 쌍의 형태로 추출하는 것이 바람직하다. Assembly database에서 균주와 관련한 정보를 출력하여 이를 data.txt 파일에 저장해 놓았고, assembly accession과 BioSample accession이 이중에서 첫 번째와 세 번째 컬럼에 있다면 다음 스크립트를 이용해 본다. 단, 출력물은 처음 두 컬럼을 제외하면 순서가 일정하지 않으므로 Perl 스크립트 등을 이용하여 후처리를 해야 된다.
 +
 +  # data.txt 파일은 ‘xtract –pattern DocumentSummary -element Genbank FtpPath_GenBank BioSampleAccn BioprojectAccn’으로 추출된 것으로, 첫 번째와 세 번째 컬럼(굵은 글씨)을 사용함
 +  $ head -n 1 data.txt
 +  GCA_014068615.1 ftp://ftp.ncbi.nlm.nih.gov/..(생략).._ASM1406861v1 SAMN13428652     
 +  PRJNA592543     PRJNA224116
 +  $ for i in $(awk -vOFS=, '{print $1, $3}' data.txt)
 +  > do
 +  > A=${i%,*}
 +  > B=${i#*,}
 +  > ll=$(esearch -db biosample -query $B | efetch -format docsum | \
 +         xtract -pattern DocumentSummary -block Attribute \
 +         -element Attribute@attribute_name Attribute)
 +  > echo -e "$A\t$B\t$ll" 
 +  > done
 +  GCA_014068615.1 SAMN13428652    strain  CJ0611A1        isolation_source       Carrot juice     collected_by    Toronto Public Health   collection_date 2006-10-18      geo_loc_name    Canada: Toronto lat_lon 45.406270 N 75.743210 W
 +  …(후략)
 +
 +위의 사례에서는 data.txt 파일에서 유래한 두 컬럼을 do 반복문 안에서 A와 B 변수로 나누어 저장하기 위해 다소 복잡한 방법1을 동원하였다. 그러나 'awk '{print $1, $2}' data.txt | while read A B' 명령으로는 첫 번째 레코드만 처리되고 종료하는 문제점이 발생하였다. 그리고 awk 문에서 출력용 필드 구분자를 콤마로 바꾸지 않고 기본값(공백 문자) 그대로 사용하면 do 반복문 내부의 실행이 정상적으로 이루어지지 않는다. 만약 이보다 더 합리적인 방법을 찾아낼 수 있다면 바람직할 것이다.
 +
 +다음의 사례는 출력물의 세 번째 컬럼에 Organism 정보를 포함시켜서 출력하되 모든 결과를 results.txt 파일에 기록하도록 하는 방법이다. BioSample 레코드에서는 Organism이 별도의 block에 들어있지는 않지만, 복수의 -block 구문을 사용하여 서로 다른 섹션에 위치한 정보를 하나의 xtract문으로 추출하는 것이 가능하다([[https://www.ncbi.nlm.nih.gov/books/NBK179288/|NCBI Bookshelf]] 'Exploring Separate XML Regions' 참조). 
 +
 +  $ for i in $(awk -vOFS=, '{print $1, $3}' data.txt)
 +  > do
 +  > A=${i%,*}
 +  > B=${i#*,}
 +  > ll=$(esearch -db biosample -query $B | efetch -format docsum | \
 +         xtract -pattern DocumentSummary -element Organism \
 +         -block Attribute -element Attribute@attribute_name Attribute)
 +  > echo -e "$A\t$B\t$ll" >> results.txt
 +  > done
  
-dasd 
bioinfo/e-direct로_명령행에서_entrez_db_접근하기.1687421898.txt.gz · Last modified: 2023/06/22 17:18 by hyjeong