https://koreanraichu.tistory.com/79
Biopython으로 MSA 해보기
MSA: multiple sequence alignment 여기에 관한 이론적인 설명은 나중에 또 입 털어드림 ㅇㅇ 아 참고로 MSA 관련해서 다른건 다 결과가 제대로 나왔는데 툴 관련해서 결과가 안나왔어요 이게 암만 찾아도
koreanraichu.tistory.com
여기서 MSA 해볼때 clustalW랑 muscle 안돼서 못했잖아요? 경로 입력해야되는데 리눅스 경로가 어디있는지 안나옴+which 몰라서. 근데 맥이나 리눅스에서는 which를 써서 설치 경로를 찾을 수 있습니다. 그러니까 해보자 이거임.
배경
뜬금없이 바이러스가 왜 나왔는가… 생물정보학 하면 보통은 유전자 시퀀싱 많이 하죠? 근데 뽑아서 시퀀싱하는건 내껄 할래도 일단 전문 장비가 있어야 하고(개비쌈), 회사에 달라고 할 수도 없고(달랜다고 주지도 않음), 환자 샘플에서 채취해서 분석하는거면 그분들한테도 동의를 구해야되는데 쟤가 어디서 굴러먹은 애인 줄 알고 그걸 덥석 줌?
아니 그럼 못해요? 아니 그건 또 아님. 우리가 몰라서 글치 데이터베이스가 아주 다양합니다. 케그라던가 켐블이라던가 PDB라던가 clinvar라던가 NCBI라던가... 걔네들이 아 니네 갖다쓰셈 하고 올려놔요. NCBI 얘네는 블래스트부터 그냥 스케일이 아 이래서 천조국 천조국 하는구나 어유...
그래서 왜 하필 한타바이러스냐… 일단 이놈이 아종(?)이 개많습니다. 진짜 월드와이드로 돌아댕기면서 새끼만 까제끼나 한탄(한탄강) 서울 푸말라 뉴욕 뭐 아주그냥 지역별로 갈려 얘네가… 그리고 이 바이러스를 발견한 사람이 한국분이세요. 이게 한국전쟁때 수수께끼의 괴질로 유명했던 놈인데 미국에서는 저 쏘오련놈들 어느새 세균전을? 했고 북쪽에서는 저 미제 간나새끼들이 세균전을 하고 있네? 했던 병입니다. 그걸 이호왕이라는 분이 '한탄강'유역에 사는 쥐한테서 발견한게 한타바이러스예요.
프로젝트 정보
- 인원: 1인
- Python 버전: 3.10
- 설치해야 하는 것: Biopython, muscle(여기서는 머슬 할건데 clustalw도 됩니다)
- 데이터 리소스: NCBI(Entrez로 갖고올 예정)
일단 머슬은 지금 안 깔아도 됨. 전편에서는 다운로드만 할거임. 아니 후편 분량은요? 그건 그때가서 뽑아봅시다.
# 모듈
from Bio import Entrez, SeqIO # 왼쪽: 일단 털어보자/오른쪽: 시퀀스 다루려면 필요합니다. 필수임.
from Bio import AlignIO # 서열 분석해줄 친구
import io # 누구세요?
예전에는 from Bio.Align import MultipleSeqAlignment로 했었는데 쟤가 세월이 지나서 아 니들은 니들꺼 알아서 하셈!!! 모드가 됐음. ...머슬 왜깔은거지? Entrez는 NCBI에서 쿼리 돌리려면 필요한거고 SeqIO는 시퀀스 조작하려면 필요합니다.
# 사전세팅
Entrez.email = "blackholekun@gmail.com" # 이메일
muscle_exe = "/opt/homebrew/bin/muscle" # 이거 경로 있어야 써요
아 그리고 혹시 본인이 맥이나 리눅스 쓰시는데 clustalW나 muscle 경로 모르시면 터미널 켜고 which 쓰십쇼. which muscle, which clustalw 치면 경로 알려줌.
# 바이러스 서열 다운로드
# 이게 근데 막 받으면 안되거든요? 한타바이러스 식구들은 둘쨰치고 저기가 데이터가 진짜 방대해요.
virus_query = "Hantavirus[Organism] and complete genome"
print('Searching sequences... ') # 솔직히 이거 없으면 되는건지 불안하잖아요...
handle = Entrez.esearch(db="nucleotide", term=virus_query, retmax=100)
record = Entrez.read(handle)
id_list = record['IdList']
print(f"총 {len(id_list)}개의 표준 서열을 찾았습니다.") # 100개 최대로!
쟤네들 데이터가 진짜 개쩔어서 덮어놓고 받다보면 큰일납니다. 그리고 데이터베이스중에 약간 미완성인? 그런것도 있음.
여러분 생물학 연구는 하루아침에 뚝딱 되는게 아닙니다. 바이러스같은 경우 숙주가 있어야 배양이 가능하고 대장균이 압도적으로 빨리 크는거지(하루면 다 자람) 보통 미생물들 그렇게 빨리 안 큽니다. 기껏 키웠는데 DNA 뽑았더니 수율이 개판일수도 있고 rna, 바이러스면 게놈 뽑는게 기적임. RNA는 진짜 유리몸도 이런 유리몸이 없어서 실험하다가 침튀면 RNase때문에 그대로 실험 시투더망이예요. 괜히 RNA 시험할 때 DEPC였나 아무튼 뭐 들어간 물 쓰는거 아님.
# 콤퓨타에 저-장
vir_sequence = []
for i, id in enumerate(id_list):
print(f"Downloading sequence {i+1}/{len(id_list)}: {id}")
handle = Entrez.efetch(db="nucleotide", id=id, rettype="fasta", retmode="text")
record = SeqIO.read(handle, "fasta")
# record에 id와 seq가 다 들어가야되더라... (안되면 오류남 봤음)
vir_sequence.append(record)
# 파일로 저장
SeqIO.write(vir_sequence, "hantavirus_sequence.fasta", "fasta")
print('Done!')
찾았으면 저장해야죠? 이 과정이 증말 오래 걸리기때문에… 이거 100개인데도 한 2~30초 걸렸습니다. 데이터 수집이라는 게 그렇게 빨리 안 끝나는… 인내의 시간을 거쳐야 하는거임. 쿼리 돌려놓고 Entrez 접속한 다음 저거 받고 똥 함 때리고 오십쇼.
아무튼 다 찾았으면 저거 돌려서 FASTA 파일로 저장하면 됨.
# 시퀀스 길이 체크
for rec in vir_sequence:
print(f"ID: {rec.id} | Length: {len(rec.seq)}")
일단 체크까지만 하고 본격적인 MSA는 후편에서 해보자.
'Coding > Python' 카테고리의 다른 글
| 인플루엔자의 해마글루티닌 게놈을 받아서 MSA를 해보자 (0) | 2026.01.05 |
|---|---|
| 한타바이러스의 시퀀스를 받아서 MSA를 해보자 (후편) (0) | 2026.01.05 |
| 클린바 가서 VCF 자동으로 받기 시스템 (0) | 2025.12.30 |
| 의도와 많이 달라졌지만 Python으로 ARIMA를 해보자 (0) | 2025.12.26 |
| loc, iloc, at, iat (0) | 2025.12.24 |