bedtools
#
Find similar titles
- 최초 작성자
- 최근 업데이트
Structured data
- Category
- Programming
bedtools란? #
BED, GFF3, VCF 등 1차원 좌표계를 포함하는 유전체 자료를 빠르게 상호 계산할 수 있도록 지원하는 명령행 프로그램. 즉 유전자 영역 파일 (GFF3)와 SNP 파일 (BED)을 갖고, 유전자 영역내 존재하는 SNP (GFF3와 BED의 교집합)을 빠르게 찾아낼 수 있다. (이런 연산을 Genome arithmetic이라고도 한다.) SAMtools의 tabix 보다 bedtools의 intersect가 훨씬 더 빠르게 동작한다. 파이썬 확장인 pybedtools도 있다.
- 공식 사이트: http://bedtools.readthedocs.org
- 코드 저장소: https://github.com/arq5x/bedtools2
사용 목적? #
위의 내용을 쉽게 정리해보면, 유전체 분석과정에서 생성된 시작, 중간 및 최종 파일(BED, GFF, VCF, BAM 등)들을 조작하여 내가 원하는 새로운 파일을 만든다든지 통계 summary 자료를 만들 수 있도록 도와주는 프로그램이라 말할 수 있다.
그림 1. bedtools의 가장 기본이 되는 기능 intersect 출처:1
예제를 그림으로 하나 보겠다. BED 파일을 다뤄 본 경험이 있다면 한눈에 이해가 쏙 들어 오는 그림일 것이다. 이 그림은 bedtools 공식 홈페이지에서 가져 온 것이며 두 파일이 있다면 chr, position을 이용하여 공통적인 구간을 새로 출력해줄 수 있음을 나타내고 있다. 이때 파일은 BAM, BED, GFF, VCF 모든 파일이 쓰일 수 있으며 확장명을 인식하여 프로그램이 자동으로 파일에 맞는 처리가 이루어진다. bedtools의 기능들은 매년 추가가 되어 이제는 몇 개의 소개만으로는 bedtools의 모든 기능을 보여줄 수가 없게 되었는데 한 가지 방법을 주자면 내가 유전체 파일들로 새로운 조작을 해야 할 때 그 내용이 다른 사람들도 한 번씩 나와 같이 데이터를 생성해 본 적이 있을 것 같은데? 라고 일반화시킬 수 있는 기능들은 우선 bed tools에서 검색해본 뒤, 없다면 프로그래밍을 진행하는 것이다. 직접 프로그래밍을 하면 될 테라고 생각할 수 있겠지만, 누군가가 잘 만든 기능은 따로 만들지 않고 기존의 것을 이용하여 부가 가치를 더욱 잘 만드는 것 또한 BI를 잘하는 사람들의 소양이라 할 수 있다. 또한, 아닌 경우도 간혹 있겠지만, 대부분은 직접 프로그래밍을 하여 만든 프로그램보다 bedtools를 이용할 경우 속도 차이가 실감 날 정도로 빠르다.
tip : 어떤 기능들이 있는지 빠르게 확인하는 방법. #
기능들을 글로 읽는 것보단 그림이 전달력이 빠르다. 위의 예제 그림처럼 모든 기능이 다 그림으로 나와있지 않지만 아래의 링크를 타고 들어가서 sub-commands를 하나씩 눌러보면 자주쓰는 기능들은 그림 표현으로 알 수 있다. 여유가 될때 한번들어가서 기능을 하나씩 눌러보고 파악하길 추천한다.
- sub-commands 리스트 확인 : https://bedtools.readthedocs.io/en/latest/content/bedtools-suite.html
설치 #
왠만한 운영체제에 모두 패키지화되어 있다. 다음처럼 설치 가능하다.
yum install BEDTools
apt-get install bedtools
Homebrew (OS X)
brew install bedtools
기본 명령 #
- annotate: 여러개의 파일을 입력하여 겹치는 영역 정보를 표시한다.
- bamtobed: BAM 파일을 BED 파일로 변환한다.
- intersect: 겹치는 영역을 출력한다.
- closet: 가장 가까운 곳의 위치를 출력한다.
- flank: 앞뒤로 특정 길이만큼 더한다.
- 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