मैं प्रोग्रामिंग और जैव सूचना विज्ञान दोनों में एक नौसिखिया हूं। तो, मैं आपकी समझ की सराहना करता हूं। मैंने Courbsera कक्षा में वर्णित अनुसार गिब्स नमूनाकरण का उपयोग करके मोटीफ खोज के लिए एक पायथन लिपि विकसित करने की कोशिश की, "डीएनए में छिपे हुए संदेश ढूंढना"। पाठ्यक्रम में प्रदान की स्यूडोकोड है:गिब्स नमूने के साथ मोटीफ खोज
GIBBSSAMPLER(Dna, k, t, N)
randomly select k-mers Motifs = (Motif1, …, Motift) in each string
from Dna
BestMotifs ← Motifs
for j ← 1 to N
i ← Random(t)
Profile ← profile matrix constructed from all strings in Motifs
except for Motifi
Motifi ← Profile-randomly generated k-mer in the i-th sequence
if Score(Motifs) < Score(BestMotifs)
BestMotifs ← Motifs
return BestMotifs
समस्या का वर्णन:
कोड चुनौती: लागू GIBBSSAMPLER।
इनपुट: पूर्णांकों कश्मीर, टी, और एन, तार डीएनए का एक संग्रह किया गया। आउटपुट: 20 यादृच्छिक प्रारंभ के साथ GIBBSSAMPLER (Dna, k, t, N) चलाने के परिणामस्वरूप बेस्टमोटीफ्स स्ट्रिंग्स। स्यूडोकॉइंट्स का उपयोग करना याद रखें!
नमूना इनपुट:
8 5 100
CGCCCCTCTCGGGGGTGTTCAGTAACCGGCCA
GGGCGAGGTATGTGTAAGTGCCAAGGTGCCAG
TAGTACCGAGACCGAAAGAAGTATACAGGCGT
TAGATCAAGTTTCAGGTGCACGTCGGTGAACC
AATCCACCAGCTCCACGTGCAATGTTGGCCTA
नमूना आउटपुट:
TCTCGGGG
CCAAGGTG
TACAGGCG
TTCAGGTG
TCCACGTG
मैं अपने ज्ञान के अनुसार स्यूडोकोड का पालन किया।
def BuildProfileMatrix(dnamatrix):
ProfileMatrix = [[1 for x in xrange(len(dnamatrix[0]))] for x in xrange(4)]
indices = {'A':0, 'C':1, 'G': 2, 'T':3}
for seq in dnamatrix:
for i in xrange(len(dnamatrix[0])):
ProfileMatrix[indices[seq[i]]][i] += 1
ProbMatrix = [[float(x)/sum(zip(*ProfileMatrix)[0]) for x in y] for y in ProfileMatrix]
return ProbMatrix
def ProfileRandomGenerator(profile, dna, k, i):
indices = {'A':0, 'C':1, 'G': 2, 'T':3}
score_list = []
for x in xrange(len(dna[i]) - k + 1):
probability = 1
window = dna[i][x : k + x]
for y in xrange(k):
probability *= profile[indices[window[y]]][y]
score_list.append(probability)
rnd = uniform(0, sum(score_list))
current = 0
for z, bias in enumerate(score_list):
current += bias
if rnd <= current:
return dna[i][z : k + z]
def score(motifs):
ProfileMatrix = [[0 for x in xrange(len(motifs[0]))] for x in xrange(4)]
indices = {'A':0, 'C':1, 'G': 2, 'T':3}
for seq in motifs:
for i in xrange(len(motifs[0])):
ProfileMatrix[indices[seq[i]]][i] += 1
score = len(motifs)*len(motifs[0]) - sum([max(x) for x in zip(*ProfileMatrix)])
return score
from random import randint, uniform
def GibbsSampler(k, t, N):
dna = ['CGCCCCTCTCGGGGGTGTTCAGTAACCGGCCA',
'GGGCGAGGTATGTGTAAGTGCCAAGGTGCCAG',
'TAGTACCGAGACCGAAAGAAGTATACAGGCGT',
'TAGATCAAGTTTCAGGTGCACGTCGGTGAACC',
'AATCCACCAGCTCCACGTGCAATGTTGGCCTA']
Motifs = []
for i in [randint(0, len(dna[0])-k) for x in range(len(dna))]:
j = 0
kmer = dna[j][i : k+i]
j += 1
Motifs.append(kmer)
BestMotifs = []
s_best = float('inf')
for i in xrange(N):
x = randint(0, t-1)
Motifs.pop(x)
profile = BuildProfileMatrix(Motifs)
Motif = ProfileRandomGenerator(profile, dna, k, x)
Motifs.append(Motif)
s_motifs = score(Motifs)
if s_motifs < s_best:
s_best = s_motifs
BestMotifs = Motifs
return [s_best, BestMotifs]
k, t, N =8, 5, 100
best_motifs = [float('inf'), None]
# Repeat the Gibbs sampler search 20 times.
for repeat in xrange(20):
current_motifs = GibbsSampler(k, t, N)
if current_motifs[0] < best_motifs[0]:
best_motifs = current_motifs
# Print and save the answer.
print '\n'.join(best_motifs[1])
दुर्भाग्य से, मेरी कोड कभी नहीं सुलझ उदाहरण के रूप में एक ही आउटपुट देता है: यहाँ मेरी कोड है। इसके अलावा, कोड को डीबग करने का प्रयास करते समय मैंने पाया कि मुझे अजीब अंक मिलते हैं जो प्रारूपों के बीच विसंगतियों को परिभाषित करते हैं। हालांकि, जब मैंने स्कोर फ़ंक्शन को अलग से चलाने की कोशिश की, तो यह पूरी तरह से काम किया।
हर बार जब मैं वैसे भी यहाँ स्क्रिप्ट, उत्पादन परिवर्तन चलाते हैं, लेकिन निवेश के लिए आउटपुट कोड में मौजूद एक का एक उदाहरण है:
मेरी कोड केउदाहरण आउटपुट
TATGTGTA
TATGTGTA
TATGTGTA
GGTGTTCA
TATACAGG
क्या आप कृपया मुझे इस कोड को डीबग करने में मदद कर सकते हैं? !! मैंने पूरा दिन यह पता लगाने की कोशिश की कि इसमें क्या गड़बड़ है, हालांकि मुझे पता है कि यह कुछ मूर्खतापूर्ण गलती हो सकती है, लेकिन मेरी आंख इसे पकड़ने में नाकाम रही।
सभी को धन्यवाद !!
हाय। कृपया अपने इनपुट के कुछ उदाहरण और "गलत" आउटपुट पोस्ट करें। – themantalope
हैलो मैट! आपके कमेंट के लिए धन्यवाद। इनपुट कोड में पहले से ही है। यह पाठ्यक्रम में दिए गए उदाहरण के समान है।जब भी मैं स्क्रिप्ट चलाता हूं, आउटपुट बदलता है, लेकिन किसी भी तरह से मैंने आउटपुट का उदाहरण शामिल करने के लिए प्रश्न संपादित किया। –
कृपया StackOverflow के "motif" टैग के लिए विषय विवरण नोट करें: "एक ग्राफिकल यूजर इंटरफेस टूलकिट सॉफ्टवेयर विकास में उपयोग किया जाता है (सी में लिखे गए एक्स/मोटीफ जीयूआई पैकेज)"। आपकी पोस्ट इस विषय के भीतर फिट नहीं है। – FredK