본문 바로가기

전체 글78

[ROSALIND] (k, d)-motif 찾기 문제 설명 Motif란 비슷한 서열을 가짐으로서 비슷한 기능을 하는 것으로 알려진 DNA 내의 짧은 서열들이다. 예를 들어, A라는 단백질이 DNA에 결합하는 위치는 DNA 상에서 여러 위치에 존재하지만 모두 비슷한 서열을 가져야 A가 결합할 수 있을 것이다. 하지만 motif는 100% 똑같은 서열이 아닐 수 있기 때문에 이러한 motif를 찾기 위해서는 어느 정도 염기서열의 차이를 고려해야 한다. 이 문제에서는 (k, d)-motif를 찾는데 여기서 k는 k 길이를 가진 motif를 뜻하고, d는 최대 d 개수만큼 염기서열 차이가 있을 수 있다는걸 뜻한다. 이러한 (k, d)-motif는 서열에 직접 존재하지 않을 수도 있다. 예를 들어, 우리가 찾은 15 bp 길이를 가진 (k, d)-motif가 .. 2023. 7. 2.
[ROSALIND] 패턴을 숫자로 문제 (풀어보기) DNA 서열이 주어졌을 때 같은 길이의 서열들이 알파벳 순으로 정렬된다면 주어진 서열은 몇 번째 자리에 있는지 출력하시오. 예시 AGT 예상 결과 11 해결 def pattern_index(pattern): nuc_number = {'A':0, 'C':1, 'G':2, 'T':3} if len(pattern) == 1: return nuc_number[pattern] return 4 * pattern_index(pattern[:-1]) + nuc_number[pattern[-1]] print(pattern_index('CCGAAAACATCCAAGTCTCCAA')) 아래 그림에서 처럼 DNA 서열에는 A, C, G, T 로 총 4가지 염기서열만 가능하기 때문에 항상 4개씩 길이가 증가하게.. 2023. 7. 1.
푸아송 분포 Goal 1. 푸아송 분포(Poisson distribution)란? 2. 푸아송 분포를 사용하는 예시 푸아송 분포란? 푸아송 분포는 특정 기간 동안 일어나는 어떤 사건의 빈도를 확률로 나타낸 분포이다. 이러한 빈도수를 람다(λ)로 표시한다. 일반 이항분포와는 다른 점이 n이 무한으로 갈 때 n과 p의 값은 모르지만 np = λ를 유지한다는 것이다. 어떤 사건이 n번 일어날 확률은 아래와 같이 계산할 수 있다. 푸아송 분포의 흥미로운 점은 분포의 평균과 분산이 모두 람다와 같다는 것이다. 푸아송 분포에서는 빈도수를 x축에 표시하기 때문에 푸아송 분포는 0부터 시작한다 (마이너스 값을 가진 빈도수는 없으므로). 푸아송 분포를 이용하기 위해서는 두가지 조건을 만족시켜야 한다. 사건은 일정하게 일어난다. 사건.. 2023. 6. 17.
[ROSALIND] 제한 자리(restriction site) 찾기 문제 설명 바이러스는 자체 증식이 불가능하기 때문에 숙주의 시스템을 이용해 증식하게 된다. 박테리오파지(bacteriophage)는 박테리아(bacteria)를 숙주로 삼는 바이러스인데 바이러스는 어떻게든 침투해서 자신의 DNA가 증폭될 수 있게 박테리아에 삽입을 하려 하고, 박테리아는 이것을 막기 위해 세포 기능을 복잡하게 하거나 바이러스를 공격하는 기작을 갖추었다. 제한 효소(restriction enzyme)이라 불리는 단백질은 바이러스의 DNA를 절단함으로서 박테리오파지가 기능을 하지 못하게 막는다. 이런 제한 효소는 어떤 DNA를 찾아 절단할 수 있을까? 제한 효소는 homodimer이므로 2개의 똑같은 단백질 구조로 이루어져 있다. 각 구조는 제한 효소에서 DNA의 이중 가닥 중 한 가닥씩 절.. 2023. 6. 16.
[ROSALIND] 부분적 순열 문제 설명 비슷한 종은 공통적으로 가진 유전자들도 많다. 하지만 진화하면서 유전자들의 순서들에 변화가 생길 수 있고 일부 유전자는 없어질수도 있기 때문에 유전자들의 순서를 확인하면 유전자 재배열이 어떻게 되었는지를 알 수 있다. 문제 (풀어보기) 부분적 순열이란 전체 n개에서 k개만 뽑은 후 모든 배열 순서를 고려하는 것이다. 이 때, n과 k가 주어졌을 때 모두 가능한 순서의 개수에서 1,000,000으로 나눈 나머지를 출력하시오. 예시 21 7 예상 결과 51200 해결 def factorial(n): ans = 1 while n > 1: ans *= n n -= 1 return ans with open('rosalind_pper.txt', 'r') as f: n, k = map(int, f.read.. 2023. 6. 15.
k-mer로 패턴 빈도 구하기 Goal 1. K-mer란? 2. K-mer로 서열 패턴 빈도 구하기 K-mer란? 생물정보학에서 k-mer라는 말을 흔히 들어 볼 수 있다. K-mer란 쉽게 얘기해서 k 숫자만큼 길이를 가진 서열을 얘기한다. 예를 들어 3-mer라면 3 bp 길이를 가진 "ATA", "ATT", "GCT", "AGT" 등 3개의 염기로 이루어진 DNA 서열 같은걸 얘기하는 것이다. K-mer로 패턴 빈도 구하기 문제 DNA 복제를 시작하는 시점을 origin of replication, 즉 ori 라고 부른다. Vibrio cholerae라는 균의 ori 서열은 아래와 같다. atcaatgatcaacgtaagcttctaagcatgatcaaggtgctcacacagtttatccacaacctgagtggatgacatcaag.. 2023. 6. 14.
니들만-브니쉬(분쉬) 알고리즘 (Needleman-Wunsch) Goal 1. 니들만-브니쉬 알고리즘이란? 2. 니들만-브니쉬 알고리즘 알아보기 니들만-브니쉬 알고리즘이란? 두개의 DNA나 단백질 서열이 있을 때 sequence alignment를 하기 위한 알고리즘이다. Alignment란 쉽게 말해서 두 서열이 어떤 부분에 매치가 되고 어떤 부분엔 매치가 안 되는지 보여주는 것이다. 예를 들어 ATGCA와 ATCG를 align 한다면 아래와 같이 정렬할 수 있다. ATGCA AT-CG 최대한 매치되는 부분을 맞추고 매치가 되지 않는 부분은 하이픈(-)으로 표시하며 이걸 "gap"이라 부른다. 이런식으로 두 서열이 매치가 얼마나 잘 됐는지 판단하는 기준으로 alignment score를 사용하게 되는데 매치가 되면 플러스 값을 부여하고 매치가 되지 않거나 gap이 .. 2023. 6. 14.
다이나믹 프로그래밍 (Dynamic Programming) Goal 1. 다이나믹 프로그래밍 이해하기 2. Top-down과 bottom-up 방법 알아보기 다이나믹 프로그래밍(Dynamic Programing)이란? 다이나믹 프로그래밍이란 어떤 문제가 주어졌을 때 그 문제를 더 작은 단위의 문제들로 쪼개서 작은 문제부터 풀어나가는 방법이다. 더 작은 단위로 쪼개진 문제를 풀어서 얻은 결과로 원래 문제의 해답에 점점 더 가까워지는 방식이다. 이 알고리즘의 헛점은 문제를 작은 단위로 쪼갤 수 있을 때만 사용할 수 있다는 것이다. 다이나믹 프로그래밍 알고리즘을 사용하는 가장 흔한 예제가 바로 피보나치 숫자이다. 피보나치 숫자는 그 전에 오는 두 숫자를 계속해서 더해 나가기 때문에 n번째 숫자를 알아내기 위해선 처음부터 계속 더해오면 된다. 두 숫자씩 더하는 작은 단.. 2023. 6. 13.
Scikit-Learn vs. TensorFlow Goal 1. Scikit-learn과 TensorFlow의 차이 알아보기 2. Scikit-learn과 TensorFlow의 장담점 알아보기 Scikit-Learn vs. TensorFlow 쉽게 설명했을 땐 Scikit-learn은 이미 만들어진 머신러닝 알고리즘을 이용하고 싶을 때 흔히 사용하는 라이브러리이고, TensorFlow란 머신러닝 알고리즘을 만들기 위한 레고 블록 같은 느낌이라고 생각하면 된다. 비교 대상 Scikit-learn TensorFlow 머신러닝 알고리즘을 레고로 설명한다면 이미 레고로 잘 만들어진 모형이므로 바로 갖고 놀 수 있음 레고 블록들만 주어져서 내가 직접 만들고 싶은걸 만들어 놀아야 함 예시 SVM, Random Forests, Logistic Regression, .. 2023. 6. 1.