MAFFT #1 Fasta 파일 전처리 #
#2025-07-28
1. Load package #
import pandas as pd
import numpy as np
import os
import matplotlib.pyplot as plt
import random
os.sys.path.append("/data/home/ysh980101/2410/Mutclust2")
from Bin.sc import *
#
2. Objective #
Influenza type A의 H1N1 strain의 fasta 파일을 확인해보면?
>
로 시작하는 행에 해당 시퀀스의 메타데이터가 있고
다음 >
로 시작하는 행 이전까지 해당 시퀀스 정보가 있다.
>
로 시작하는 행을 |로 분리했을때 제일 마지막값에 유전자 정보가 있다.
Raw 데이터는 아래와 같이 구성돼있는데
/Influenza
└── Raw/
├── A-H1N1.fasta
├── A-H1N1.fasta
├── ...
└── B.fasta
유전자가 섞여있는 fasta 파일을 분석하기 편하게 유전자별로 분리해줄려고한다.
#
3. Process fasta file #
#code
gene_list = ['NP', 'HA', 'PB2', 'PA', 'MP', 'NS', 'PB1', 'NA']
subtype_list = ['A-H1N1', 'A-H3N2', 'A-H5N1', 'B']
for subtype in subtype_list:
for gene in gene_list:
# 입력 파일 경로와 출력 파일 경로
input_file = f'/data3/projects/2020_MUTCLUST/Data/Projects/GISAID_revision/Influenza/Raw/{subtype}.fasta'
output_dir = f'/data3/projects/2020_MUTCLUST/Data/Projects/GISAID_revision/Influenza/Preprocessed/{gene}'
output_file = os.path.join(output_dir, f'{subtype}.fasta')
# 출력 디렉토리가 없으면 생성
if not os.path.exists(output_dir):
os.makedirs(output_dir)
# 파일을 열고 편집된 결과를 출력 파일에 쓰기
with open(input_file, 'r') as infile, open(output_file, 'w') as outfile:
cur_meta = ""
cur_seq = []
write_seq = False
for line in infile:
if line.startswith('>'): # 메타 정보가 시작되는 행
# 이전 시퀀스를 처리
if cur_meta and write_seq:
# 메타와 시퀀스를 출력 파일에 기록
outfile.write(cur_meta)
outfile.write(''.join(cur_seq))
# 새로운 메타 정보 처리
cur_meta = line
cur_seq = []
split_meta = cur_meta.split('|')
if len(split_meta) > 6 and split_meta[6] == gene: # 7번째 값이 gene인지 확인
write_seq = True # 시퀀스를 출력할지 여부 결정
else:
write_seq = False
else:
if write_seq:
cur_seq.append(line) # 시퀀스 데이터를 리스트에 추가
# 마지막 시퀀스를 처리
if cur_meta and write_seq:
outfile.write(cur_meta)
outfile.write(''.join(cur_seq))
#result
/Influenza
└── Raw/
├── A-H1N1.fasta
├── A-H1N1.fasta
├── ...
└── B.fasta
└── Preprocessed/
├── HA/
│ ├── A-H1N1.fasta
│ ├── A-H1N1.fasta
│ ├── ...
│ └── B.fasta
└── ...
└── (HA와 동일 구조)
8개 gene segment별로 fasta 파일을 분리함.