Beginning Bioinformatics for Biologists
  BioPerl이란
  Writer : Seyeon Weon   Updated : 10-26   Hit : 4665   Updates 

BioPerl이란 이곳에 있는 library를 말합니다. BioPerl이 어떤 역할을 하는 것인지 실제 예를 들어서 한 번 설명을 해봅니다.

 

여러분이 하고자 하는 생물정보학적인 일은 당연히 어떤 연구에 수반되는 여러 가지 과정의 일부분일 것입니다. 또한,  연구에서 필요로 하는 생물정보학적인 일들 그 자체도, 다시 이런저런 다양한 작업들로 구성되어 있을 것입니다. 그 중에서 하나로, 예를 들어 GenBank에서 mammal hemoglobin subunit(또는 자신의 연구에 필요한 다른 gene)에 대한 mRNA sequence들을 구해야 하는 일이 있다고 합시다. 이것은 http://www.ncbi.nlm.nih.gov에 가면 나오는 Search 기능에서, database Nucleotide로 선택을 하고, for라고 되어 있는 부분 다음에 나오는 입력 박스에 아래를 copy-and-paste 해주면 됩니다. (이처럼 web browser를 마우스 클릭으로 사용하는 방식도 경우에 따라서는 더 편리하고 자연스러운 방식이 되는 경우도 많습니다. 이 방식 그 자체가 문제가 있다는 것이 아니라, 이것만으로는 전혀 충분치가 않다는 점이 문제입니다.)

 

Mammalia[Organism] AND hemoglobin[Title] AND ((((1900[MDAT] : 3000[MDAT] NOT gbdiv_sts[PROP]) NOT srcdb_tpa_ddbj/embl/genbank[PROP]) NOT gbdiv_htg[PROP]) NOT gbdiv_pat[PROP]) AND biomol_mrna[PROP] AND gene_in_genomic[PROP] AND srcdb_refseq[PROP]

 

여러분이 하고자 하는 생물정보학적인 일은 당연히 어떤 연구에 수반되는 여러 가지 과정의 일부분일 것입니다. 또한,  연구에서 필요로 하는 생물정보학적인 일들 그 자체도, 다시 이런저런 다양한 작업들로 구성되어 있을 것입니다. 그 중에서 하나로, 예를 들어 GenBank에서위의 쿼리문을 어떻게 작성을 했는가 하는 것은 다른 글에서 자세히 적겠습니다. (작성이 된 다음에는 이곳에 링크가 될 것입니다.) 물론 위의 옵션이나 키워드 등을 다 외워야 하는 것이 아니고, 마우스 클릭으로 선택을 해주면 만들어지도록 되어 있습니다. 지금 자세한 세부에 대한 설명은 생략을 하고, 이렇게 하면 mammal에서 hemoglobin chain들에 대해 현재 밝혀진 mRNA sequence (이 글을 쓰고 있는 현재로서는) 69개가 잡히게 됩니다. 이제 무엇을 해야 할까요? 물론 sequence를 하나씩 클릭을 해서 일일이 파일로 저장을 하고, 그 각각을 일일이 눈으로 들여다보고 하는 방식도 가능할 것입니다. 이 글에서는 당연히 이와는 다른 방식에 대해서 설명을 합니다.

 

우선, 위의 검색 결과 화면에서 'Show'라고 되어 있는 부분을 500으로 선택을 해줍니다. 그런 다음 각 record의 설명을 훑어봅니다. 분명히 자신이 원하지 않는 것들도 소수 포함이 되어 있을 것입니다. 훑어보면서 원하는 것은 record 번호 앞에 있는 네모를 클릭해서 주욱 선택을 합니다. (사실 "전체 선택" 기능이 있어서 일단 전체를 선택을 하고, 원하지 않는 것만 unselect를 하는 방식도 필요할 터인데, 이 점은 조금 불만이군요.) 그리고는, 'Display"라고 되어 있는 부분을 'GenBank"로 선택을 해줍니다. 이렇게 하면 엄청나게 큰 파일이 웹 브라우저 상으로 전송이 되기 시작하는데, 컴퓨터의 메모리가 적은 경우에는 컴퓨터의 반응 속도가 심하게 느려지는 문제 같은 것까지 생겨나게 될 것입니다. 다 전송되기를 기다리지 말고, 곧장 'Sent to"라고 되어 있는 부분을 File로 선택을 해줍니다. (이렇게 어색하게 하지 않아도 되도록 Interface를 만들어 놓을 수도 있을 터인데, 이점 역시 조금 불만이군요.) 그리고는 파일명을 입력해서 자신의 하드 디스크에 저장을 하면 드디어 mammal들의 hemoglobin subunit(또는 연구에 필요한 다른 gene)들에 대한 mRNA sequence들이 구해진 것입니다. (물론 대부분의 경우에는 이대로가 자신이 원하는 것은 아닐 것입니다. 예를 들어 splicing variant는 제거를 하는 등과 같은 여러 가지 고려들이 더 필요할 것입니다.)

 

'Display' 선택 박스를 보면, GenBank sequence 데이터를 상당히 다양한 format으로 가져올 수 있다는 것을 알 수 있을 것입니다. 이 중에서 XML이라고 되어 있는 것이 사실은 가장 현대적인 것이고 전산적으로도 가장 타당한 format인데여전히 GenBank format 많이 쓰입니다. GenBank format은 소위 flat file format이란 것으로, 마치 노트 정리를 항목 구분을 깔끔하게 해서 적어놓는 것과 유사한 방식으로 기록을 해놓은 것입니다. 여기에 대한 자세한 설명은 역시 다른 곳에 적어놓도록 하겠습니다. 이렇게 하면 여러 개의 GenBank 파일들이 연결이 되어서 하나의 상당히 큰 파일이 얻어지게 됩니다. 검색 결과에서 상위 6개의 record만 선택을 해서 이곳에 저장을 해놓았습니다.

 

, 이제 문제는 이 파일을 가지고 무엇을 어떻게 할 것인가 하는 점일 터인데요. 일단 "무엇을"에 해당하는 것은, 잘 작동하는 것으로 이미 증명이 되어 있는 PCR primer를 고른다거나 (STS라고 되어 있는 부분이 바로 이 목적으로 사용할 수 있는 정보입니다.) 3' UTR sequence들만 좍 뽑아내고 싶다거나 하는 일이 가능할 것입니다. 이 글에서는 전자를 어떻게 하는지에 대해서 설명을 해봅니다이 일을 위해서눈으로 일일이 들여다보면서 손으로 원하는 정보를 선택을 해서 또 다른 파일에 copy-and-paste 등으로 옮기고 하는 방식도 물론 가능할 것입니다지금 우리는 당연히 이렇게 하자는 것이 아닌 것이고요.

 

무언가 제대로 컴퓨터의 능력을 활용하는 것이 되어야 할 터인데, 이를 위해서 가장 우선적으로 필요한 것은 무엇일까요컴퓨터가 이 파일의 내부를 제대로 항목을 구분해 가면서 (마치 사람이 읽는 것처럼읽을 수 있게 해야겠죠? 이렇게 하는 것을 전산 용어로는 "parsing을 한다"라고 합니다. 저도 아주 오래 전에 (심지어) C로 이걸 짜본 적이 있었는데, 정말 엄청난 노가다에다가 한 마디로 보통 일이 아닙니다. 온갖 까다로운 점들이 다 생기게 되죠. 설마 이런 것을 지금 이 글을 읽고 있는 사람들이 각자 다 만들어내야 한다는 소리는 결코 아니겠죠? 그렇다면 해결책은 뭘까요? 누가 대표로 나서서 노가다를 해놓고, 그걸 다들 이용을 하면 되겠죠? 바로 이곳에 나오는 사람들이 그 대표주자들인 사람들입니다. 우린 이 분들이 만들어 놓은 것을 늘 감사하는 마음으로 용만 하면 되는 것이죠.

 

일단 BioPerl이라는 강력한 무기를 손에 든 상태에서는, 그 다음부터의 일은 상당히 수월합니다. 아래 Perl script 위에서처럼 저장한 GenBank 파일에서그 안에 들어 있는 모든 sequence들에 대해서, 어떤 feature를 가진 subsequence들을 좍 뽑아주는 것입니다. 여기에 있는 output 파일을 살펴보면, 뭘 하는 것인지 감이 올 것입니다.

 

gb_feature_extract.pl mammal_hemoglobin_mRNA.gb STS

 

라고 실행한 결과를 파일로 저장한 것입니다.

#!/usr/bin/perl -w
use strict;
use Bio::SeqIO;
use Bio::Location::Simple;

my $gb_file = shift;
my $feature = shift;

my $in = new Bio::SeqIO(-format => 'genbank', -file => $gb_file);

while( my $seq = $in->next_seq ) {
    my $sequence = $seq->seq();
    foreach my $f ( $seq->top_SeqFeatures ) {
	if ($f->primary_tag eq $feature) {
	    my $desc = $f->primary_tag . " " .
	      ($f->strand < 0 ? 'complement' : '')
		. "(" . $f->start . ".." . $f->end . ")";
	    my $location = Bio::Location::Simple->new(-start  => $f->start,
						      -end   => $f->end,
						      -strand => $f->strand);
	    my $out = Bio::Seq->new(-seq => $seq->subseq($location),
				    -id => $seq->id(),
				    -desc => $desc,
				    -alphabet => "dna");
	    my $seqio_obj = Bio::SeqIO->new(-format => 'fasta' );
	    $seqio_obj->write_seq($out);
	}
    }
}  

Perl script 이곳에도 넣어놓았습니다. 엄청 복잡해 보이나요? 실제로 내부에서 돌아가는 것은 50배는 더 복잡합니다. BioPerl 덕분에 그나마 일이 50분의 1정도로 줄어든 것이죠. 위에서 :: 기호가 있는 부분, 그리고 -> => 기호가 사용된 부분들이 BioPerl을 이용하는 부분입니다. script를 만약 BioPerl을 사용하지 않고 제가 손수 같은 기능을 하도록 만들었다고 하면, 훨씬 긴 코드가 되며 만드는데 걸린 시간도 아예 비교도 되지 않을 정도로 길었을 것입니다. 반대로, BioPerl에 약간만 익숙한 경우라면 위와 같은 정도의 기능을 짜는 것은 잠깐이면 되는 일입니다. 그리고 위의 script는 실제로 그리 복잡한 것이 아닙니다. 단지 이런 것에 익숙하지 못하니 복잡해 보이는 것뿐입니다. 처음으로 랩에 들어와서 실험을 시작했을 때를 기억해 보기 바랍니다. 처음에는 신비롭고 무척 대단한 일로 보이지만익숙해지면 곧 별 것도 아닌 것이 되는 것이죠 (위의 script는 사용자가 잘못된 입력을 했을 때 도움말을 대신 보여주거나 하는 것과 같은 기능도 넣지 않은 "나 혼자 쓰기용"인 면이 강하지만당연히 실제로 사용을 해도 됩니다. reverse complement까지 제대로 처리하도록 만들어져 있습니다. 한 가지 빠진 것은, 어떤 feature가 조각이 나 있을 때인데, 이것까지는 처리가 안 됩니다. 따라서, 예를 들어 genomic sequence에서 exon들을 연결해서 완전한 ORF로 만드는 일은 못 합니다. 물론 이것도 BioPerl 쉽게 되는 일입니다.)

 

그리고, 시간을 생각해 보기를 바랍니다. 만약 일일이 수작업으로 위의 일을 한다면 어떤 상황이 벌어질까요? 곧장 한계가 있게 되겠죠? 일단 subsequence를 실수 없이 뽑아내는 일부터가 인간이 할 일이 아니겠군요. 이런 문제가 없다고 해도, 끝도 없이 동일한 일을 반복해야 하는 것이니 한 50개 쯤까지만 해야겠죠. 그 이상은 인간이 할 짓이 못될 터이니... 요즘 사용하는 보통의 PC들에서는 웬만큼 큰 GenBank 파일이라고 해봐야 이 script의 실행 시간은 1분이 넘기도 힘들 것입니다물론 위의 script와 같은 것을 짤 줄 알게 되는 것이 쉬운 일이라는 것이 결코 아닙니다. 문제는 이걸 해낼 능력을 갖추지 못했을 때가 워낙 비참하다는 것이죠. (국내의 현상황은 아예 이런 요구 자체가 없도록 되어 있는 특이한 상황이군요. , 이 이야기는 이곳에서는 하지 말도록 합시다.) 그리고다른 방법은 없습니다. 만약에 있다고 가정을 해봅시다. 그렇다면 선진국들에서 생물학자들 대상으로 perl을 가르친다느니 배운다느니 하면서 소란스러울 리가 없겠죠? 확실한 증거가 되었나요? 물론 제대로 된 답은 전산학 그 자체(특히 user interface 부분)의 현재 실정이 이 정도라는 점과 우리가 필요로 하는 일 그 자체의 특징 때문인 것이고요. 이 이야기 역시 너무 복잡해지니 이 정도만 적도록 하겠습니다.

 

노파심에 조금 추가를 하면, 이런 것들을 누군가가 미리 다 짜놓을 수는 없는가 하는 생각이 가능하겠군요. 위의 일은 일반적으로 필요한 일이라 그럴 수도 있지만, 막상 실제로 생물정보학적인 일을 자신의 연구의 일부분으로 집어넣게 되면, 이때는 어디에서도 찾을 수가 없는 자신만의 것을 이것저것 만들어내야 하게 됩니다. 물론 하부에 깔린 요소들은 거의 다 공통이니 이를 모아서 BioPerl이라고 하는 것이고요. 단지 이 요소들을 어떻게 엮어 놓았는가 하는 것만 서로 다른 것이죠. 이해가 되는지요? , 더 자세히 풀어서 적을 수도 있지만, 이 정도로도 대개는 납득이 될 것 같군요. 그리고는 "전산과 출신 뽑아서 시키면 되겠군"이란 생각을 하는 사람도 있을 터인데이건 선진국들에서 실제로 해봤다고 합니다. 다른 더 복잡한 것들은 따질 필요도 없이, 조금만 생각을 해보면 사회적으로도 성립이 되지 않는다는 점부터 당장 있다는 것을 깨달을 수가 있을 것입니다. 이런 일을 척척해낼 수 있는 좋은 머리를 가진 사람을 남의 연구에 시다바리 노릇을 지속적으로 하게 만드는 방법은 뭐가 있을까요? 없다는 것이 정답입니다. 전산과 출신도 우리와 똑같은 사람이니 말입니다. ^^; 같은 이야기를 굳이 반복을 하면, 이런 손쉬운 해결책이 만약에 있다면 선진국들에서 지금과 같은 현상이 생겼을 리가 없겠죠?

 

이제 library라는 용어 그 자체에 대해서 설명을 할 차례이군요. 위에서 소개가 된 것들 이외에도 GenBank 파일을 다루기 위해서 필요한 다른 여러 가지 기능들을 역시 누군가가 짜게 되겠죠? 이걸 잘 정리를 해서 모아놓고, 문제의 소지(모두들 아는 용어이겠지만, 이걸 전산 용어로는 '버그'라고 하죠.)들도 최대한 제거를 하고, 게다가 다른 사람들이 가져가서 쓸 때에 편리하도록 여러 가지 고려도 한 것이고, 심지어는 잘 만든 설명서까지 달아놓았다고 합시다. 보통 이 정도로 해놓은 것을 library라고 부릅니다. , "연관된 여러 가지 일들을 하는데 필요한 잘 정리된 소스 코드들의 모듬"인 것이죠. (소스 코드를 공개하는 대신에 compile이 된 것만을 공개해서 소스 코스는 남들이 보지 못하게 할 수도 있습니다. 생물정보학 분야는 분위기가 전혀 그렇지 않습니다. 모조리 다 소스 코드까지 공개를 하는 무척 열린 분위기인 곳이죠.) perl library들은 http://www.cpan.org에 총집합을 시켜놓고 있는데, 사실 일상 용어에서의 "도서관"은 이곳이 되는 셈이로군요. 개별 library는 책 정도가 되는 것이고요. , 괜히 따지는 것이 되는군요. 어쨌든 전산 용어에서 library는 여기에 설명한 것을 뜻합니다.

 

위에서 예로든 GenBank 파일을 parsing하는 기능은 BioPerl의 극히 일부분의 기능입니다. 생물정보학적인 일을 하는 데에 필요한 "공통적인 일들"은 온갖 것들이 다 들어가 있죠여기에서 머리를 스치고 지나가는 생각이 하나 있을 것입니다. ", 생물정보학적인 어떤 일을 하려면 혼자서 맨땅에 헤딩을 하는 것부터 시작을 할 것이 아니라, 일단은 내가 하고자 하는 일이 어느 부분까지 BioPerl로 해결을 할 수 있는지부터 알아보는 것이 가장 먼저 해야 할 일이겠군"이란 생각을 지금 하게 된 사람은 매우 정상적인 사고능력을 가진 사람입니다. (, 그렇지 못한 사람이라면, 도대체 이 글을 왜 여기까지 읽었는지요? ^^;)

 

그럼 BioPerl을 제대로 이용하기 위해서는 무엇이 필요할까요? 당연히 perl 프로그래밍부터 알고 있어야겠죠? 그래야 BioPerl로 뭘 엮어보든 말든 할 터이니 말입니다. (안 적어도 되는 소리지만, 당연히 생물학자이어야 할 터이고요. , 쓸데 없는 비유지만, 최신식 장비들로 엄청 화려하게 갖추어놓은 분자생물학 실험실에 예를 들어 경제학 전공자를 데려다 놓으면 뭘 하겠습니까? BioPerl이 아무리 온갖 기능이 총망라된 것이라 해도, 무언가 할 일들을 스스로 만들어가는 원동력이 되는 여러 생각들이 있는 사람의 손에서만 그 가치가 있게 되겠죠.) 그리고는 BioPerl 그 자체에 대해서 공부할 점에는 다음 두 가지 면이 있습니다. 하나는, BioPerl이 객체지향형 구조로 되어 있다는 점인데, 이 점에 대해서도 조금 공부를 해서 이해를 해야 합니다. 물론 어떤 원리로 작동을 하는지는 모르는 상태에서, 사용을 하다보면 저절로 익숙해지는 식을 택할 수도 있겠지만, 이건 학자로서는 영 좀 그런 소리가 되죠. 그리 어렵지도 않고 앞으로 두고두고 사용해야 하는 중요한 도구의 내부 구조이니, 공부를 해버리게 되기를 바랍니다. 다른 하나는, 어떤 기능들이 있는지, 이를 이용하기 위한 모듈의 이름은 뭔지, 각 기능들은 어떤 계층적 구조로 서로 연결이 되어 있는지 등과 같은 점들입니다. 앞의 것은 기초적인 지식이 되는 것이고, 물론 뒤의 것이 실질적으로는 더욱 중요한 점이죠.

 

이 정도면 BioPerl이 무엇인가에 대한 대략적인 소개는 된 것 같군요. 설명이 애매한 부분이나 부족하다고 느껴지는 부분이 있으면 feedback을 좀 해주기를 바랍니다.


Up