Skip to content

bedtools #

Find similar titles

8회 업데이트 됨.

Edit

Structured data

Category
Programming

bedtools란? #

BED, GFF3, VCF 등 1차원 좌표계를 포함하는 유전체 자료를 빠르게 상호 계산할 수 있도록 지원하는 명령행 프로그램. 즉 유전자 영역 파일 (GFF3)와 SNP 파일 (BED)을 갖고, 유전자 영역내 존재하는 SNP (GFF3와 BED의 교집합)을 빠르게 찾아낼 수 있다. (이런 연산을 Genome arithmetic이라고도 한다.) SAMtools의 tabix 보다 bedtools의 intersect가 훨씬 더 빠르게 동작한다. 파이썬 확장인 pybedtools도 있다.

  1. 공식 사이트: http://bedtools.readthedocs.org
  2. 코드 저장소: https://github.com/arq5x/bedtools2

사용 목적? #

위의 내용을 쉽게 정리해보면, 유전체 분석과정에서 생성된 시작, 중간 및 최종 파일(BED, GFF, VCF, BAM 등)들을 조작하여 내가 원하는 새로운 파일을 만든다든지 통계 summary 자료를 만들 수 있도록 도와주는 프로그램이라 말할 수 있다.

Image

그림 1. bedtools의 가장 기본이 되는 기능 intersect 출처:1

예제를 그림으로 하나 보겠다. BED 파일을 다뤄 본 경험이 있다면 한눈에 이해가 쏙 들어 오는 그림일 것이다. 이 그림은 bedtools 공식 홈페이지에서 가져 온 것이며 두 파일이 있다면 chr, position을 이용하여 공통적인 구간을 새로 출력해줄 수 있음을 나타내고 있다. 이때 파일은 BAM, BED, GFF, VCF 모든 파일이 쓰일 수 있으며 확장명을 인식하여 프로그램이 자동으로 파일에 맞는 처리가 이루어진다. bedtools의 기능들은 매년 추가가 되어 이제는 몇 개의 소개만으로는 bedtools의 모든 기능을 보여줄 수가 없게 되었는데 한 가지 방법을 주자면 내가 유전체 파일들로 새로운 조작을 해야 할 때 그 내용이 다른 사람들도 한 번씩 나와 같이 데이터를 생성해 본 적이 있을 것 같은데? 라고 일반화시킬 수 있는 기능들은 우선 bed tools에서 검색해본 뒤, 없다면 프로그래밍을 진행하는 것이다. 직접 프로그래밍을 하면 될 테라고 생각할 수 있겠지만, 누군가가 잘 만든 기능은 따로 만들지 않고 기존의 것을 이용하여 부가 가치를 더욱 잘 만드는 것 또한 BI를 잘하는 사람들의 소양이라 할 수 있다. 또한, 아닌 경우도 간혹 있겠지만, 대부분은 직접 프로그래밍을 하여 만든 프로그램보다 bedtools를 이용할 경우 속도 차이가 실감 날 정도로 빠르다.

tip : 어떤 기능들이 있는지 빠르게 확인하는 방법. #

기능들을 글로 읽는 것보단 그림이 전달력이 빠르다. 위의 예제 그림처럼 모든 기능이 다 그림으로 나와있지 않지만 아래의 링크를 타고 들어가서 sub-commands를 하나씩 눌러보면 자주쓰는 기능들은 그림 표현으로 알 수 있다. 여유가 될때 한번들어가서 기능을 하나씩 눌러보고 파악하길 추천한다.

설치 #

왠만한 운영체제에 모두 패키지화되어 있다. 다음처럼 설치 가능하다.

Fedora/CentOS

yum install BEDTools

Debian/Ubuntu

apt-get install bedtools

Homebrew (OS X)

brew install bedtools

기본 명령 #

  1. annotate: 여러개의 파일을 입력하여 겹치는 영역 정보를 표시한다.
  2. bamtobed: BAM 파일을 BED 파일로 변환한다.
  3. intersect: 겹치는 영역을 출력한다.
  4. closet: 가장 가까운 곳의 위치를 출력한다.
  5. flank: 앞뒤로 특정 길이만큼 더한다.
  6. merge: 겹치는 영역을 하나의 영역으로 병합한다.

예제 #

유전자 유전체위치 정보를 담은 BED 파일 (genes.bed)과 특정 리드 위치 정보를 담은 BED 파일 (reads.bed) 파일이 있다고 할 때, 겹치는 영역을 찾는 명령은 intersect 이다.

bedtools intersect -a reads.bed -b genes.bed

reads에서 genes가 겹쳐지지 않는 영역을 찾으려면 -v 옵션을 사용한다.

bedtools intersect -a reads.bed -b genes.bed -v

출력 결과는 곧바로 파이프로 또다른 프로세스에 연결할 수 있다. 예를들어, reads와 genes가 겹쳐지는 영역가운데 SINEs는 포함하지 않는 영역을 찾는다면,

bedtools intersect -a reads.bed -b genes.bed | \
    bedtools intersect -a stdin -b SINEs.bed -v

각 유전자별로 가장 가까운 ALU를 찾는 명령은 다음과 같다.

bedtools closet -a genes.bed -b ALU.bed

반복되어 겹쳐지는 영역을 하나의 엔트리로 합치고자 할때는 merge 명령을 사용한다.

bedtools merge -i repeatMasker.bed -n

만일 1000 bp 거리내에 있는 영역을 합칠때는 -d 옵션을 사용한다.

bedtools merge -i repeatMasker.bed -d 1000

출처 #

  • bedtools - intersect.1

Suggested Pages #

0.0.1_20231010_1_v71