Size: 8727
Comment:
|
Size: 4194
Comment:
|
Deletions are marked like this. | Additions are marked like this. |
Line 1: | Line 1: |
|| [../2006-03] || (->) || | || (<-) || [../2006-02] || [../2006-04] || (->) || |
Line 3: | Line 3: |
OPTION="firstWeekDay" VALUE="Monday" 2006-02-20="BioXP" 2006-02-21="-->" 2006-02-22="-->" 2006-02-23="-->" 2006-02-24="BioXP" |
OPTION="firstWeekDay" VALUE="Sunday" 2006-03-01="공휴일" 2006-03-26="리눅스마스타1급1차시험일" |
Line 12: | Line 8: |
== 2006-02-27 == protease에 의해 잘린 peptide의 mass 측정 * 우선 peptide sequence 하나에 대해 질량을 구하는 함수를 만든다. {{{#!python def getPeptidesBy(self, kw=1): peptide = [] RE = self.RestrictionEnzymes[kw] resite = RE.re repos = RE.rpos for aminoacid in self.sequence: if repos == 'C': peptide.append(aminoacid) if aminoacid in resite: if peptide: yield ''.join(peptide) peptide = [] if repos == 'N': peptide.append(aminoacid) if peptide: yield ''.join(peptide) |
== 2006-03-03 == 어제에 이어서... |
Line 33: | Line 11: |
1. classmethod : 일반 메쏘드가 첫 인수(self)로 인스턴스 객체를 받는 것에 비해서 클래스 메쏘드는 첫 인수로 클래스 객체를 받는다. 메쏘드를 클래스 메쏘드로 변환하기 위해서 classmethod()를 호출해야 한다. 클래스 메쏘드 호출시 첫 번째 인수로 자동으로 해당 클래스 객체가 전달된다. ---- == 2006-03-02 == 어제에 이어서... |
|
Line 34: | Line 16: |
def calculateMass(self, peptide): mass = 0 for aminoacid in peptide: mass += self.AminoAcidMass[aminoacid] return mass - 18.02*(len(peptide)-1) |
1. enumerate() : peptide list들의 질량 list값들을 unittest에서 test할때 사용했다. 하나의 int값을 test할때는 assertAlmostEqual을 사용 * for문을 이용할 때 요소의 값뿐만 아니라 인덱스 값도 함께 필요할 때 사용한다. (인덱스, 요소값)튜플 자료를 반복적으로 넘겨준다. |
Line 40: | Line 19: |
* 문제점 발견) Protein() 안에 있는 RestrictionEnzymes를 깔끔하게 하기 위해서 밖으로 뺐더니 NameError: name 'Trypsine' is not defined 가 발생했다. * 문제점 해결) class Trypsin 보다 위에 있었기 때문에 에러가 발생했다. 아래에 두면 OK. 왜냐하면 이 녀석이 Trypsine을 호출할 때 위에서부터 검색하기 때문이다. |
|
Line 41: | Line 23: |
def getMassesOfPeptide(self): masses = [] for peptide in self.peptidelist: mass = self.calculateMass(peptide) masses.append(mass) return masses |
2. StringIO() : print 출력을 문자열로 저장하는 방법은 StringIO 표준 모듈을 이용하는 것이 간편하다. StringIO 모듈의 StringIO 클래스는 문자열을 파일 객체처럼 입.출력한다. 3. FastaGenerator() : multi fasta file을 받아서 record 단위로 출력해 주는 함수이다. * next() : 순차적으로 자료를 넘기고 더 이상 자료를 넘겨줄 수 없는 경우에는 StopIteration 예외를 발생한다. 파일 객체가 라인 단위의 반복자를 지원한다. {{{#! python def FastaGenerator(aFile): lines = [aFile.next()] for line in aFile: if line.startswith('>'): yield ''.join(lines) lines = [] lines.append(line) else: yield ''.join(lines) |
Line 48: | Line 38: |
* 의문) : lines = [aFile.next()]에서 내 생각엔 aFile.next()를 쓰지 않아도 될거 같은데 없으면 AssertionError: '>title1\nATGC\nATGC\n' != " 가 발생한다. ??? | |
Line 49: | Line 40: |
* 테스트시 값이 실수인 경우에는 assertAlmostEqual을 사용해서 테스트를 한다. (결과값이 리스트인 경우에는 안된다.) | {{{#! python def testFastaGenerator(self): input = StringIO('''\ >title1 ATGC ATGC >title2 TACG TACG ''') g = FastaGenerator(input) expect = '''\ >title1 ATGC ATGC ''' self.assertEquals(expect, g.next()) expect1 = '''\ >title2 TACG TACG ''' self.assertEquals(expect1, g.next()) }}} * 의문 : g.next()로 하지 않고, FastaGenerator(input)을 직접 사용했더니 AssertionError: '>title2\nTACG\nTACG\n' != 'TACG\nTACG\n' 에러가 발생했다. 왜 그럴까? -> AssertionError는 assert문이 실패할 때 발생한다. 4. lines.splitlines() : 문자열을 라인단위로 분리한다. 결과는 리스트 |
Line 53: | Line 72: |
== 2006-02-17 == protease로 절단한 부위 리턴하기 * protease마다 절단 부위만 다르고, 동작하는 함수는 흡사하기 때문데 함수를 하나로 통일해서 작업하자... * 유의사항) C-term, N-term 어디서 시작하는지 유의할 것. * tip) generator를 활용하자... yield는 발생자를 위해서 파이썬 2.2에 새롭게 도입된 예약어이다. 어떤 함수이든 yield를 가지고 있다면 발생자이다. 파이썬 컴파일러가 이 키워드를 검출하면 이 함수를 발생자로 만들기 위해 별도로 처리한다. yield는 return과 유사하나 실행 상태를 보존한 상태에서 복귀한다. {{{#!python def digest(aProtein, ReSites, RsPos='C'): peptide=[] for aminoacid in aProtein: if RsPos=='C': peptide.append(aminoacid) if aminoacid in ReSites: yield ''.join(peptide) peptide = [] if RsPos=='N': peptide.append(aminoacid) else: yield ''.join(peptide) }}} * tip) for문에 else는 for문이 다 돌고 나면 마지막에 돌고, for문에서 error가 나면 else도 수행하지 않는다. ---- == 2006-02-16 == 오늘은 회사 홈페이지 몇 군데를 수정했다. * product/transcriptomics --> 149,139,259,154 * product/proteomics --> 275,140,350,152 * product/metabolomics --> 365,140,458,153 |
== 2006-03-01 == 오늘의 문제 : 입력으로 multi FASTA format으로 구성된 DNA 서열을 받고, 출력으로 peptide 조각들의 질량을 돌려준다. * 1단계 : CRC card를 작성해 보자. * 2단계 : unittest로 코드 작성 1. map -> start codon의 인덱스를 찾기 위해서 사용했다. 여러개 있을 수도 있기 때문에 사용 * map함수의 첫번째 인수는 함수이고, 두번째 인수는 리스트이다. 두번째 인수의 모든 아이템들은 첫 인수인 함수에 적용되고 결과로 리스트를 리턴한다. * startcodon = map(sequence.find, StartCodon) 주의) 내가 받는 값의 type을 잘 살펴보자... |
Line 81: | Line 81: |
포토샵 팁) gif파일 수정하기 * 우선 gif파일을 열고, image -> mode -> RGB color를 선택, background layer를 더블클릭해서 자물쇠를 없애면 그때부터 작업할 수 있다. 스포이드로 색깔을 찍어서 확인할 수 있고, T 를 누르면 글자를 생성.작업할 수 있고 마쳤으면 위에 꺽쇠를 누르면 된다. 오른쪽 layer표시에 주의해서 작업하자... ---- == 2006-02-15 == RNA translate * 자세히 보면 DNA서열로 translate한 코드와 유사하다. (단, U가 T로 바뀌는 것만 제외하면...) * tip) 같은 부분은 부모 class로 빼고, 다른 부분만 적어 준다. * 주의사항) U가 T로 바뀌면 self.sequence가 바뀌기 때문에 translate 돌려주고 다시 self.sequence는 원래 sequence로 바꿔준다. |
2. yield : protein sequence를 받아서 restriction enzyme으로 자를 때 사용했다. * 일반 함수와 발생자의 큰 차이점은 일반 함수는 한번 함수가 호출되면 종료할 때까지 모든 일을 마친 결과를 넘겨야 하는 반면에, 발생자는 정보를 생성하는 중간에 결과를 넘길 수 있다. |
Line 91: | Line 84: |
DNA서열로 만든 protein서열을 fasta로 돌려주기 * 이미 NucleicAcid라는 class를 만들어서 DNA와 RNA에 관련된 일을 하는 코드들을 묶어 두었다. * protein서열은 NucleicAcid class에는 적합하지 않다고 판단, BioMolecule이라는 NucleicAcid의 상위 클래스를 만들어서 protein에 관한 일을 하는 코드들은 직접 Biomolecule에 쓰고, BioMolecule은 NucleicAcid를 상속 받는다. * 문제점 해결) 내 sequence 가지고 이미 만들어진 getFasta라는 함수를 쓰면 되기 때문에 test코드에 있는 title만 유념해서 getFasta를 상속받아서 쓰면 된다. * tip) 클래스 이름이나 함수 이름을 지을 때, 그리고 그 함수와 클래스의 관계를 잘 파악해서 상속 받는 개념을 잘 이해해 두자... amino acid sequence에서 trysine으로 절단한 부위 리턴하기 {{{#!python def getTrypticDigests(self): result = [] changelist = self.sequence for each in changelist: self.sequence = changelist Arg = self.sequence.find('R')+1 Lys = self.sequence.find('K')+1 if each == 'R': result.append(self.sequence[:Arg]) changelist = self.sequence[Arg:] elif each == 'K': result.append(self.sequence[:Lys]) changelist = self.sequence[Lys:] if changelist != '': result.append(changelist) return result }}} * 문제점 발견) 마지막 sequence가 R이나 K가 아니면 그 뒤에 sequence는 return이 되지 않는다. * 문제점 해결) return하기전에 sequence를 result에 추가하고, 추가할게 없는 result는 공문자열을 생성하는데, 그걸 if문으로 삭제했다. amino acid sequence에서 chymotrypsin으로 절단한 부위 리턴하기 * trysine으로 절단하는 코드와 유사하다... ---- == 2006-02-14 == error 메시지를 자세히 보면서 풀면 잘 해낼 수 있다...^^ * 문제점 해결) 일단 RNA의 class를 만든다. 그 다음 title과 sequence를 print로 찍어보면, 다음에 무엇을 해야할 지 알 수 있을 것이다. RNA 서열 fasta 포맷 형식으로 출력하기... * 문제점 해결) RNA class에 DNA class에서 사용했던 parseFasta()를 사용 상속 * DNA나 RNA는 서로 비슷하고 하는 일도 비슷한 것이 있다...이 때, 하는 일이 비슷한 함수를 부모 class에 묶어서 두는 것을 상속이라 한다. 새로운 문제 * reversetranscription 하는 test code {{{#!python class RNA(NucleicAcid): def getcDNA(self): dna = DNA() dna.title = 'cDNA of ' + self.title dna.sequence = self.sequence.replace('U', 'T') return dna }}} * tip) 함수를 만들었을 때, 중간중간 테스트 하다보면 AttributeError: 'NoneType' object has no attribute 'title' 이라는 에러코드가 뜬다. 이게 뜨는 이유는 함수에 return 값이 없기 때문이다... ---- == 2006-02-13 == -1을 제외한 가장 작은 수를 구하는 함수를 만들어서 start codon을 구해서 code 작성. * 문제점 발견 : stop codon을 for문을 이용해서 하나씩 seq에 대입해서 code를 작성했더니, stop codon에서 멈추지 않고 끝까지 translation했다. * 이유 : 아마도 for문을 벗어나도 result문이 있기 때문인 것 같다. * 문제점 해결 : 일단 start codon code는 그대로 가고, start codon 이후의 seq에서 stop codon의 -1을 제외한 가장 작은 수를 구해서 stop codon이 있으면 stop codon을 3으로 나눈 수에 1을 더한 만큼 for문을 돌려서 translation했다. * tip) -1을 제외한 가장 작은 수 구하는 함수를 만들어 놓고, 다른 함수에서 쓰려고 한다. 이 때, 이 함수 역시 DNA()라는 class안에 있기 때문에 self.mymin()이라고 쓰면 된다. 새로운 문제 {{{#!python def testGetRna(self): rna = self.dna.getRna() self.assertEquals('RNA of test', rna.title) self.assertEquals('AGUC', rna.sequence) }}} 이 테스트 code를 통과하는 함수를 만들어라... ---- == 2006-02-10 == 계속해서 translation code 작성 중... - start codon이 여러개일때 가장 먼저 나오는 start codon을 찾아야 한다. * tip) 논리 연산을 이용해 차례대로 하나씩 비교해서 작은 수를 변수에 저장한다. 그런데, -1이 나오면 제외시켜야 한다. * 문제점 발견) [0]부분에 -1이 있으면 return 값이 -1이 나온다. * 문제점 해결) 배열을 sorted(배열, reverse=1)로 정렬한 다음 진행한다. ---- == 2006-02-08 == translation code 작성 * genetic code는 17개 정도로 종마다 다르다. * 이걸 함수 하나에 작성해야 한다. * tip) class를 써서 종마다 다른 부분(ProComp, icodon, tcodon)을 작성. 함수에는 translation하는 code를 작성하는데, 다른 부분은 class에서 따온다. |
|
Line 178: | Line 87: |
|| [../2006-03] || (->) || | || (<-) || [../2006-02] || [../2006-04] || (->) || |
(<-) |
[../2006-02] |
[../2006-04] |
(->) |
2006 / March | ||||||
Sunday | Monday | Tuesday | Wednesday | Thursday | Friday | Saturday |
-1- | -2- | -3- | -4- | |||
공휴일 |
||||||
-5- | -6- | -7- | -8- | -9- | -10- | -11- |
-12- | -13- | -14- | -15- | -16- | -17- | -18- |
-19- | -20- | -21- | -22- | -23- | -24- | -25- |
-26- | -27- | -28- | -29- | -30- | -31- | |
리눅스마스타1급1차시험일 |
2006-03-03
어제에 이어서...
1. classmethod : 일반 메쏘드가 첫 인수(self)로 인스턴스 객체를 받는 것에 비해서 클래스 메쏘드는 첫 인수로 클래스 객체를 받는다. 메쏘드를 클래스 메쏘드로 변환하기 위해서 classmethod()를 호출해야 한다. 클래스 메쏘드 호출시 첫 번째 인수로 자동으로 해당 클래스 객체가 전달된다.
2006-03-02
어제에 이어서...
1. enumerate() : peptide list들의 질량 list값들을 unittest에서 test할때 사용했다. 하나의 int값을 test할때는 assertAlmostEqual을 사용
- for문을 이용할 때 요소의 값뿐만 아니라 인덱스 값도 함께 필요할 때 사용한다. (인덱스, 요소값)튜플 자료를 반복적으로 넘겨준다.
문제점 발견) Protein() 안에 있는 RestrictionEnzymes를 깔끔하게 하기 위해서 밖으로 뺐더니 NameError: name 'Trypsine' is not defined 가 발생했다.
- 문제점 해결) class Trypsin 보다 위에 있었기 때문에 에러가 발생했다. 아래에 두면 OK. 왜냐하면 이 녀석이 Trypsine을 호출할 때 위에서부터 검색하기 때문이다.
2. StringIO() : print 출력을 문자열로 저장하는 방법은 StringIO 표준 모듈을 이용하는 것이 간편하다. StringIO 모듈의 StringIO 클래스는 문자열을 파일 객체처럼 입.출력한다.
3. FastaGenerator() : multi fasta file을 받아서 record 단위로 출력해 주는 함수이다.
next() : 순차적으로 자료를 넘기고 더 이상 자료를 넘겨줄 수 없는 경우에는 StopIteration 예외를 발생한다. 파일 객체가 라인 단위의 반복자를 지원한다.
def FastaGenerator(aFile): lines = [aFile.next()] for line in aFile: if line.startswith('>'): yield ''.join(lines) lines = [] lines.append(line) else: yield ''.join(lines)
의문) : lines = [aFile.next()]에서 내 생각엔 aFile.next()를 쓰지 않아도 될거 같은데 없으면 AssertionError: '>title1\nATGC\nATGC\n' != " 가 발생한다. ???
def testFastaGenerator(self): input = StringIO('''\ >title1 ATGC ATGC >title2 TACG TACG ''') g = FastaGenerator(input) expect = '''\ >title1 ATGC ATGC ''' self.assertEquals(expect, g.next()) expect1 = '''\ >title2 TACG TACG ''' self.assertEquals(expect1, g.next())
의문 : g.next()로 하지 않고, FastaGenerator(input)을 직접 사용했더니 AssertionError: '>title2\nTACG\nTACG\n' != 'TACG\nTACG\n' 에러가 발생했다. 왜 그럴까?
-> AssertionError는 assert문이 실패할 때 발생한다.
4. lines.splitlines() : 문자열을 라인단위로 분리한다. 결과는 리스트
2006-03-01
오늘의 문제 : 입력으로 multi FASTA format으로 구성된 DNA 서열을 받고, 출력으로 peptide 조각들의 질량을 돌려준다.
- 1단계 : CRC card를 작성해 보자.
- 2단계 : unittest로 코드 작성
1. map -> start codon의 인덱스를 찾기 위해서 사용했다. 여러개 있을 수도 있기 때문에 사용
- map함수의 첫번째 인수는 함수이고, 두번째 인수는 리스트이다. 두번째 인수의 모든 아이템들은 첫 인수인 함수에 적용되고 결과로 리스트를 리턴한다.
startcodon = map(sequence.find, StartCodon)
주의) 내가 받는 값의 type을 잘 살펴보자...
2. yield : protein sequence를 받아서 restriction enzyme으로 자를 때 사용했다.
- 일반 함수와 발생자의 큰 차이점은 일반 함수는 한번 함수가 호출되면 종료할 때까지 모든 일을 마친 결과를 넘겨야 하는 반면에, 발생자는 정보를 생성하는 중간에 결과를 넘길 수 있다.
(<-) |
[../2006-02] |
[../2006-04] |
(->) |