0 Daumen
265 Aufrufe

Für ein Projekt an der Uni müssen wir zwei FASTA Files miteinander vergleichen. Die Files enthalten zwei Aminosäurenketten (ATGAAGCTGA....) und wir sollten vergleichen, welche Sequenz in beiden Files am häufigsten vorkommen. Also die Funktion, die wir schreiben müssen, sollte am Schluss drucken, welche Top 10 Sequenzen in beiden Files am häufigsten vorkommen.

Das Ganze sollten wir mit k mers machen, Länge eines k = 12.


Ansatz/Problem:

Ich habe mittlerweile herausbekommen, wie man die Sequenzen in ein Dictionary bringt, aber nicht, wie man dann die beiden Files vergleichen und eine Top 10 Liste erstellen soll.

Avatar von

1 Antwort

0 Daumen

Antwort mit KI erzeugt

Lösungsansatz

Um deine Aufgabe erfolgreich abzuschließen, kannst du folgenden Ansatz verwenden:

1. Einlesen der FASTA-Dateien: Du musst beide FASTA-Dateien einlesen und jeweils die Aminosäurenketten extrahieren.
2. Generierung von k-mers: Generiere dann alle k-mers (Sequenzen der Länge k=12) aus beiden Aminosäurenketten.
3. Vergleich der Häufigkeiten: Speichere die Häufigkeiten der k-mers in Dictionaries und vergleiche diese, um die Top 10 gemeinsamen Sequenzen zu finden.

Python-Code-Lösung

Im Folgenden findest du einen Python-Code, der diesen Prozess abbildet. Dieser Code geht davon aus, dass du die FASTA-Dateien bereits einlesen und die Sequenzen als Strings gespeichert hast.

Zuerst definiere ich eine Funktion, die k-mers aus einer gegebenen Sequenz generiert und deren Häufigkeit zählt:

python
def kmer_count(sequence, k):
    kmer_dict = {}
    for i in range(len(sequence) - k + 1):
        kmer = sequence[i:i+k]
        if kmer in kmer_dict:
            kmer_dict[kmer] += 1
        else:
            kmer_dict[kmer] = 1
    return kmer_dict


Dann definieren wir eine Funktion zum Einlesen der FASTA-Dateien:

python
def read_fasta(fasta_file):
    with open(fasta_file, 'r') as file:
        sequence = ''
        file.readline()  # Überspringe Kopfzeile
        for line in file:
            sequence += line.strip()
    return sequence


Schließlich ein Code-Snippet, das beide obigen Funktionen benutzt, die k-mers beider Sequenzen generiert und die Top 10 gemeinsamen k-mers findet:

python
# Pfad zu den FASTA-Dateien
fasta_file1 = "path_to_fasta1.fasta"
fasta_file2 = "path_to_fasta2.fasta"

# Einlesen der Sequenzen
sequence1 = read_fasta(fasta_file1)
sequence2 = read_fasta(fasta_file2)

# Generierung der k-mers
k = 12
kmer_dict1 = kmer_count(sequence1, k)
kmer_dict2 = kmer_count(sequence2, k)

# Finde gemeinsame k-mers und deren Häufigkeiten
common_kmers = set(kmer_dict1.keys()) & set(kmer_dict2.keys())
common_kmers_count = {kmer: min(kmer_dict1[kmer], kmer_dict2[kmer]) for kmer in common_kmers}

# Sortiere die gemeinsamen k-mers nach ihrer Häufigkeit
top_common_kmers = sorted(common_kmers_count.items(), key=lambda x: x[1], reverse=True)[:10]

# Drucke die Top 10 gemeinsamen k-mers
for kmer, count in top_common_kmers:
    print(f"{kmer}: {count}")


Ersetze "path_to_fasta1.fasta" und "path_to_fasta2.fasta" mit den tatsächlichen Pfaden zu deinen FASTA-Dateien. Diese Lösung zählt, wie oft jeder k-mer in beiden Sequenzen vorkommt, findet die gemeinsamen k-mers und gibt dann die Top 10 gemeinsamen k-mers nach ihrer Häufigkeit aus.

Bitte beachte, dass dieser Code relativ einfach gehalten ist und für sehr große Sequenzen oder sehr viele k-mers möglicherweise Speicher- oder Laufzeit-Probleme auftreten können. Für sehr große Datenmengen könnten effizientere Datenstrukturen oder Algorithmen erforderlich sein.
Avatar von

Ein anderes Problem?

Stell deine Frage

Willkommen bei der Stacklounge! Stell deine Frage einfach und kostenlos

x
Made by a lovely community