Du findest alle Files die du brauchst sowie eine mögliche Musterlösung hier: https://github.com/kathireinisch/jahrgangsstufentests/tree/main/src/afterTwo
Aufgabe 1: Bash
Lernziel: Bash Wissen auffrischen
Aufgabenstellung:
Gegeben ist ein kleines und vereinfachtes GTF
- Schneide die Kommentarzeilen (starten mit #) mithilfe von einem bash Kommando aus der Datei
- Erstelle ein Datei, die nur die Spalten zu chr, feature, start, stop und gene_id enthält (hier steht genau drin an welcher Stelle welche Spalten zu finden sind: https://www.ensembl.org/info/website/upload/gff.html, bei den Attributen existiert in diesem GTF nur das attribut gene_id). Wenn du Lust hast kannst du auch noch das gene_id und die Gänsefüßchen um die Gen ID wegmachen. Dann ist Aufgabe 2 einfacher.
- Kannst du Aufgabe a) und b) mit einer Zeile lösen?
- Überprüfe mit den gegebenen Lösungen, ob die Dateien die du erstellt hast richtig erstellt wurden
Tipps 1 (klick mich)
- Suche nach dem command grep
- Suche nach dem command cut
- Stichwort “Pipe”
- Suche nach dem command diff
Tipps 2 (klick mich)
- Es gibt bei grep eine flag die dir alles ausgibt außer Zeilen die matchen. Versuche diese flag zu finden
- cut hat die flag -f mit hilfe welcher du spezifizieren kannst welche Spalten du behalten möchtest
- benutze die gleichen commands die du in a) und b) benutzt hast aber pipe sie hintereinander
Musterlösung (klick mich)
In bash gibt es oft mehrere Wege wie man eine Aufgabe lösen kann (awk zB kann auch sehr viele andere bash Befehle ausführen). Die Antworten hier sind eine mögliche Lösung. Wenn eure Ergebnisse mit den Musterdateien übereinstimmen, dann habt ihr alles richtig gemacht.
- grep -v „#“ example.gtf > aufgabe_a.txt
- einfache Lösung: cut -f1,3,4,5,9 aufgabe_a.txt > aufgabe_b_simple.txt
- Lösung ohne gene_id und Gänsefüßchen: cut -f1,3,4,5,9 aufgabe_a.txt | sed -e „s/gene_id//g“ | sed -e ’s/“//g‘ > aufgabe_b_extended.txt
- grep -v „#“ example.gtf | cut -f1,3,4,5,9 | sed -e „s/gene_id//g“ | sed -e ’s/“//g‘ > aufgabe_c.txt
- diff meine_datei_x.txt aufgabe_x.txt
Aufgabe 2:
Lernziel: Sicherheit im Umgang mit Java und Klassen; das GTF Format kennenlernen
Aufgabenstellung:
Gegeben ist das GTF, dass in Aufgabe 1 erstellt wurde.
- Erstelle eine Klasse “GTFParser” und eine Klasse “Gene”. In der Gene Klasse sollen die folgenden Informationen gespeichert sein: Gene ID, Chromosome, Gene Start, Gene Stop und die Anzahl der Transkripte pro Gene. Der GTFParser soll die Parameter (gtf und output) via der Command Line bekommen.
- Erstelle eine Methode, die eine tsv Datei mit den Spalten gene_id, chromosome und transcript_count schreibt.
- Speichere die eingelesenen Gene in einer List (z.B. einer ArrayList), einem Set (z.B. einem Hashset) und einer Map (z.B. einer Hashmap).
- Schreibe eine Methoden um folgende Informationen ausgeben zu können:
- Welches ist das erste eingelesene Gen?
- Was ist der Gene Start einer bestimmten GenId X?
- Wie viele einzigartige Gene gibt es? (Also mit derselben Id, Chromosom, Gene Start, Gene Stop und Anzahl Transkripte)
- Erstelle eine Jar, die den GTFParser benutzt um die Parameter einzulesen und anschließend die Methode aus b) aufruft. Die jar soll ausführbar sein und den source code enthalten (probiert mit einem bash command aus ob sie ausführbar ist)
Kann überprüft werden indem Referenz output file zur verfügung gestellt wird: mit bash beides (referenz output und eigenen output) sorten und dann diff
Tipp 1 (klick mich)
Überlege dir wie man die Gene speichern kann damit man ohne großen Zeitaufwand den Transcript Count erhöhen kann.
Tipp 2 (klick mich)
Um Gene zu speichern eignet sich eine Hashmap. Unter welchem Key speichert man ein Gen am besten ab? Und was sind die Vorteile gegenüber einer ArrayList und einem Hashset?
Musterlösung (klick mich)
Siehe hier
Aufgabe 3:
Lernziel: Sicherheit im Plotten mit python (plotnine) und/oder R
Aufgabenstellung:
Gegeben ist der Output von Aufgabe 1 und 2.
- Plotte die Verteilung von Transkripten pro Gen in R und/oder python
- Plotte die Verteilung von Transkripten pro Gen für jedes Chromosom extra. Ignoriere mitochondriale Chromosomen.
- Plotte die Verteilung der Genlängen direkt aus dem GTF.
Tipp 1 (klick mich)
Chromosomen die keine mitochondrialen Chromosomen sind, haben als Namen die Zahlen 1-22 oder X oder Y.
Tipp 2 (klick mich)
Für b) ist facet_wrap() bei ggplot in R oder plotNine in Python hilfreich.
Musterlösung (klick mich)
Siehe hier