본문 바로가기
생물정보학/Biopython (바이오파이썬)

[생물정보학 파이썬] 코로나 바이러스-19 (COVID-19) 서열 분석, WebLogo, Multiple Sequence Alignment, 계통수 (phylogenetic tree) 그리기

by HanJoohyun 2020. 3. 1.
반응형

 

 

 

 

 

시작하며

안녕하세요 한주현입니다

 

2020년 연초 COVID-19, 코로나바이러스감염증-19 (이하 코로나 바이러스)로

 

전세계적으로 많은 확진자들이 나왔고 아직까지도 기세가 멈추지 않는듯 보입니다.

 

하지만 발달한 과학 기술로 각국의 의료진 및 과학자들은 빠르게 바이러스의 실체를 밝혀내었고

 

금세 바이러스의 전체 서열이 웹에 공개 되었습니다.

 

 

이번 포스팅에서 생물정보학자인 제가 쓸 내용은,

 

각국에서 시퀀싱한 코로나 바이러스 서열들을 다운받고

 

WebLogo를 그려서 어떠한 부분이 보존된 서열(conserved sequence)인지, 계통수(phylogenetic tree)를 그려

 

각 서열간의 유사도를 살펴보는 시간을 가져보겠습니다.

 

다음 그림을 만들어 보는게 이번 포스팅의 목표입니다.

 

 

 

 

분석의 진행은 사용하기 편한 파이썬과 생물 정보 분석에 쉽게 쓰이는 바이오파이썬으로 해보겠습니다.

 

다음 주소에 포스팅에 사용한 코드 및 NCBI에서 받은 코로나 바이러스 FASTA 파일을 공개하겠습니다.


https://github.com/KennethJHan/covid19-biopython

 

목차
  • 코로나 바이러스 전체 서열 (complete genome) NCBI에서 받기
    • NCBI에서 직접 받는 방법
    • 바이오파이썬을 사용하여 받는 방법
      • 서열을 보는 방법
      • 자동화를 사용하여 서열을 FASTA 파일로 다운 받기
  • 코로나 바이러스 Multiple Sequence Alignment(다중서열정렬)
  • 코로나 바이러스 WebLogo 그려보기
  • 코로나 바이러스 계통수 그려보기

 

코로나 바이러스 전체 서열 NCBI에서 받기

NCBI에서 직접 받는 방법

다음의 주소를 통해 NCBI에 접속하고 검색창에 covid 라고 검색합니다.
https://www.ncbi.nlm.nih.gov/

 

 

검색이 완료되면 아래에 Ongoing SARS-CoV-2 outbreak 에서
Latest sequence data in GenBank 링크를 누릅니다.
https://www.ncbi.nlm.nih.gov/search/all/?term=covid

 

 

그러면 Nucleotide Sequences 에 각국에서 코로나 바이러스를 시퀀싱 한 데이터들의 목록이 있는데요,
우리는 전체 서열인 complete genome을 받아보겠습니다.
테이블에서 Gene Region을 누르면 다음 그림과 같이 정렬할 수 있습니다.
https://www.ncbi.nlm.nih.gov/genbank/sars-cov-2-seqs/

 

 

 

 

이 중에서 가장 상위에 있는 MN908947 이라는 링크를 눌러보죠.
GenBank 형식으로 페이지가 나와있고 우리는 서열을 받을거니 여기서 FASTA라고 써진 링크를 눌러보겠습니다.
https://www.ncbi.nlm.nih.gov/nuccore/MN908947

 

링크를 누르면 다음과 같은 페이지로 이동하는데요,
이게 29,903bp 길이의 코로나 바이러스입니다.
다운 받는 방법은 오른쪽의 Send to: 라고 하는 링크를 누르고
Choose Destination을 File이라고 하고 Format은 FASTA로 하고 Create File 버튼을 누릅니다.
그러면 다운로드 창이 뜨는데 저는 MN908947.fasta 라고 저장하겠습니다.
https://www.ncbi.nlm.nih.gov/nuccore/MN908947.3?report=fasta

 

 

이런식으로 반복하신다면 각국에서 시퀀싱한 코로나 바이러스의 서열들을 받으실 수 있습니다.. 만
한 두 개면 하겠습니다만 현재 50여개나 되는 서열을 손으로 받는건 무리가 있습니다.
다음에 소개할 바이오파이썬을 사용하면 이를 자동화하여 1분만에 모두 받으실 수 있습니다.

 

 

바이오파이썬을 사용하여 받는 방법

서열을 보는 방법

파일로 다운 받기 전에 우선 서열을 살펴보는 방법에 대해 알아보겠습니다.

다음과 같이 코드를 작성합니다.

간략히 코드를 설명 드리겠습니다.

다음 코드는 두 개의 함수로 이루어져 있습니다.
하나는 genbank_id를 입력하여 genbank record를 가져오는 함수이고
다른 하나는 genbank record 객체에서 서열을 가져오는 함수입니다.

Entrez.email에 들어가는 email은 여러분의 이메일을 작성하셔서 넣으시면 됩니다.
genbank_id 는 NCBI에서 covid로 검색해서 얻은 MN908947 을 넣으시면 됩니다.

자동화를 사용하여 서열을 FASTA 파일로 다운 받기

get_sequence 함수를 응용하여 서열을 FASTA로 쓰는 write_sequence 함수를 생성하였습니다.
코드에 사용한 genbank_id 가 담긴 리스트 파일인 “COVID-19.ncbi_list.200301.txt” 파일은
github를 참고해주세요.

https://github.com/KennethJHan/covid19-biopython

바이오파이썬으로 서열을 다루는 방법은 제가 집필한 “바이오파이썬으로 만나는 생물정보학” 도서 6장에 자세히 설명되어있습니다.
http://www.yes24.com/Product/Goods/70861061?scode=032&OzSrank=1

 

바이오파이썬으로 만나는 생물정보학

실제로 현업에서 사용하는 바이오파이썬 모듈과 100개의 프로그래밍 예제를 통해 생물정보학 파이썬 프로그래밍의 기초를 쌓을 수 있는 도서!쏟아지는 생물정보 빅데이터를 처리함에 있어 배우기 쉽고 원하는 결과를 신속하게 만들어 낼 수 있는 파이썬은 이 시대의 단연 인기 있는 언어다. 바이오파이썬은 파이썬 라이브러리 중 하나로 ...

www.yes24.com

 

코로나 바이러스 Multiple Sequence Alignment(다중서열정렬)

각 서열간의 차이를 보기 위해 WebLogo를 그리기에 앞서 입력값인 Multiple Sequence Alignment 결과를 먼저 생성하겠습니다.

Multiple Sequence Alignment는 여러개의 서열들을 각 위치별로 비교하여 정렬하는 것으로 각 위치마다 서열이 어떻게 다른지 알아보는데 사용합니다.

예를 들어 다음과 같이 세 개의 서열이 있고 이를 정렬한다고 해봅시다.
>sample1
ACAAT
>sample2
ATAAT
>sample3
ACAT

$ ./muscle3.8.31_i86darwin64 -in test.fasta -out test.aln -clw

MUSCLE v3.8.31 by Robert C. Edgar

http://www.drive5.com/muscle
This software is donated to the public domain.
Please cite: Edgar, R.C. Nucleic Acids Res 32(5), 1792-97.

test 3 seqs, max length 5, avg length 4
00:00:00 1 MB(0%) Iter 1 100.00% K-mer dist pass 1
00:00:00 1 MB(0%) Iter 1 100.00% K-mer dist pass 2
00:00:00 1 MB(0%) Iter 1 100.00% Align node
00:00:00 1 MB(0%) Iter 1 100.00% Root alignment
00:00:00 1 MB(0%) Iter 2 100.00% Refine tree
00:00:00 1 MB(0%) Iter 2 100.00% Root alignment
00:00:00 1 MB(0%) Iter 2 100.00% Root alignment
00:00:00 1 MB(0%) Iter 3 100.00% Refine biparts

$ cat test.aln
MUSCLE (3.8) multiple sequence alignment

sample2 ATAAT
sample1 ACAAT
sample3 AC-AT
* **

같은 방법으로 FASTA 파일을 Multiple Sequence Alignment 해보겠습니다.

 

성능이 좋은 서버가 아니라도 작업하실 수 있습니다.

 

저는 제 개인 노트북(맥북)에서 작업 했는데, 약 2시간 정도 걸렸습니다.

 

결과 파일을 열어보면 다음 같이 정렬된 형태의 결과가 담겨있습니다.

 

 

바이오파이썬으로 Multiple Sequence Alignment, WebLogo 그리기, 계통수 그리기 내용은 제가 집필한 “바이오파이썬으로 만나는 생물정보학” 도서 7장에 자세히 설명되어있습니다.
http://www.yes24.com/Product/Goods/70861061?scode=032&OzSrank=1

 

바이오파이썬으로 만나는 생물정보학

실제로 현업에서 사용하는 바이오파이썬 모듈과 100개의 프로그래밍 예제를 통해 생물정보학 파이썬 프로그래밍의 기초를 쌓을 수 있는 도서!쏟아지는 생물정보 빅데이터를 처리함에 있어 배우기 쉽고 원하는 결과를 신속하게 만들어 낼 수 있는 파이썬은 이 시대의 단연 인기 있는 언어다. 바이오파이썬은 파이썬 라이브러리 중 하나로 ...

www.yes24.com

 

코로나 바이러스 WebLogo 그려보기

코로나 바이러스 WebLogo를 그리기 위해 align된 포맷을 FASTA로 변환합시다.

 

다음 코드를 실행하면 clustal 포맷이 FASTA 포맷으로 변환됩니다.

 

다음 URL에 접속합니다


http://weblogo.threeplusone.com/create.cgi

 

생성한 파일을 upload하여 Create WebLogo 버튼을 눌러줍니다.

 

파일이 잘 생성되는군요.

 

이미지가 상당히 큰데 확대해서 보시면 다음과 같이 보실 수 있습니다.

 

대부분의 서열이 공통된 서열이고 29133 위치의 C, T 처럼 변이가 있는 서열도 존재합니다.

 

 

바이오파이썬으로도 WebLogo를 그릴 수 있습니다만,

clustal 포맷에 gap이 있는 경우 코드상 잘못된 점이 있어 당장은 그리기 어렵습니다.

 

바이오파이썬으로 Multiple Sequence Alignment, WebLogo 그리기, 계통수 그리기 내용은 제가 집필한 “바이오파이썬으로 만나는 생물정보학” 도서 7장에 자세히 설명되어있습니다.
http://www.yes24.com/Product/Goods/70861061?scode=032&OzSrank=1

 

바이오파이썬으로 만나는 생물정보학

실제로 현업에서 사용하는 바이오파이썬 모듈과 100개의 프로그래밍 예제를 통해 생물정보학 파이썬 프로그래밍의 기초를 쌓을 수 있는 도서!쏟아지는 생물정보 빅데이터를 처리함에 있어 배우기 쉽고 원하는 결과를 신속하게 만들어 낼 수 있는 파이썬은 이 시대의 단연 인기 있는 언어다. 바이오파이썬은 파이썬 라이브러리 중 하나로 ...

www.yes24.com

 

코로나 바이러스 계통수 그려보기

이제 마지막으로 바이러스 계통수를 그려보겠습니다.

 

계통수라고 함은 서열간의 유사한 정도를 가지고 거리를 표현하여 나타내는 나무형식의 표현방법입니다.

 

거리가 가까울수록 서열이 유사하고 멀수록 서열이 덜 유사합니다.

 

먼저 계통수 정보를 담고 있는 phylo 파일을 생성하고,

 

이 파일을 가지고 그림을 그리겠습니다.

 

다음 URL에서 phylo 파일을 생성할 수 있습니다만,


https://www.ebi.ac.uk/Tools/services/web_simple_phylogeny/toolform.ebi

 

우리가 작업하고 있는 파일이 크기때문에 여기서는 작업이 안됩니다..;;

 

그래서 커맨드라인에서 작업을 해야하는데요,

 

clustal2를 다운받겠습니다.

 

다음 URL에서 다운로드 페이지로 들어가보겠습니다.
http://www.clustal.org/clustal2/#Download

 

 

그러면 다음과 같은 페이지가 나오는데요,


각자 운영체제에 맞는 파일을 다운받으시면 됩니다.


http://www.clustal.org/download/current/

 

 

저는 리눅스로 진행해보겠습니다.

./clustalw2 -infile=covid.all.fasta -tree -outputtree=phylip -clustering=Neighbour-joining
./clustalw2 -infile=covid.aln.fasta -tree -outputtree=phylip -clustering=Neighbour-joining

 

진행은 두 가지 버전으로 진행했습니다.


먼저 covid.all.fasta 는 covid 각각 fasta 파일을 모두 합친것으로 다음 커맨드를 사용했습니다. git에도 해당 파일이 있습니다.

 

$ cat *.fasta > covid.all.fasta

그 다음 covid.aln.fasta 는 WebLogo에서 사용한 Multiple Sequence Alignment의 결과를 fasta로 변환한 파일입니다.

 

결과 파일로 "covid.all.ph", "covid.aln.ph"를 얻을 수 있습니다.

 

이제 이 파일들을 가지고 그림을 그려보겠습니다.

 

다음과 같이 결과 그림을 볼 수 있고,

 

저는 옆에 날짜와 서열을 제출한 연구소 장소를 적었습니다.

 

붉게 표시한것은 NCBI RefSeq으로 올라온 서열입니다.

 

 

휴.. 드디어 포스팅이 끝났네요.

 

이렇게 짧은 서열을 가진 생명체, 아.. 바이러스는 생명체가 아니군요..

 

어쨋든 이렇게 짧은 서열로 이뤄진 바이러스에 온 인류가 힘들어 하고 있습니다.

 

모두들 개인적으로 건강관리에 유의해주시고요,

 

하루 빨리 연구자들의 개발과 의료진의 치료로 건강한 사회로 돌아왔으면 좋겠습니다.

 

그럼 다음에 또 만나요~

 

 

 

 

 

 

반응형

댓글