Introduction
본 실습에서는 단백질 서열을 수집하고, Multiple Sequence Alignment (MSA)를 수행하여
서열 간의 보존 영역(conserved region)과 가변 영역(variable region)을 분석한다.
Multiple sequence alignment 수행
실습 디렉토리 구성
- 실습 디렉토리 생성
- 디렉토리 이름:
msa
- 디렉토리 이름:
- 결과 확인:
msa디렉토리 생성
유전자의 단백질 서열 획득
- 인간 amylase 단백질의 서열 정보를 확인한다.
- https://www.ncbi.nlm.nih.gov/protein/178585
- FASTA format 형식의 서열을 복사한다.
msa/amylase.fasta파일을 생성하고, 복사한 내용을 붙여 넣고 저장한다.- 결과 확인:
msa/amylase.fasta파일 생성
진화적으로 연관된 단백질 서열 정보 획득
- NCBI 데이터베이스에서 amylase와 진화적으로 관련된 서열을 수집한다.
- BLAST를 이용하여 유사 서열 검색
- Protein BLAST 선택
- FASTA format 서열 입력
- Database: Reference proteins (refseq_protein) 선택
- ‘BLAST’ 버튼 선택
- 수 분 소요
- 결과 확인
- 실습에 사용할 상동 유전자의 단백질 서열 선택 및 다운로드
- MSA 결과 시각화의 편의를 위해 5-10개의 서열만 선택
- “select all” 선택을 해제한 후 개별 선택
- 서로 다른 sequence identity (Per. ident) 값을 가지는 서열 선택
- “Download” 버튼 클릭
- “fasta(cluster)” 선택 혹은 “fasta(aligned clusters)” 선택
- 다운로드 경로를 기록
- 다운로드 파일 복사
- 다운로드 파일을
msa디렉토리로 복사
- 다운로드 파일을
- 결과 확인:
msa/seqdump.txt파일 생성
Query 서열 추가
- Query 서열을 다운로드한 sequence 파일에 추가한다.
msa/seqdump.txt파일의 가장 상단에,msa/amylase.fasta파일의 서열을 추가한다.
Multiple sequence alignment using Clustal Omega
- Multiple sequence alignment를 수행한다.
msa/msa.ipynb노트북 생성- 아래 명령을 code cel에 입력하고 실행
!clustalo -i seqdump.txt -o amylase_aln.txt
- 결과 확인:
msa/amylase_aln.txt파일 생성
Multiple sequence alignment 결과 확인
MSA 결과 확인
- 아래 코드를 이용하여 MSA 결과를 확인한다.
from Bio import AlignIO
alignment = AlignIO.read(open("amylase_aln.txt"), "fasta")
print("Alignment length %i" % alignment.get_alignment_length())
for record in alignment:
print(record.seq + " " + record.id)
보존 영역 및 가변 영역 탐색
- 각 위치(position)에서 아미노산의 분포를 계산한다.
- 이를 통해 보존된 영역과 변이가 많은 영역을 파악한다.
m = len(alignment)
n = len(alignment[0].seq)
records = []
for i in range(n):
cnt = {}
for j in range(m):
c = alignment[j].seq[i]
if c not in cnt:
cnt[c] = 1
else:
cnt[c] += 1
records.append(cnt)
print(i+1, ' '.join(['%s:%d'%(c, cnt[c]) for c in cnt]))
가변 영역 시각화
- 각 위치에서 관찰되는 서로 다른 아미노산의 개수를 시각화한다.
# Count alphabets at each position
import seaborn as sns
import matplotlib.pyplot as plt
cs = [len(e) for e in records]
sns.lineplot(x=range(len(cs)), y=cs)
plt.xlabel("Position")
plt.ylabel("Number of amino acids")
plt.show()
생각해볼 문제
- 다양한 아미노산이 존재하는 위치가 있는지 확인하라.
- 해당 위치에서 발견되는 아미노산들의 물리화학적 성질(예: 극성, 전하, 크기)을 비교하라.
- 성질이 유사하다면 그 이유를 설명하라.
- 성질이 서로 다른 아미노산이 존재한다면 그 이유를 설명하라.
