k-Mer Composition

pDestiny·2023년 3월 21일
0

Rosalind-Solution

목록 보기
12/14
post-thumbnail

Generalizing GC-content

길이 k의 유전자 문자열 부분 문자열은 일반적으로 k-mer라고합니다. 길이 n의 유전자 문자열은 n-k + 1개의 중첩 k-mer로 구성될 수 있습니다. 유전자 문자열의 k-mer 구성은 문자열에서 각 가능한 k-mer가 발생하는 횟수를 인코딩합니다. 예를 들면 아래와 같이 말이죠.

1-mer 구성은 DNA의 GC-content를 정량화 할 수 있고, DNA 문자열의 2-mer, 3-mer 및 4-mer 구성은 이중핵산, 삼중핵산 및 사중핵산 구성으로 k-mer 구성을 정량화 합니다.

k-mer 구성의 생물학적 의의는 다양합니다. GC-content는 알려지지 않은 DNA 조각을 식별하는 데 도움이되는 것뿐만 아니라, 전체 게놈과 비교하여 높은 GC-content를 가진 유전자 영역은 엑손에 속할 가능성이 있음을 나타냅니다. k-mer 구성 분석은 Genome Assembly에 꼭 필요하기도 합니다.

k가 큰 값에 대해 k-mer 구성은 단일 기호의 분석 대신 부분 문자열 (즉, 단어)의 규모에서 분석을 제공하기 때문에 문자열의 정체성에 대한 더 robost한 fingerprint를 제공합니다. 비교 기준으로, 언어 분석에서 텍스트의 k-mer 구성은 언어를 정확히 파악하는 데만 아니라 종종 작가를 파악하는 데도 사용될 수 있습니다.

Problem

4-mer DNA sequence의 구성을 구하여라. 구성의 순서는 4-mer의 lexicographical 순서이다.(알파벳 순서대로)

Given : A DNA string ss in FASTA format (having length at most 100kbp)
Return : The 4-mer composition of ss

from Bio import SeqIO
from io import StringIO
from toolz.curried import *
from itertools import product

fasta = StringIO(""">Rosalind_6431
CTTCGAAAGTTTGGGCCGAGTCTTACAGTCGGTCTTGAAGCAAAGTAACGAACTCCACGG
CCCTGACTACCGAACCAGTTGTGAGTACTCAACTGGGTGAGAGTGCAGTCCCTATTGAGT
TTCCGAGACTCACCGGGATTTTCGATCCAGCCTCAGTCCAGTCTTGTGGCCAACTCACCA
AATGACGTTGGAATATCCCTGTCTAGCTCACGCAGTACTTAGTAAGAGGTCGCTGCAGCG
GGGCAAGGAGATCGGAAAATGTGCTCTATATGCGACTAAAGCTCCTAACTTACACGTAGA
CTTGCCCGTGTTAAAAACTCGGCTCACATGCTGTCTGCGGCTGGCTGTATACAGTATCTA
CCTAATACCCTTCAGTTCGCCGCACAAAAGCTGGGAGTTACCGCGGAAATCACAG""")
SeqIO를 StringIO를 이용하면 fastq string을 파일 없이도 읽어 낼 수 있다.
seqs = SeqIO.parse(fasta, "fasta")
# A C G T 로 알파벳 순서에 맞게 composition을 dict를 만든다.
compositions = {
    ''.join(k):0 for k in product(['A',"C", "G", "T"], repeat=4)
}

for seq in seqs:
	# 4-mer sliding windows를 toolz 툴로 만든다.
    windows = sliding_window(4, seq.seq)
    # window를 돌며 각 window가 몇번 나오는지를 계산한다.
    for window in windows:
        window = ''.join(window)
        compositions[window] += 1
        
# 출력한다.
for val in compositions.values():
    print(val, end=" ")

풀이는 github 전체 코드는 github에 올려놨습니다.(github는 코드가 조금 다름)

profile
Bioinformatician

0개의 댓글