데이터 과학

바이오파이썬 단백질 분석 : COVID-19 게놈(Genome) 본문

생명정보학 & 화학정보학/바이오파이썬

바이오파이썬 단백질 분석 : COVID-19 게놈(Genome)

티에스윤 2021. 7. 27. 23:58

이번 내용은 바이오파이썬으로 단백질 분석하는 내용입니다. 

 

 

파이썬 도크(https://github.com/kaggle/docker-python)에 대한 소개를 하면서 필요할 때는 numpy와 pandas 라이브러리를 이용해서 분석하는 방법인데 간단하고 COVID-19를 이해 할 수 있는 내용이어서 어떤 방향으로 분석했는지를 살펴보겠습니다. 

원본 내용은 Kaggle에 있습니다. 링크는 아래 주소와 같습니다.

 

https://www.kaggle.com/abishpius/covid-19-genome-proteins-analysis-with-biopython

 

COVID-19 Genome: Proteins Analysis with Biopython

Explore and run machine learning code with Kaggle Notebooks | Using data from Coronavirus Genome Sequence

www.kaggle.com

 

COVID-19 핵산 서열을 받아서 실험을 진행하는데 여기서 사용하는 서열은 'MN908947.fasta' 파일로 이전에 리뷰했던 염기서열과 같습니다.

아래 내용을 참고로 이번 리뷰도 한번 실습해 보면 됩니다. 

 

https://tsyoon.tistory.com/14

 

COVID-19: Biopython으로 단백질 식별하는 방법 (Kaggle)

우선 이글은 Kaggle에 올라온 바이오파이썬에 대한 서술입니다. Kaggle에는 몇가지의 바이오파이썬에 대한 소스가 올라와 있는데 그 중 몇개의 소스를 소개하겠습니다. NCBI에서 핵산을 찾는 방법과

tsyoon.tistory.com

 

from Bio import SeqIO
for sequence in SeqIO.parse('MN908947.fasta', "fasta"):
    print('Id: ' + sequence.id + '\nSize: ' + str(len(sequence))+' nucleotides')

 

결과 

Id: MN908947.3

Size: 29903 nucleotides

 

SARS-CoV-2 DNA 서열을 나타내는 명령어는 다음과 같습니다. DNA를 mRNA로 전사(transcrib)하고 mRNA를 단백질로 번역(translate) 하는 내용을 아래와 같은 간단한 명령어로 나타낼 수 있습니다. 

 

from Bio.SeqRecord import SeqRecord
from Bio import SeqIO
DNAseq = SeqIO.read('MN908947.fasta', "fasta")

 

DNA = DNAseq.seq
print(DNA)

 

결과 

 

ATTAAAGGTTT...............

 

 

 

mRNA = DNA.transcribe()
print(mRNA)

 

결과 

 

AUUAAAGGU........

 

 

T(티민)과 U(우라실)의 변환이 일어난 상황을 알 수 있습니다. 

이제 아미노산으로 변환되는 내용을 확인해 봅시다. 

 

 

Amino_Acid = mRNA.translate()
print(Amino_Acid)
print("Length of Protein:",len(Amino_Acid))
print("Length of Original mRNA:",len(mRNA))

 

 

 

 

결과 

 

IKGLYLPR*QTNQLSISCRSVL*TNFK.........

 

핵산에서 아미노산으로 변역이 이루어지는 내용은 코돈(codon)으로 나타나는 결과입니다. 

코돈 표를 확인하는 명령어는 다음과 같습니다. 

 

from Bio.Data import CodonTable
print(CodonTable.unambiguous_rna_by_name['Standard'])

 

 

결과 

 

Table 1 Standard, SGC0......

 

 

아미노산 서열에서 *로 표시된 정지코돈으로 나타낸 것을 지우면서 서열의 20개 미만인 아미노산은 제거해 보겠습니다. 

 

Proteins = Amino_Acid.split('*')

Proteins

 

결과

 

[Seq('IKGLYLPR'),

Seq('QTNQLSISCRSVL'),

Seq('TNFKICVAVTRLHA'),   ...................

 

 

for i in Proteins[:]:
    if len(i) < 20:
        Proteins.remove(i)

 

Proteins

 

결과 

 

[Seq('QDTSNSSIFCRLLTVSSVLQPIISTSRFRPGVTER'), Seq('DGEPCPWFQRENTRPTQFACFTGSRRARTWLWRLRGGGLIRGTSTS'),

Seq('TALCVHQTFGCSNCTSWSCYG'),

Seq('DTWCPCPSCGRNTSGLPQGSSS'), .....

 

 

 

from Bio.Blast import NCBIWWW
result_handle = NCBIWWW.qblast("blastp", "nt", Proteins)

 

result_handle에 대한 결과는 저장하는 내용으로만 지정합니다. 

NCBIWWW 함수에 대한 내용은 다음 튜토리얼을 참고하면 되겠습니다. 

 

https://www.tutorialspoint.com/biopython/biopython_overview_of_blast.htm

 

Biopython - Overview of BLAST - Tutorialspoint

Biopython - Overview of BLAST BLAST stands for Basic Local Alignment Search Tool. It finds regions of similarity between biological sequences. Biopython provides Bio.Blast module to deal with NCBI BLAST operation. You can run BLAST in either local connecti

www.tutorialspoint.com

 

Pandas 데이터 프레임 함수를 사용해서 2차 구조에 대한 분석을 해 보면 다음과 같습니다. 

 

이 내용도 ProtParam 모듈을 참고해 보도록 합시다. 

 

https://biopython.org/wiki/ProtParam

 

Analyzing protein sequences with the ProtParam module. · Biopython

Analyzing protein sequences with the ProtParam module. Protein sequences can be analysed by several tools, based on the ProtParam tools on the Expasy Proteomics Server. The module is part of the SeqUtils package. Protein Sequence Format The ProteinAnalysis

biopython.org

 

 

import pandas as pd 
from Bio.SeqUtils.ProtParam import ProteinAnalysis
MW = []
aromaticity =[]
AA_Freq = []
IsoElectric = []
for j in Proteins[:]:
    a = ProteinAnalysis(str(j))
    MW.append(a.molecular_weight())
    aromaticity.append(a.aromaticity())
    AA_Freq.append(a.count_amino_acids())
    IsoElectric.append(a.isoelectric_point())

 

MW = pd.DataFrame(data = MW,columns = ["Molecular Weights"] )
MW.head()

 

 

결과

Molecular Weights...

 

 

matplotlib와 seaborn으로 그래픽으로 표현해 봅니다. 

 

import matplotlib.pyplot as plt
import seaborn as sns
sns.set_style('whitegrid');
plt.figure(figsize=(10,6));
sns.distplot(MW,kde=False);
plt.title("SARS-CoV-2 Protein Molecular Weights Distribution");

 

 

 

 

 

 

MW.idxmax()

 

 

print(Proteins[48])
len(Proteins[48])

 

 

결과 

CTIVFKRVCGVSAARLTPCG.........

 

 

 

POI = AA_Freq[48]

plt.figure(figsize=(10,6));
plt.bar(POI.keys(), list(POI.values()), align='center')

 

결과 ,,,,

 

 

결과를 보면 Leusin과 Valin이 많다는 것이 보입니다. 이 둘의 공통적인 성격은 무엇일까요?

그리고, 방향성(aromaticity )과 등점도(isoelectric point)에 대한 결과는 어떤 내용을 의미하는 바인지 알아봅시다. 

 

print('The aromaticity % is ',aromaticity[48])
print('The Isoelectric point is', IsoElectric[48])

 

결과 

The aromaticity % is 0.11662347278785636

The Isoelectric point is 6.899025917053222

 

 

이 내용까지가 바이오파이썬으로 단백질 분석하는 내용에 대한 리뷰입니다. 

폴리프로틴을 분석하는 방법도 있으니 kaggle에서 찾아서 바이오파이썬을 실습해 보는 것도 좋을 것 같습니다. 

 

 

----------------------------

1. 방향성 (Aromaticity)

정의:
방향성은 어떤 분자가 고리 구조를 가지면서 특별히 안정한 상태를 의미합니다.
특히 벤젠(Benzene) 같은 구조라고 봅니다. 

 

조건 (휴클 규칙, Hückel's rule):

  1. 평면 구조일 것 (Flat structure)
  2. 고리형 구조 (Cyclic)
  3. 완전히 공액화된 π 전자 (Conjugated π system)
  4. (4n + 2)개의 π 전자를 가질 것 (n은 0, 1, 2, ...)

예시:

  • 벤젠 (6개의 π 전자 → 안정함)
  • 퓨란, 피롤 같은 헤테로고리도 방향족일 수 있음

의의:

  • 방향족성은 분자를 굉장히 안정하게 만들어 줌
  • 생명체의 DNA 염기(아데닌, 구아닌 등)도 방향족성 고리를 가짐

 

2. 등점도 (Isoelectric Point, pI)

 

정의:
등점은 아미노산이나 단백질 같은 이온성 물질이 전기적으로 중성이 되는 pH 값입니다.
즉, 순전하(총 전하)가 0이 되는 지점을 말합니다.

 

원리:

  • pH가 낮을 때: (+) 전하 많음 (양이온 상태)
  • pH가 높을 때: (-) 전하 많음 (음이온 상태)
  • pH가 pI일 때: 순전하 0 (양전하와 음전하가 균형)

계산 예시 (단순 아미노산):
pI = (pKa1 + pKa2) / 2
(산성기와 염기성기의 pKa 값 평균)

 

의의:

  • 단백질 정제 (전기영동, 등전점 전기초점 등)
  • 단백질의 용해도에 큰 영향 → pI 근처에서는 잘 뭉치거나 침전