Ist es möglich, eine Restriktionskarte mit Python zu erstellen? [abgeschlossen]

Ich habe einige DNA-Fragmente aus Einzel- und Doppelverdaus mit drei verschiedenen Restriktionsenzymen. Ich versuche, eine Restriktionskarte eines linearen DNA-Fragments zu erstellen. Die Karte muss die relativen Positionen der Restriktionsstellen zusammen mit den Abständen von den Enden angeben.

Kann man das überhaupt mit Python machen?

DNA-Größen der Fragmente (bp) – ungeschnittene DNA = 900

DNA-Schnitt mit EcoRI = 500, 350, 50

DNA-Schnitt mit HindIII = 600, 300

DNA-Schnitt mit BamHI = 400, 300, 200

DNA geschnitten mit EcoRI + HindIII = 350, 300, 200, 50

DNA-Schnitt mit EcoRI + BamHI = 300, 250, 200, 100, 50

DNA-Schnitt mit HindIII + BamHI = 300, 200, 100

Ich habe die Beschreibung aktualisiert, so dass sie hoffentlich klarer ist
Vielleicht in die richtige Richtung weisen? Wie finden Sie mögliche Module, die dies tun? Wir sind nicht alle Experten.
Ich stimme dafür, diese Frage als nicht zum Thema gehörend zu schließen, da es hier um die Programmierung in Python geht und nicht wirklich um Biologie oder Bioinformatik.

Antworten (2)

Ich stimme der vorherigen Antwort zu. Sie können sicherlich eine Lösung in Python schreiben, müssen diese aber erst als Algorithmus formulieren. Auf diese Weise können wir eine tatsächliche Lösung vorschlagen.

Außerdem wollte ich vorschlagen, dass das Posten dieser Fragen in einem Forum mit Bioinformatik-Fokus (biostars.org) zu einem besseren Feedback führen kann.

Zuerst beantworte ich diese Frage unter der Annahme, dass Sie Python lernen oder dabei sind, es zu lernen (vielleicht weil Sie gehört haben, dass es in der Bioinformatik populär geworden ist) und Sie wissen möchten, ob es auf dieses Problem angewendet werden kann. Die Antwort lautet: Mit ziemlicher Sicherheit ja. Python ist eine Programmiersprache von der Art, die verwendet werden kann, um die Lösung dieser Art von Problemen zu automatisieren, genauso wie es C, C++, Java, Perl könnten.

Wie würden Sie vorgehen? Sie würden das Problem zunächst von Hand lösen, die Logik Ihrer Lösung analysieren und dann versuchen, einen allgemeinen Algorithmus auf der Grundlage dieser Logik zu entwickeln, der mit einer Vielzahl von Fällen umgehen kann. Dann würden Sie dies in Python (oder was auch immer) codieren. Das Programm müsste mit Ungenauigkeiten in realen Werten von Fragmentlängen (Ihre Daten sind offensichtlich erfunden) und der Möglichkeit von mehr als einem Fragment derselben Länge (siehe unten) umgehen. Wenn Sie Python verwendet haben und eine Grafikausgabe wünschen, müssen Sie eine Bibliothek verwenden, die Grafiken bereitstellt, da Python keine Grafiken enthält, wie dies bei Java der Fall ist. Ich nehme an, es gibt einige. Dies ist jedoch sicherlich nicht die einfachste Programmieraufgabe für einen Anfänger, wie Sie sehen werden, wenn Sie versuchen, die Logik der manuellen Lösung zu analysieren. Und natürlich könnten die Daten nicht ausreichen, um eine eindeutige Lösung bereitzustellen.

Da dies jedoch eine Hausaufgabe ist, möchten Sie möglicherweise auch ein Programm finden, um Ihre Antwort zu überprüfen, und sind sich vielleicht nicht sicher, wie Sie vorgehen sollen. Ich kenne keine Pakete, um dies zu tun - es ist vielleicht nicht "modern". Wie also vorgehen?

Was ich tun würde, ist, mit den einzelnen Digests zu beginnen und für jede der möglichen Anordnungen der Restriktionsstellen jeweils einen Satz Diagramme zu zeichnen (Bleistift und Papier funktionieren hier gut). Dann würde ich mir den einfachsten Doppelverdau ansehen, einzigartige Fragmente identifizieren, die auch in den Einzelverdaus vorhanden waren und daher nicht vom zweiten Enzym geschnitten wurden, und wieder Diagramme der Möglichkeiten für die Paare von Restriktionsstellen zeichnen. Vorsichtig sein; der HindIII/BamHI-Doppelverdau ergibt nicht 900, also müssen hier zwei Fragmente gleicher Größe vorhanden sein. Wenn Sie alle Möglichkeiten ausgearbeitet haben, gibt es vermutlich nur ein endgültiges Restriktionsdiagramm, das mit allen Daten konsistent ist.

Bei genauerer Überlegung wäre die Entwicklung eines Algorithmus zur Lösung dieses allgemeinen Falls eine ziemlich anspruchsvolle Aufgabe. Wenn Sie mit dem Programmieren beginnen, würde ich zuerst einfachere Algorithmen in Angriff nehmen. Und ein effektiver Algorithmus könnte eher einen Brute-Force-Ansatz verfolgen als die halb intuitive Art, wie wir diese von Hand lösen. Beispielsweise könnte Ihr Algorithmus alle möglichen Karten für jeden der drei Einzelverdaus generieren und dann alle möglichen Karten für die Doppelverdauungen generieren, zusammen mit einer Berechnung der Größe der Fragmente, die die Doppelverdauungen erzeugen würden. Diese würden mit der Größe der tatsächlichen Fragmente aus Doppelverdauungen verglichen und die nicht passenden Möglichkeiten eliminiert. Das Codieren würde das Schreiben von Methoden / Funktionen (oder wie auch immer sie in Python heißen) beinhalten, um diese Karten zu generieren.

Danke für den Rat David. Es war eine Hausaufgabe und ich habe es geschafft, es herauszufinden. Meine Frage, ob es möglich wäre, Python zu verwenden, ist von Interesse, da ich gerade erst angefangen habe, es zu lernen
OK. Ich werde meine Antwort bearbeiten, um dies zu berücksichtigen.
Python hat ebenso wie Java und C++ gute String-Funktionen. Sie könnten eine Liste von Restriktionsenzymen erstellen, wahrscheinlich eine Karte oder Hashmap. Dann laden Sie Ihre DNA-Sequenz als String und iterieren durch die Liste der Enzyme, suchen nach der Restriktionsstelle in der DNA-String und geben die Position der Stelle in der DNA-Sequenz zurück. Wenn die Zeichenfolgen nicht übereinstimmen, wird eine -1 zurückgegeben. Wenn Sie also nur eine Liste möchten, können Sie sie auf die Konsole oder in eine Textdatei drucken. Wenn Sie ein Bild möchten, müssen Sie eine Liste der Restriktionsstellen mit Enzymtyp und Schnittort erstellen und dann mit Pygame oder etwas anderem die Karte zeichnen.
Das Zeichnen der Karte ist auch nicht schwer. Wenn sie linear ist, ist die DNA von B-Basen eine Linie von P Pixeln lang. Die Restriktionsstelle an Position b wird also bei Pixel p gezeichnet, wobei p = P * b/B. Wenn es kreisförmig ist, müssen Sie das Pixel aus einem Winkel berechnen, wobei der Winkel 360 * b/B beträgt.