| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| 9 | 10 | 11 | 12 | 13 | 14 | 15 |
| 16 | 17 | 18 | 19 | 20 | 21 | 22 |
| 23 | 24 | 25 | 26 | 27 | 28 | 29 |
| 30 | 31 |
- 인공신경망
- 인공지능 수학
- 캐글
- 서열정렬
- 생물정보학
- AP
- 생명정보학
- 결정트리
- RNN
- 오류역전파
- Kaggle
- ncbi
- bioinformatics
- 파이썬
- 자바
- COVID
- AP Computer Science A
- SVM
- BLaST
- 바이오인포매틱스
- 바이오파이썬
- Java
- 딥러닝
- 로제타폴드
- 인공지능
- 알파폴드
- 단백질 구조 예측
- CNN
- 시그모이드
- 이항분포
- Today
- Total
데이터 과학
정렬 (Alignment) 본문
정렬 도구
서열 쌍 정렬(Pairwise Alignment)과 다중 서열 정렬(Multiple Sequence Alignment)을 수행하기 위한 알고리즘은 매우 다양합니다. 이러한 알고리즘은 계산량이 많기 때문에 대부분 독립적인 프로그램으로 구현되어 있으며, Python 자체에서 직접 수행하는 방식은 일반적이지 않습니다.
Biopython은 이러한 외부 정렬 프로그램을 Python 코드에서 손쉽게 사용할 수 있도록 다양한 기능을 제공합니다. 서열 쌍 정렬의 경우에는 C 언어로 구현된 고속 정렬 알고리즘과 PairwiseAligner 클래스를 제공하며, 이와 함께 여러 외부 정렬 프로그램을 Python 코드에서 실행할 수 있는 인터페이스도 지원합니다.
일반적인 서열 정렬 과정은 다음과 같습니다.
- 정렬할 서열을 FASTA 형식 등의 파일로 준비합니다. 일반적으로 Bio.SeqIO 모듈을 사용하여 FASTA 파일을 생성합니다.
- ClustalW, MUSCLE 등과 같은 외부 정렬 프로그램을 실행합니다. Biopython에서는 명령줄 인터페이스를 이용하여 이러한 프로그램을 Python 코드에서 호출할 수 있습니다.
- 정렬이 완료되면 생성된 결과 파일을 Bio.AlignIO 모듈로 읽어 후속 분석에 활용합니다.
이 장에서 소개하는 명령줄 인터페이스는 대부분 동일한 사용 방식을 따릅니다. 먼저 실행할 프로그램과 입력 파일, 출력 파일 등의 옵션을 지정하여 명령 객체를 생성한 후, 이를 Python에서 실행합니다. 실행이 완료되면 생성된 정렬 결과를 AlignIO 모듈을 이용하여 읽고 분석할 수 있습니다.
참고
최근 Biopython에서는 기존 Command Line Wrapper의 유지보수가 중단되었습니다. 따라서 최신 버전에서는 Python의 subprocess 모듈을 이용하여 외부 프로그램을 직접 실행하는 방식을 권장합니다. 다만 기존 프로젝트와 예제를 이해하기 위해서는 Command Line Wrapper의 사용법을 알아둘 필요가 있습니다.
Biopython에서 제공하는 대부분의 명령줄 인터페이스는 Bio.Align.Applications 모듈에 포함되어 있으며, ClustalW, MUSCLE, MAFFT, T-Coffee, ProbCons 등 다양한 다중 서열 정렬 프로그램을 동일한 방식으로 사용할 수 있습니다.
모든 정렬 프로그램을 개별적으로 설명하지는 않지만, 하나의 프로그램 사용법을 이해하면 다른 프로그램도 거의 동일한 방법으로 활용할 수 있습니다.
서열 정렬에서 대체 빈도 계산
substitutions 속성은 다중 서열 정렬(Multiple Sequence Alignment)에 포함된 모든 서열을 서로 비교하여, 각 문자가 다른 문자로 대응되는 빈도를 계산합니다. 즉, 정렬된 모든 서열 쌍을 대상으로 동일한 위치에 나타난 문자의 조합을 조사한 후, 각 조합이 몇 번 등장했는지를 누적하여 대체 빈도 행렬(Substitution Matrix)을 생성합니다.
다음은 substitutions 속성을 사용하는 예제입니다.
from Bio.Seq import Seq
from Bio.SeqRecord import SeqRecord
from Bio.Align import MultipleSeqAlignment
alignment = MultipleSeqAlignment([
SeqRecord(Seq("ACTCCTA"), id="seq1"),
SeqRecord(Seq("AAT-CTA"), id="seq2"),
SeqRecord(Seq("CCTACT-"), id="seq3"),
SeqRecord(Seq("TCTCCTC"), id="seq4"),
])
print(alignment)
substitutions = alignment.substitutions
print(substitutions)
실행 결과는 각 문자(A, C, T)가 서로 얼마나 자주 대응되었는지를 행렬 형태로 출력합니다.
A C T
A 2.0 4.5 1.0
C 4.5 10.0 0.5
T 1.0 0.5 12.0
이 행렬은 대칭 행렬(Symmetric Matrix)입니다. 따라서 A→C와 C→A는 동일한 의미를 가지며, 두 값은 행렬의 위쪽과 아래쪽에 동일하게 분배되어 저장됩니다. 예를 들어 A와 C의 대응 횟수가 9회라면, 행렬에는 각각 4.5와 4.5로 나누어 기록됩니다.
이와 같은 표현 방식은 이후 BLOSUM이나 PAM과 같은 대체 행렬(Substitution Matrix)을 계산하거나 분석할 때 매우 유용합니다.
alignment.substitutions는 실제 정렬에 등장한 문자만 포함합니다. 따라서 정렬에 존재하지 않는 문자까지 포함한 행렬이 필요한 경우에는 select() 메서드를 사용하여 원하는 알파벳 순서를 지정할 수 있습니다.
m = substitutions.select("ATCG")
print(m)
실행 결과는 다음과 같습니다.
A T C G
A 2.0 1.0 4.5 0.0
T 1.0 12.0 0.5 0.0
C 4.5 0.5 10.0 0.0
G 0.0 0.0 0.0 0.0
새롭게 추가된 G는 정렬에 등장하지 않았기 때문에 모든 값이 0으로 표시됩니다. select() 메서드는 이처럼 원하는 문자 집합을 추가하거나, 행과 열의 순서를 변경하여 분석 목적에 맞는 대체 행렬을 생성할 때 유용하게 사용할 수 있습니다.
'생명정보학 & 화학정보학 > 바이오파이썬' 카테고리의 다른 글
| EMBOSS에서의 서열정렬 (0) | 2026.07.30 |
|---|---|
| ClustalW와 MUSCLE을 이용한 다중 서열 정렬 (0) | 2026.07.30 |
| UPGMA 계통수 (0) | 2023.05.28 |
| Kaggle에서 서열 정렬과 계통수 (0) | 2022.11.01 |
| Kaggle에서 바이오파이썬 (1) | 2022.09.20 |