728x90
반응형
시퀀싱 데이터의 fastq나 bam파일에는 각 염기서열 별로 얼만큼 확신하는지를 나타내는 phred score값이 있다.
이것의 문제는 값이 2자리 수를 넘어가게 되면 1-letter인 염기서열과 매칭이 되지 않으므로 각 숫자별로 상징 (symbol)을 매칭한다. 이를 통해 염기서열 길이와 phred score값의 길이는 일치하게 된다.
문제는 상징에서 점수로 변환하는 것은 외우고 다니기 어렵다. 이를 해결하고자 일루미나 홈페이지에서 있는 표를 참고하여 파이썬 기능을 만들었다.
score_mapping_33base = {chr(i):i-33 for i in range(33,91)}
score_mapping_64base = {chr(i):i-64 for i in range(64,122)}
import warnings
def get_quality_score(symbol,ascii_system=33):
'''
이것은 주어진 심볼에 대해 phred score를 반환하는 기능임.
#https://support.illumina.com/help/BaseSpace_OLH_009008/Content/Source/Informatics/BS/QualityScoreEncoding_swBS.htm
# 위의 코드는 제한적인 ascii만 있어서 이를 넘어가는 경우가 있을 때 문제가 생김 따라서 아래를 참조해서 늘림.
https://people.duke.edu/~ccc14/duke-hts-2018/bioinformatics/quality_scores.html
symbol : phred score vector that are encoded by ascii-code
ascii_system : 33 or 64 (default 33)
# return
'''
# Define the mapping of symbols to scores
if ascii_system==33:
score_mapping=score_mapping_33base
elif ascii_system==64:
score_mapping=score_mapping_64base
else:
raise Exception('Available ascii_system options are 33 or 64')
phred_score=[score_mapping.get(s,'idontknow') for s in symbol]
return phred_score
테스트
get_quality_score(symbol='HJIHIIFJGFGHE@HJGFIFJFGIIFF',ascii_system=33)
# [39, 41, 40, 39, 40, 40, 37, 41, 38, 37, 38, 39, 36, 31, 39, 41, 38, 37, 40, 37, 41, 37, 38, 40, 40, 37, 37]
get_quality_score(symbol='HJIHIIFJGFGHE@HJGFIFJFGIIFF',ascii_system=64)
# [8, 10, 9, 8, 9, 9, 6, 10, 7, 6, 7, 8, 5, 0, 8, 10, 7, 6, 9, 6, 10, 6, 7, 9, 9, 6, 6]
728x90
반응형
'파이썬3' 카테고리의 다른 글
[python] tqdm 사용법 (0) | 2023.10.17 |
---|---|
Cluster index permutation test (0) | 2023.10.04 |
2개의 회귀선의 기울기를 통계적으로 비교하는 법 (0) | 2023.08.22 |
vcf를 pandas dataframe으로 변경하는 코드 (0) | 2023.03.28 |
protein sequence one-hot encoding (0) | 2023.02.02 |