10강 / 20강
k-mer 색인을 직접 짓는다
31 글자로 자르고 사전에 담는다 · 왜 하필 31인가
발상은 단순합니다.
참조 전사체를 31 글자씩 잘라 사전에 담는다.
사전의 열쇠는 31 글자, 값은 그 조각이 나온 유전자 이름.
사전의 열쇠는 31 글자, 값은 그 조각이 나온 유전자 이름.
그러면 read 하나가 왔을 때, read 안의 31 글자를 하나 떼어 사전에서 찾아보기만 하면 됩니다. 사전 조회는 즉시 끝납니다.
TTTGCA 는 두 유전자에 다 들어 있습니다 — 13강의 문제가 벌써 보이네요.
Python
브라우저에서 실행
실제 색인입니다. 8칸마다 담아도 76bp read 는 여러 번 걸립니다.
Python
브라우저에서 실행
숫자로 보면 왜 작은 k 가 쓸모없는지 바로 보입니다.
Python
브라우저에서 실행
read 안 오류 하나의 파급 범위를 세어 봅니다.
Python
브라우저에서 실행
🎮 k-mer 실험실
k 를 바꿔 가며 색인 크기와 충돌을 확인하세요.
🤔 확인 문제
k 가 너무 작으면 생기는 문제는?
해설 k=10 이면 조합이 100만 가지인데 참조가 94만 염기입니다. 거의 모든 10-mer 가 어딘가에 나오죠 — 구별하는 힘이 없습니다.
🤔 확인 문제
read 한가운데 염기 하나가 틀렸을 때 31-mer 는 몇 개가 깨지는가?
해설 그 위치를 포함하는 31-mer 가 최대 31개입니다. 그래도 76bp read 에는 46개의 31-mer 가 있으니 15개가 살아남습니다 — 붙이는 데는 하나면 충분하죠.
🤔 확인 문제
색인을 8칸마다 만들어도 되는 이유는?
해설 색인에 담긴 것이 8칸 간격이어도, read 쪽은 모든 자리를 훑습니다. read 가 참조와 겹치는 구간이 31bp 이상이면 그 안에 색인된 k-mer 가 최소 하나는 들어 있죠. 메모리를 8분의 1로 줄이는 실용적인 요령입니다.