20 분 소요

SAM/BAM 파일 처리 실습

개요

이 장에서는 시퀀스 정렬 결과인 SAM/BAM 파일의 구조를 이해하고 samtools를 사용한 처리 방법을 다룬다.

실습 환경 구성

conda를 사용하여 samtools를 설치한다.

$ conda activate bioinfo
$ conda install samtools

SAM/BAM 파일 형식

SAM 파일 구조

SAM(Sequence Alignment/Map)은 정렬 결과를 저장하는 텍스트 형식이다. 헤더와 정렬 레코드로 구성된다.

헤더 예시:

@HD	VN:1.6	SO:coordinate
@SQ	SN:chr1	LN:248956422
@RG	ID:sample1	SM:sample1	PL:ILLUMINA
@PG	ID:bwa-mem2	PN:bwa-mem2	VN:2.2.1

헤더 태그:

태그 설명
@HD 헤더 정보 (버전, 정렬 순서)
@SQ 참조 서열 정보 (이름, 길이)
@RG Read Group 정보
@PG 프로그램 정보

정렬 레코드

각 read의 정렬 정보는 탭으로 구분된 11개의 필수 필드로 구성된다.

필드 이름 설명
1 QNAME Read 이름
2 FLAG 비트 플래그
3 RNAME 참조 서열 이름
4 POS 정렬 시작 위치 (1-based)
5 MAPQ 맵핑 품질
6 CIGAR 정렬 정보
7 RNEXT 짝 read의 참조 서열
8 PNEXT 짝 read의 위치
9 TLEN 템플릿 길이
10 SEQ 서열
11 QUAL 품질 점수

FLAG 필드

FLAG 필드는 read의 상태를 비트 플래그로 표현한다.

의미
1 paired-end 시퀀싱
2 properly paired
4 unmapped
8 mate unmapped
16 reverse strand
32 mate reverse strand
64 first in pair (R1)
128 second in pair (R2)
256 secondary alignment
512 failed QC
1024 duplicate
2048 supplementary alignment

여러 상태가 조합되면 값을 더한다. 예를 들어 FLAG=99는 paired(1) + properly paired(2) + mate reverse(32) + first in pair(64) = 99이다.

CIGAR 문자열

CIGAR는 정렬 상태를 압축하여 표현한다.

문자 의미
M 매치 또는 미스매치
I 삽입 (read에만 존재)
D 삭제 (참조에만 존재)
N 스킵 영역 (RNA-seq 인트론)
S 소프트 클리핑
H 하드 클리핑

예시: 50M2I30M은 50bp 매치, 2bp 삽입, 30bp 매치를 의미한다.

BAM 형식

BAM은 SAM의 바이너리 압축 형식이다. 파일 크기가 작고 처리 속도가 빠르다. 일반적으로 BAM 형식으로 저장하고 필요시 SAM으로 변환하여 확인한다.

samtools 기본 명령

파일 변환

SAM을 BAM으로 변환:

$ samtools view -bS aligned.sam > aligned.bam

BAM을 SAM으로 변환하여 확인:

$ samtools view aligned.bam | less

헤더와 함께 출력:

$ samtools view -h aligned.bam | less

정렬 (sorting)

좌표 기준 정렬:

$ samtools sort -o aligned.sorted.bam aligned.bam

Read 이름 기준 정렬:

$ samtools sort -n -o aligned.namesorted.bam aligned.bam

인덱싱

정렬된 BAM 파일에 인덱스를 생성하면 특정 영역을 빠르게 조회할 수 있다.

$ samtools index aligned.sorted.bam

인덱스 파일 .bai가 생성된다.

통계 확인

기본 통계:

$ samtools flagstat aligned.sorted.bam

상세 통계:

$ samtools stats aligned.sorted.bam > stats.txt

BAM 파일 필터링

특정 영역 추출

인덱스가 있는 BAM 파일에서 특정 영역만 추출:

$ samtools view aligned.sorted.bam chr1:1000000-2000000

FLAG 기반 필터링

mapped read만 추출 (-F 4는 unmapped 제외):

$ samtools view -F 4 aligned.sorted.bam > mapped.bam

properly paired read만 추출:

$ samtools view -f 2 aligned.sorted.bam > proper_pairs.bam

주요 옵션:

옵션 설명
-f 해당 FLAG가 설정된 read만 포함
-F 해당 FLAG가 설정된 read 제외
-q 최소 맵핑 품질

품질 기반 필터링

맵핑 품질 20 이상인 read만 추출:

$ samtools view -q 20 aligned.sorted.bam > high_quality.bam

중복 표시

PCR 중복은 라이브러리 준비 과정에서 발생하며, 분석 전에 표시하거나 제거해야 한다.

$ samtools markdup aligned.sorted.bam marked.bam

중복 제거:

$ samtools markdup -r aligned.sorted.bam dedup.bam

IGV를 이용한 시각화

IGV(Integrative Genomics Viewer)는 BAM 파일을 시각적으로 확인할 수 있는 도구이다.

IGV 설치

IGV는 https://igv.org/doc/desktop/ 에서 다운로드할 수 있다.

BAM 파일 로드

  1. 참조 유전체를 선택한다 (Genomes > Load Genome).

  2. BAM 파일을 로드한다 (File > Load from File).

  3. 관심 영역으로 이동하여 정렬 결과를 확인한다.

IGV에서 각 read는 막대로 표시되며, 색상은 방향이나 매핑 품질을 나타낸다. 변이가 있는 위치는 다른 색으로 표시된다.

전체 파이프라인 예시

Fastq에서 분석 가능한 BAM까지의 전체 과정:

# 정렬 및 BAM 변환
$ bwa-mem2 mem -t 8 -R '@RG\tID:sample1\tSM:sample1\tPL:ILLUMINA' \
    hg38.fa R1.fastq.gz R2.fastq.gz | samtools sort -o aligned.sorted.bam
 
# 인덱싱
$ samtools index aligned.sorted.bam
 
# 중복 표시
$ samtools markdup aligned.sorted.bam marked.bam
$ samtools index marked.bam
 
# 통계 확인
$ samtools flagstat marked.bam

실습 과제

실습 21.1: SAM 파일 구조 이해

  1. SAM 파일을 열어 헤더와 정렬 레코드를 확인한다.

  2. 특정 read의 FLAG 값을 해석한다.

  3. CIGAR 문자열이 의미하는 정렬 상태를 설명한다.

실습 21.2: samtools 기본 사용

  1. SAM 파일을 BAM으로 변환한다.

  2. BAM 파일을 좌표 기준으로 정렬한다.

  3. 인덱스를 생성한다.

  4. flagstat으로 통계를 확인한다.

실습 21.3: 필터링과 시각화

  1. 특정 염색체 영역의 read만 추출한다.

  2. 맵핑 품질 20 이상인 read만 추출한다.

  3. IGV에서 BAM 파일을 로드하여 정렬 결과를 확인한다.

출처

이 본편 글은 원본 docx에 기록된 아래 출처를 기준으로 게시했습니다.

문제 풀이

Chapter 21. SAM/BAM 파일 처리

0 / 21
Gemini AI 채점

주관식 답안은 Gemini API로 채점합니다. API 키는 이 브라우저에만 저장됩니다.

API KEY 미등록
  1. 1. [쉬움] 객관식

    SAM 헤더 태그와 설명의 연결로 옳은 것을 고르시오.

    선택지
  2. 2. [쉬움] 객관식

    SAM 정렬 레코드의 11개 필수 필드에 대한 설명으로 옳은 것을 고르시오.

    선택지
  3. 3. [쉬움] 객관식

    FLAG=99의 해석으로 본편에 제시된 내용과 일치하는 것을 고르시오.

    선택지
  4. 4. [쉬움] 객관식

    CIGAR 문자열 50M2I30M의 의미로 옳은 것을 고르시오.

    선택지
  5. 5. [보통] 객관식

    SAM 파일을 BAM 파일로 변환하는 명령어로 옳은 것을 고르시오.

    선택지
  6. 6. [보통] 객관식

    BAM 파일을 SAM 형식으로 헤더와 함께 확인하는 명령어로 옳은 것을 고르시오.

    선택지
  7. 7. [보통] 객관식

    좌표 기준 정렬, 인덱싱, 기본 통계 확인 명령어의 조합으로 옳은 것을 고르시오.

    선택지
  8. 8. [보통] 객관식

    FLAG 및 품질 기반 필터링 옵션에 대한 설명으로 옳은 것을 고르시오.

    선택지
  9. 9. [보통] 객관식

    FLAG 계산 문제이다. paired(1), properly paired(2), reverse strand(16), first in pair(64)가 설정된 read의 FLAG 값은 얼마인가?

    선택지
  10. 10. [어려움] 객관식

    CIGAR 문자열 10S80M5D10M의 해석으로 옳은 것을 고르시오.

    선택지
  11. 11. [어려움] 객관식

    다음 SAM 레코드 일부에서 read가 정렬된 참조 서열과 시작 위치로 옳은 것을 고르시오.

    read001	99	chr1	1000	60	50M	=	1100	200	ACGT...	IIII...
    
    선택지
  12. 12. [어려움] 객관식

    중복 표시와 제거에 대한 설명으로 옳은 것을 고르시오.

    선택지
  13. 13. [어려움] 객관식

    특정 영역 추출과 IGV 시각화 흐름에 대한 설명으로 옳은 것을 고르시오.

    선택지
  14. 14. [어려움] 객관식

    전체 파이프라인 예시에 포함된 순서로 가장 적절한 것을 고르시오.

    선택지
  15. 주관식 1. [쉬움] 주관식 · Gemini 채점

    aligned.samaligned.bam으로 변환하고, 좌표 기준으로 정렬하여 aligned.sorted.bam으로 저장한 뒤, 인덱스를 생성하고 기본 통계를 확인하는 명령어를 순서대로 작성하시오.

  16. 주관식 2. [쉬움] 주관식 · Gemini 채점

    aligned.bam을 SAM 형식으로 헤더와 함께 출력하여 less로 확인하는 명령어를 작성하시오.

  17. 주관식 3. [보통] 주관식 · Gemini 채점

    인덱스가 있는 aligned.sorted.bam에서 chr1:1000000-2000000 영역만 추출하는 명령어를 작성하시오.

  18. 주관식 4. [보통] 주관식 · Gemini 채점

    aligned.sorted.bam에서 mapped read만 mapped.bam으로 저장하고, properly paired read만 proper_pairs.bam으로 저장하며, 맵핑 품질 20 이상인 read만 high_quality.bam으로 저장하는 명령어를 작성하시오.

  19. 주관식 5. [어려움] 주관식 · Gemini 채점

    FLAG 값 83을 본편의 방식처럼 비트 조합으로 분해하고 read 상태를 설명하시오.

  20. 주관식 6. [어려움] 주관식 · Gemini 채점

    정렬된 BAM에서 중복 표시 → 인덱스 생성 → 통계 확인을 수행하는 명령어를 작성하시오.

  21. 주관식 7. [어려움] 주관식 · Gemini 채점

    IGV에서 BAM 파일을 확인하는 절차와 화면에서 해석할 수 있는 정보를 설명하시오.