VCF파일의 구조에 대해서 아래의 글에서 알아보았습니다.
[생물정보학] - VCF 파일 포맷: 변이 정보를 담은 포맷
VCF 파일을 Input으로 데이터 정제를 하는데 주로 python이 많이 사용됩니다. 이때 VCF파일을 pandas 라이브러리의 DataFrame 형태로 읽어올 수 있습니다. 그러면 엑셀이나 tsv, csv로 내보낼 수도 있고, pandas 라이브러리를 이용해 VCF파일을 정제할 수 있습니다.
* VCF파일을 DataFrame으로 가져오는 python 코드
import io
import pandas as pd
def read_vcf(path):
with open(path, 'r') as f:
lines = [l for l in f if not l.startswith('##')]
return pd.read_csv(
io.StringIO(''.join(lines)),
dtype={'#CHROM': str, 'POS': int, 'ID': str, 'REF': str, 'ALT': str,
'QUAL': str, 'FILTER': str, 'INFO': str},
sep='\t'
).rename(columns={'#CHROM': 'CHROM'})
* 출력
* 코드 설명
path에는 vcf파일의 경로가 입력됩니다. 현재 경로에 vcf파일이 있다면, 위의 출력처럼 path에 'test.vcf'를 줘도 됩니다.
open()함수를 이용해서 파일을 읽어오고, ##으로 시작하는 메타 정보 부분을 제외하여 파일의 각 줄을 리스트형태로 lines에 저장합니다.
with open(path, 'r') as f:
lines = [l for l in f if not l.startswith('##')]
위에서 읽어온 lines는 아래와 같은 리스트입니다.
''.join(lines)를 이용해 모두 이어 붙여 string형태로 만든뒤에, io.StringIO를 이용하여 파일 형태로 만들어줍니다.
그 후, dtype을 이용해 VCF파일의 필수 8개의 열에 대해, 데이터 형식을 지정해 줍니다. (그 외의 열에 대해선 값들을 보고 pandas가 자동으로 지정해줍니다.)
첫 번째 열인 CHROM에는 #이 주석으로 붙어있기 때문에 rename함수를 이용해 이 부분을 '#CHROM'에서 'CHROM'으로 바꿔줍니다.
pd.read_csv(
io.StringIO(''.join(lines)),
dtype={'#CHROM': str, 'POS': int, 'ID': str, 'REF': str, 'ALT': str,
'QUAL': str, 'FILTER': str, 'INFO': str},
sep='\t'
).rename(columns={'#CHROM': 'CHROM'})
Reference)
python code: https://gist.github.com/dceoy/99d976a2c01e7f0ba1c813778f9db744
'Programming > Python 꿀팁' 카테고리의 다른 글
[Python] Redmine API 사용법 (0) | 2020.09.04 |
---|---|
[Python] dictionary max value에 대한 key 찾기 (0) | 2020.09.02 |
[Python] 이미지에 글자넣고 사이즈 조절하기(PIL library) (0) | 2020.08.28 |
[Python의 꽃] 리스트 컴프리헨션(List Comprehension) (1) | 2020.08.20 |
linux 서버에서 메일보내기 (python 이용) (2) | 2020.06.30 |