2017-09-27 3 views
1

Ich versuche die Anzahl einer kleinen DNA-Sequenz (R) zu suchen und zu zählen, die innerhalb einer größeren Sequenz (F) auftritt, aber R hat ein paar Zeichen, die sein könnten Variable. Der einfachste Weg, dies zu tun, wäre, ein Verhältnis für R zu setzen und alle Treffer über 80% in F zu zählen, aber die einzigen Befehle, die dies zu tun scheinen (zB sequenzMatcher oder get_close_matches von difflib), müssen funktionieren. Ich kann F in solche Listen nicht brechen. Irgendwelche Ideen?Zählvorkommen einer Fuzzy-Sequenz innerhalb einer größeren DNA-Sequenz

EDIT 2: Weitere Informationen wie angefordert.

Eine festgelegte Anzahl von Wiederholungen (R) existiert in einem DNA-Fragment (F). F ist 353 Zeichen lang und eine einzelne Wiederholung ist 15 Zeichen lang. Es sollten keine Überlappungen auftreten, da R deutlich genug ist, um sich nicht zu überlappen. Das Problem ist, dass R variabel sein kann, 2 von 15 Zeichen können sich ändern oder gleich bleiben. Ich muss in der Lage sein, diese Variationen und mögliche zukünftige Variationen zu erkennen. Ich versuche, die variablen Zeichen auch entweder in der gleichen Position können nicht sein, eine separate Datenbank voll von diesen Variationen in R. zu müssen, so mit einem regulären Ausdruck wie:

re.findall(pattern = "CTGCTTGGCGGG[TC]T[CG]", string = fragment) 

kann nicht funktionieren. Auch hier ist das, was ich mit, als es durch difflib versucht:

difflib.get_close_matches(repeat, fragment, cutoff = 0.85) 

eine Wiederholung CTGCTTGGCGGGTTC und das DNA-Fragment AAAATTGCGGCATGTGGGCTGACTCTGAAAGCGATGCTCACGAAAAGGGAACGCGGCGCCGTCGGGCGCCGCGCGCCGCTTAGGACTGCTGGCCTGCGGCCGGCGCCTGCTTGGCGGGTTCCTGCTTGGCGGGCTCCTGCTTGGCGGGTTCCTGCTTGGCGGGTTCCTGCTTGGCGGGTTCCTGCTTGGCGGGCTGCTGCTTGGCGGGCTGCTGGGCCGGCGCCTGCTGGCCAGGAGCGGGCTGCTGGCCGGCAGGCGCCGCGCCCCCCTTGTTCCAGGGCGAAGCCTGCACCGGCGCCCCCGGACGGATCTTCTGGAAGCCTTCGACCACCACCACGTCTCCCGCCGCCAGG wäre wäre.

Mit Wiederholung, ich meine, dass R mehrmals im DNA-Fragment wiederholt wird.

Danke.

+0

Es ist nicht ganz klar, was du machen willst. Bitte geben Sie ein Beispiel an. Außerdem können Sie besser angeben, ob Überlappungszählungen, etc. –

+0

können Sie ein Beispiel von 'R' und' F' einfügen und erklären Sie weiter, was Sie als eine Wiederholung definieren? – mitoRibo

+0

Vielleicht könntest du dir das mal anschauen: http://biopython.org/DIST/docs/api/Bio.motifs-module.html – bli

Antwort

0

Ihre Fragen sind ein bisschen knapp in Details, so habe ich ein paar Annahmen gemacht.

Wenn Sie als eine Liste von Listen umschreiben R können, dann können Sie einfach alle möglichen Variationen von R berechnet und für diejenigen aussehen in F:

import re 
from itertools import product 

R = [['CTGCTTGGCGGG'] , ['T', 'C'], ['T'], ['C', 'G']] 

F = 'AAAATTGCGGCATGTGGGCTGACTCTGAAAGCGATGCTCACGAAAAGGGAACGCGGCGCC' +\ 
    'GTCGGGCGCCGCGCGCCGCTTAGGACTGCTGGCCTGCGGCCGGCGCCTGCTTGGCGGGTT' +\ 
    'CCTGCTTGGCGGGCTCCTGCTTGGCGGGTTCCTGCTTGGCGGGTTCCTGCTTGGCGGGTT' +\ 
    'CCTGCTTGGCGGGCTGCTGCTTGGCGGGCTGCTGGGCCGGCGCCTGCTGGCCAGGAGCGG' +\ 
    'GCTGCTGGCCGGCAGGCGCCGCGCCCCCCTTGTTCCAGGGCGAAGCCTGCACCGGCGCCC' +\ 
    'CCGGACGGATCTTCTGGAAGCCTTCGACCACCACCACGTCTCCCGCCGCCAGG' 

for repeat in product(*R): 
    repeat = ''.join(repeat) 
    matches = re.findall(repeat, F) 
    if matches: 
     print "The repeat '{}' is found {} time(s)".format(repeat, len(matches)) 

als Ergebnis liefert:

The repeat 'CTGCTTGGCGGGTTC' is found 4 time(s) 
The repeat 'CTGCTTGGCGGGCTC' is found 1 time(s) 
The repeat 'CTGCTTGGCGGGCTG' is found 2 time(s) 
Verwandte Themen