29.2 생물 서열 모델

실습 · 연습문제 1개

k-mer 개수 벡터 kmer-counts

서열 ss의 k-mer 개수 벡터는 길이 kk의 모든 부분 문자열이 몇 번 나오는지 센 ∣A∣k|A|^k 차원 벡터다.

vk(s)[w]=#{ i:si:i+k=w },w∈Ak.\mathbf{v}_k(s)[w] = \#\{\, i : s_{i:i+k} = w \,\}, \qquad w \in A^k.

함수 kmer_counts(seq, k, alphabet="ACGT")를 완성해 길이 len(alphabet) ** k의 NumPy 배열을 반환한다.

  • 성분의 순서는 alphabet의 글자 순서를 따르는 사전식 순서다. alphabet="ACGT", k=2이면 AA, AC, AG, AT, CA, …, TT 순서다. k-mer w=a1a2⋯akw = a_1 a_2 \cdots a_k의 각 글자가 alphabet에서 j1,…,jkj_1, \dots, j_k번째(0부터)이면 위치는 ∑t=1kjt ∣A∣k−t\sum_{t=1}^{k} j_t \, |A|^{k-t}, 즉 ∣A∣|A|진법 수다.
  • 소문자도 받는다(대문자로 바꿔서 센다).
  • 실제 DNA 서열에는 염기를 확정하지 못한 자리가 N처럼 알파벳 밖의 글자로 기록된다. 알파벳 밖의 글자가 하나라도 들어간 k-mer는 세지 않는다.
  • 서열이 k보다 짧으면 모든 성분이 0인 벡터를 반환한다.

예: kmer_counts("ACGT", 2)는 AC, CG, GT 자리(1, 6, 11번)가 1이고 나머지가 0인 길이 16 벡터다.

힌트: 각 글자를 번호로 바꾼 뒤, 길이 kk의 창을 밀며 ∣A∣|A|진법 수를 계산한다.