|| (<-) || [../Alignment] || [../] || [../SequenceClass] || (->) || '''3.6 Substitution Matrices''' SubstitutionMatrix 는 일상의 bioinformatics work 에 극히 중요한 부분이다. 그것들은 두 개의 서로 다른 residue 가 얼마나 서로를 대치할 수 있는가를 구분하는 scoring term을 제공한다. 이것은 sequence comparison 에 필수적이다. Durbin et al. 에 의한 ''BiologicalSequenceAnalysis'' 은 SubstitutionMatrix 와 그것들의 사용에 관한 정말 멋진 introduction을 제공하였다. 유명한 SubstitutionMatrix 는 PAM 과 BLOSUM series 이다. Biopython 많은 일반적인 SubstitutionMatrix를 제공하고, 또한 당신 자신의 SubstitutionMatrix를 만드는 기능을 제공한다. ==== 3.6.1 흔한 common SubstitutionMatrix 사용하기 ==== ==== 3.6.2 Alignment 로부터 당신 자신의 SubstitutionMatrix 만들기 ==== SubstitutionMatrix class를 가지고 쉽게 할 수 있는 아주 멋진 것은 alignment 로부터 당신 자신의 SubstitutionMatrix를 만드는 것이다. 실제로, 이것은 보통 protein alignment 로 한다. 이 예에서는 처음에는 biopython alignment object를 얻을 것이고, 그 다음에 alignment 에 대한 정보를 계산할 summary object를 얻을 것이다. {{{ from Bio import Clustalw from Bio.Alphabet import IUPAC from Bio.Align import AlignInfo # get an alignment object from a Clustalw alignment output c_align = Clustalw.parse_file('protein.aln', IUPAC.protein) summary_align = AlignInfo.SummaryInfo(c_align) }}} Sections 3.5.1 과 3.5.2 에 이에 대한 더 많은 정보가 있다. 이제, 우리는 summary_align object를 얻었고, 우리는 서로 다른 residue 가 서로를 대치한 수를 찾기 위해서 그것을 이용하길 원한다. 예제를 더 재미있게 하기 위해서, 우리는 단지 polar charged side chains을 가진 AminoAcid 에만 초점을 맞출 것이다. 다행히도, 이것은 replacement dictionary를 생성할 때 무시되어야 할 모든 character를 넘겨줌으로써 쉽게 이루어질 수 있다. 이와 같이 우리는 오직 charged 된 polar AminoAcid 에 대한 replacemet dictionary를 만들 것이다. {{{ replace_info = summary_align.replacement_dictionary(["G", "A", "V", "L", "I", "M", "P", "F", "W", "S", "T", "N", "Q", "Y", "C"]) }}} AminoAcid replacement 에 대한 이 정보는 아래와 같이 보이는 python dictionary 로 나타내어진다. {{{ {('R', 'R'): 2079.0, ('R', 'H'): 17.0, ('R', 'K'): 103.0, ('R', 'E'): 2.0, ('R', 'D'): 2.0, ('H', 'R'): 0, ('D', 'H'): 15.0, ('K', 'K'): 3218.0, ('K', 'H'): 24.0, ('H', 'K'): 8.0, ('E', 'H'): 15.0, ('H', 'H'): 1235.0, ('H', 'E'): 18.0, ('H', 'D'): 0, ('K', 'D'): 0, ('K', 'E'): 9.0, ('D', 'R'): 48.0, ('E', 'R'): 2.0, ('D', 'K'): 1.0, ('E', 'K'): 45.0, ('K', 'R'): 130.0, ('E', 'D'): 241.0, ('E', 'E'): 3305.0, ('D', 'E'): 270.0, ('D', 'D'): 2360.0} }}} 이 정보는 우리에게 replacement 의 accepted number를 주거나, 얼마나 자주 우리가 서로 다른 것들이 서로를 대치할 것을 기대할 수 있는지를 알려준다. 충분히 놀랍게도 이것이 우리가 나아가서 SubstitutionMatrix를 만들기 위해 필요한 정보의 모든 것이다. 처음에는 우리는 AcceptedReplacementMatrix (ARM)를 만들기 위해서 replacement dictionary information을 사용한다. {{{ from Bio import SubsMat my_arm = SubsMat.SeqMat(replace_info) }}} 이 accepted replacement matrix와 더불어 우리는 나아가 log odds matrix를 만든다. (ie. a standard type Substitution Matrix) {{{ my_lom = SubsMat.make_log_odds_matrix(my_arm) }}} 당신이 만든 log odds matrix 다음의 optional argument 로서 customize 가능하다. exp_freq_table -- 각각의 alphabet 에 대해 기대되는 frequency 의 table을 pass 할 수 있다. 만약 이것이 작성된다면, 이것은 expected replacement를 계산할 때 passed accepted replacement matrix 대신에 사용될 것이다. logbase - log odd matrix를 생성할 때 사용된 logarithm 의 base. Defaults 는 base 10. factor - 각각의 matrix를 multiply 할 factor. 이것의 defaults 는 10이고, 보통 이것은 matrix number로 작업하기 쉽게 만든다. round_digit - The digit to round to in the matrix. (matrix에서 정수화할 수) 이것의 defaults 는 0이다. 당신의 log odds matrix를 가지게 되었을 때, 당신은 그것을 print_mat function을 사용해서 예쁘게 보여줄수 있다. 우리의 생성된 matrix 에 대해서 이렇게 한 것은 다음과 같다. (역자주 : 해석상의 어려움) {{{ >>> my_lom.print_mat() D 6 E -5 5 H -15 -13 10 K -31 -15 -13 6 R -13 -25 -14 -7 7 D E H K R }}} 아주 좋다! 이제 우리는 우리 자신이 쓸 SubstitutionMatrix를 가지게 되었다.