4

この問題は生物学に関係しているので、アミノ酸とコドンが何であるかを知っている人にとっては素晴らしいことです! そうでない人のために、私が話していることを理解できるように最善を尽くして表現しました。

だから私はコドンのリストを持っています.3文字の文字列とも呼ばれます.A、G、C、T、すなわちAAT、GAT、GCTなどの4文字の組み合わせで構成されています.各コドンは特定のアミノ酸ですが、同じアミノ酸に対応する複数のコドンがあります。これを説明するには、次のリンクをご覧ください: http://www.cbs.dtu.dk/courses/27619/codon.html . それはそれを明確にするはずです。

リストの各コドンについて、最終的にどのアミノ酸に対応するかを調べたい. したがって、最初にプログラムでそのコドンを、リンクを投稿したコドンのリスト (考えられる合計 64 個のコドン) と比較し、次にそのコドンがどのアミノ酸に対応するかをプログラムに確認させる必要があります。しかし、与えられたアミノ酸に対応するすべてのコドンのリストを作成してそれらを比較したり、20 の異なる if ステートメントを記述したりせずに、これを行うための近道を見つけることはできません。

私が持っているコドンのリストは、mutated_codon と呼ばれます。したがって、プログラムが mutated_codon リストの各コドンを比較し、それを辞書と比較して、対応するアミノ酸文字を出力する「for」を生成する必要があります。そのために私が書かなければならないコードは何ですか?ディクショナリ内の値をチェックするために使用される構文に慣れていません。

提案に基づいてこれまでに行ったことは次のとおりです。

codon_lookup = {'GCT': 'A', 'GCC': 'A','GCA': 'A','GCG': 'A', 'TGT': 'C','TGC':'C' , 'GAT':'D','GAC': 'D', 'GAA':'E','GAG': 'E', 'TTT':'F','TTC': 'F', ' GGT': 'G','GGC': 'G','GGA':'G','GGG': 'G', 'CAT':'H','CAC': 'H', 'ATT' :'I','ATC':'I','ATA':'I','AAA':'K','AAG':'K','TTA':'L','TTG':' L','CTT': 'L','CTC': 'L','CTA': 'L','CTG': 'L', 'ATG': 'M', 'AAT':'N' 、'AAC':'N', 'CCT': 'P','CCC': 'P','CCA': 'P','CCG': 'P', 'CAA': 'Q','CAG' : 'Q', 'CGT': 'R','CGC': 'R','CGA': 'R','CGG': 'R','AGA': 'R','AGG': ' R', 'TCT': 'S','TCC': 'S','TCA': 'S','TCG': 'S','AGT': 'S','AGC': 'S' , 'ACT': 'T','ACC': 'T','ACA': 'T','ACG': 'T', 'GTT': 'V','GTC': 'V',' GTA': 'V','GTG': 'V', 'TGG' = 'W', 'TAT':'Y', 'TAC':'Y', 'TAA': 'Z', 'TAG' :'Z', 'TGA':'Z'}

for c in mutated_codon:
   print codon_lookup[c]

しかし、私の出力では、リストの最後のコドンに対応するアミノ酸の出力しか得られず、その上に KeyError: 4 が得られます。何が間違っている可能性がありますか?

4

5 に答える 5

5

他の2つの答えに照らして、これを構造化する別の方法が最善だと思います。

これにより、SLC から Codon(s) および Codon から SLC の両方向の検索辞書が得られます。

slc_codon = {
    'I': ['ATT', 'ATC', 'ATA'],
    'L': ['CTT', 'CTC', 'CTA', 'CTG', 'TTA', 'TTG'],
    'V': ['GTT', 'GTC', 'GTA', 'GTG'],
    'F': ['TTT', 'TTC'],
    'M': ['ATG'],
    'C': ['TGT', 'TGC'],
    'A': ['GCT', 'GCC', 'GCA', 'GCG'],
    'G': ['GGT', 'GGC', 'GGA', 'GGG'],
    'P': ['CCT', 'CCC', 'CCA', 'CCG'],
    'T': ['ACT', 'ACC', 'ACA', 'ACG'],
    'S': ['TCT', 'TCC', 'TCA', 'TCG', 'AGT', 'AGC'],
    'Y': ['TAT', 'TAC'],
    'W': ['TGG'],
    'Q': ['CAA', 'CAG'],
    'N': ['AAT', 'AAC'],
    'H': ['CAT', 'CAC'],
    'E': ['GAA', 'GAG'],
    'D': ['GAT', 'GAC'],
    'K': ['AAA', 'AAG'],
    'R': ['CGT', 'CGC', 'CGA', 'CGG', 'AGA', 'AGG'],
    '*': ['TAA', 'TAG', 'TGA'],
}

codon_slc = dict((x, k) for k, v in slc_codon.items() for x in v)

>>> print codon_slc
>>> {'CTT': 'L', 'ATG': 'M', 'AAG': 'K', 'AAA': 'K', 'ATC': 'I', 'AAC': 'N', 'ATA': 'I', 'AGG': 'R', 'CCT': 'P', 'ACT': 'T', 'AGC': 'S', 'ACA': 'T', 'AGA': 'R', 'CAT': 'H', 'AAT': 'N', 'ATT': 'I', 'CTG': 'L', 'CTA': 'L', 'CTC': 'L', 'CAC': 'H', 'ACG': 'T', 'CAA': 'Q', 'AGT': 'S', 'CAG': 'Q', 'CCG': 'P', 'CCC': 'P', 'TAT': 'Y', 'GGT': 'G', 'TGT': 'C', 'CGA': 'R', 'CCA': 'P', 'TCT': 'S', 'GAT': 'D', 'CGG': 'R', 'TTT': 'F', 'TGC': 'C', 'GGG': 'G', 'TAG': '*', 'GGA': 'G', 'TAA': '*', 'GGC': 'G', 'TAC': 'Y', 'GAG': 'E', 'TCG': 'S', 'TTA': 'L', 'GAC': 'D', 'TCC': 'S', 'GAA': 'E', 'TCA': 'S', 'GCA': 'A', 'GTA': 'V', 'GCC': 'A', 'GTC': 'V', 'GCG': 'A', 'GTG': 'V', 'TTC': 'F', 'GTT': 'V', 'GCT': 'A', 'ACC': 'T', 'TGA': '*', 'TTG': 'L', 'CGT': 'R', 'TGG': 'W', 'CGC': 'R'}
于 2013-11-06T02:03:21.167 に答える
2

(提供したリンクから)表をそのまま正確に書き留めることができます。

table =
    [
        {
            'amino_acid': 'Isoleucine',
            'codons': [ 'ATT', 'ATC', 'ATA' ]
        },
        {
            'amino_acid': 'Leucine',
            'codons': [ 'CTT', 'CTC', 'CTA', 'CTG', 'TTA', 'TTG' ]
        },
        ...etc...
    ]

次に、以下を使用して、コドンからアミノ酸にマップする辞書に変換します。

lookup = dict(itertools.chain.from_iterable(
    [[(codon, row['amino_acid']) for codon in row['codons']] for row in table]))

たとえば、lookup['TTA']を与え'Leucine'ます。

farmerjoeの回答のように、これはアミノ酸名を繰り返すよりも少しエレガントだと思いますが、それは意見の問題かもしれません. 手で手動で変換するよりも、可能な限り簡潔な方法でデータ入力を行い、プログラムで変換する方が適切です。

于 2013-11-06T01:04:45.880 に答える
1

Timothy Shields の彼自身の回答に対するコメントを取り上げます。http: //www.cbs.dtu.dk/courses/27619/codon.html からテーブルを取得して、そこからマッピングを生成できれば幸いです。

Web ページからテーブルをコピーして、ソース コードにリテラル文字列として貼り付けようとすると、いくつかの問題が発生します。まず、テーブルをコピーする方法については、ブラウザによって考え方が異なります。もっと深刻なことに、表は非常に不規則に書かれています。改行がない列もあれば、1 つある列、2 つある列、さらには改行の後にスペースがある列もあります。これを解析するのは非常に困難です。

しかし、HTML ソースを使用すると、はるかに簡単になります。本来あるべきほど簡単ではありませんが (ページはごちゃごちゃしており、ID や名前がどこにもなく、CSS の代わりに古風な HTML スタイルが使用されているなど)、必要な値が正確に表の列であることはすぐにわかります。ただし、上部のボックス テーブル、ボックス ヘッダー、およびフッターは除きます。でそれを行う方法の例を次に示しますBeautifulSoup。(標準ライブラリに固執する必要がある場合は、もう少し冗長になりますが、それほど難しくはありません。)

import urllib2
import bs4

url='http://www.cbs.dtu.dk/courses/27619/codon.html'
page = urllib2.urlopen(url)
soup = bs4.BeautifulSoup(page)
codon_lookup = {}
for row in soup.find_all('tr')[2:-1]:
    amino, slc, codons = (col.text.strip() for col in row.find_all('td'))
    if slc == 'Stop':
        slc = 'Z'
    for codon in codons.split(','):
        codon_lookup[codon.strip()] = slc

もちろん、実際には、プログラムを実行する必要があるたびにプログラムをオンラインにする必要はありません。しかし、このプログラムで簡単に結果を pickle ファイル (または JSON ファイルなど、お好みのもの) に保存することができます。次の行を追加するだけです。

import pickle
with open('codons.pickle', 'wb') as f:
    pickle.dump(codon_lookup, f)

メインプログラムでは、次のように開始します。

with open('codons.pickle', 'rb') as f:
    codon_lookup = pickle.load(f)
于 2013-11-06T19:17:14.683 に答える