WBO 4 – Drzewa filogenetyczne

Dziś rozmawiamy o prostych metodach kostrukcji drzew na podstawie macierzy odległości. Slajdy na dziś składają się z mojej prezentacji nt. metod heurystycznych: wyk4 i slajdów P. Góreckiego nt. metod ML: gorecki-ml-tree

Na laboratorium będziemy konstruować drzewa w praktyce.

Warto zapoznać się z dokumentacją modułu Bio.Phylo w tutorialu jak i na stronie wiki.

1. Na początek ustalmy listy sekwencji. Rozważmy sekwencje paralogiczne i ortologiczne ludzkiej hydroksylazy fenyloalaniny.  Załóżmy, że mamy już sekwencje aminokwasowe uliniowione globalnie.  Ze względu na czasochłonność procesu uliniowienia, użyjemy plików zuliniowieniami  Human_PAH_orthologues i Human_PAH_paralogues oraz Human_H2BFS_paralogues i (jeśli ktoś liczy lokalnie – uwaga duży) plik Human_PAH_orthologues-91. Wczytaj te pliki przy pomocy metod z modułu Bio.AlignIO

2.Wylicz macierze odległości dla tych grup sekwencji przy pomocy klasy Bio.Phylo.TreeConstruction.DistanceCalculator  (dla macierzy BLOSUM62, osobno dla paralogów i osobno dla ortologów genów PAH – to  zajmie chwilę).

3. Stwórz drzewa filogenetyczne na podstawie macierzy przy pomocy klasy Bio.Phylo.TreeConstruction.DistanceTreeConstructor zarówno metodą UPGMA – hierarchiczną jak i nj (neighbor joining)

4. Wyświetl uzyskane drzewa przy pomocy metody draw_ascii() i draw()

5. Zapisz uzyskane drzewa do formatów newick i phyloxml. obejrzyj wyniki.

ONA 4 – Przetwarzanie sygnałów

Dziś zajmujemy się przetwarzaniem sygnałów, slajdy są dostępne tu: ONA4-DSP

Animacja transformaty Fourier’a z wikipedii (ze slajdów) jest tutaj, zaś animacje splotu, można znaleźć na stronie wikipedii tu: Convolution

Interesują nas przede wszystkim biblioteki scipy.signal i scipy.fftpack

1. Wygeneruj sygnał funkcji wielomianowej o zaburzeniu Gaussowskim, dla 10000 punktów. Wykonaj uśrednienia tego sygnału przy pomocy średniej kroczącej, albo splotu przy pomocy filtru kwadratowego, trójkątnego lub Gaussowskiego. WYniki zaprezentuj na wykresie

2. Pobierz sygnał o zajętości nukleosomowej z plików pochodzących z eksperymentu MNase-Seq ( dane tu w formacie bedgraph ) . Wczytaj go do numpy jako wektor. Przedstaw go na wykresie. Używając szybkiej trasformaty fouriera oblicz widmo Fourierowskie tego sygnału. Przedstaw je na innym wykresie. Wyzeruj część widma wysokich częstotliwości i dokonaj odwrotnej transformaty Fouriera, aby uzyskać wygładzony sygnał zajętości nukleosomami. Spróbuj tak dobrać parametry filtra, aby wykres po odwrotnej transformacie Fouriera miał okres zbliżony do 160-200 par zasad.

APB 3 – automatyczne testowanie i dokumentacja

Dzisiejszy wykład poświęciliśmy na automatyczne testowanie i dokumentację projektów.

Slajdy są tutaj: wyk3-testy

Na laboratorium podzielimy się na zespoły i zaczniemy rozmawiać o harmonogramach projektów. Założenia harmonogramu prac na laboratorium widzę mniej więcej tak jak poniżej, przy czym jeśli ktoś będzie robił to później niż w harmonogramie, to może mieć wpływ na ocenę projektu.

13 III – zebranie zespołów, (ew. wybór kierowników, może być później)
20 III – wybranie tematyki
27 III – decyzja dot. tematu projektu
3 IV – dyskusje nad zakresem projektów
10 IV – określenie zakresu projektu – krótki opis projektu
17 IV – wydzielenie zadań i podział zadań na osoby (uwzględniając dokumentację i testy)
24 IV – szczegółowy opis funkcjonalności do stworzenia przez poszczególne osoby
Wolne
8 V - prezentacja początkowych implementacji, dyskusja decyzji projektowych
15 V – praca w grupach
22 V – praca w grupach
29 V – praca w grupach
5 VI – praca w grupach
12 VI – prezentacje projektów

 

WBO – 3 – uliniowienie par sekwencji

Dziś zajmujemy się uliniawianiem par sekwencji -wyk3

Zadania na laboratorium:

  1. Zapoznaj się z modułem Bio.pairwise2 i klasą align oraz funkcją format_alignment() (kod źródłowy jest tutaj)
  2. Wczytaj sekwencje DNA histonów histones.fa i czynników bZIP bzips.fa do pamięci, najlepiej przy pomocy modułu Bio.SeqIO. Pliki są też dostępne na naszym serwerze jupyter w folderze WBO/.
  3. Dokonaj porównań pomiędzy sekwencjami DNA białek histonowych i bzip – dla każdej pary policz oceny dla najlepszych globalnych i lokalnych uliniowień  z prostą macierzą substytucji (-1 za mismatch, 1 za match) i afiniczną funkcją kary za przerwy (np. -1.0 za otwarcie przerwy i -0.5 za jej rozszerzenie). Wylicz średnią ocenę w ramach grupy bzip, w ramach grupy histonów i pomiędzy grupami.
  4. Dokonaj tłumaczenia sekwencji DNA na białka(używając metody translate dla DNA), powtórz obliczenia używając macierzy substutucji BLOSUM60

Praca domowa (2pkt):

Napisz program, który wylicza optymalne lokalne uliniowienie dla sekwencji DNA dla różnych możliwych tłumaczeń na białka (tzn zakładając standardową tablicę kodonów )  przy uwzględnieniu trzech różnych ramek odczytu w obu sekwencjach. Dla uproszczenia załóżmy, że insercje i delecje powinny występować tylko “trójkami” nukleotydów. (Prace domowe jak zwykle przesyłamy do następnych zajęć mailem – proszę załączyć rozwiązanie jako pliki .py lub linki do działających notebooków, nie jako pliki .ipynb)

(*)Zastanów się, jakby wyglądał algorytm programowania dynamicznego w tym zadaniu gdybyśmy rozważali ogólną postać insercji i delecji, a nie tylko wielokrotności 3.

ONA 3 – Wykresy

Dzisiaj zajmujemy się wykresami.

Slajdy są tutaj ONA3-wykresy

Zadania na dziś:

1. Narysuj wykres podobny do tego ze slajdu nr. 15 z wykładu. Uwzględnij opisy osi, zakresy wartości, kolory, znaczniki wartości, legendę i tytuły osi oraz wykresów.

2. Narysuj wykres 10*sin(x)+normal(0,1) dla 1000 punktów w zakresie 0,10. Przyda się funkcja normal() do losowania liczb z rozkładu normalnego.

3. Napisz program, który wykona 1000 prób rzutu 10 kostkami. Narysuj na jednym wykresie 3 przenikające się histogramy (alpha=0.25): suma oczek na kościach parzystych (0,2,4,6,8), suma oczek na kościach nieparzystych (1,3,5,7,9), suma oczek na wszystkich kościach. Może przydać się funkcja randint()  z modułu random do losowania liczb całkowitych z zakresu [1,6].

4. Przedstaw dane z wykresu 3. w postaci 3 wykresów pudełkowych (boxplot)

5. Narysuj powierzchnię 3d (x,y,z) dla punktów na siatce linspace(0,1,100) gdzie z=y*cos(x)+(1-y)*sin(x), Może być przydatny ten przykład

5. Narysuj mapę ciepła dla tej samej powierzchni. Użyj różnych map kolorów.

APB 2 – Projekty BioPerl, BioJava i inne projekty bioinformatyczne opensource

Dziś porozmawiamy o bioperlu, biopythonie i innych projektach open-source. Slajdy do wykładu są tu: wyk2-bioX

Dzisiaj na zajęciach chciałbym, żeby wszyscy przynajmniej zaczęli swoje zadanie indywidualne (z grubsza opisane na ostatnim slajdzie do wykładu).

Można zacząć od fork’a repozytorium na githubie https://github.com/regulomics/biopython

Poza tym chciałbym, żebyśmy dziś przymierzyli się do podziału na zespoły – mamy w planie 3 zespoły do drugiego projektu.

 

WBO 2 – Ewolucja sekwencji

Dziś będziemy mówić o modelach ewolucji sekwencji.

Slajdy do wykładu są tu: wyk2.

Podczas labów mogą Państwo korzystać z serwera Jupyter, który ma zainstalowany pakiet biopython. (kilka porad jak używać jupyter’a tu )

Zadania do wykonania na dziś:

1. Obejrzyj moduł Bio.SubsMat.MatrixInfo, gdzie zdefiniowane są modele PAM i BLOSUM

2. Zaimplementuj prosty łańcuch Markowa, który pozwoli na symulowanie mutacji w czasie dyskretnym, zgodnie z macierzami przejścia zdefiniowanymi wykorzystując moduł SubsMat (substitution table). Rozważ model analogiczny do modelu Kimury i Felsensteina

3. Rozważ sekwencje z pliku fasta z poprzednich zajęć. Zbadaj ile mutacji losowych potrzeba aby Łańcuch Markowa “przeszedł” pomiędzy dwiema sekwencjami bez selekcji.

4. Zaimplementuj prosty proces Markowa z selekcją – jeśli mutacja zbliża nas do “celu” w sensie odległości Hamminga, to ją akceptuj, w przeciwnym razie wracaj do punktu wyjścia.

 

ONA 2 – Macierze, wektory i Numpy

Slajdy do wykładu – ONA2-Macierze

Jako interpretera pythona mogą Państwo dalej używać naszego serwera Jupyter. Proszę o nie nadużywanie tych interpreterów – szczególnie jeśli chodzi o zajmowanie pamięci. Trochę porad jak używać jupytera znajdą Państwo tu .

Ćwiczenia:

  1. Stwórz macierze A i B o wymiarach  1000×1000 zawierające wartości A[i,j]==i*3-j*5 i B[i,j]==np.sqrt(A[i,j]) (Zauważ, że to wymaga wartości urojonych, a więc macierzy typu complex64 i wartość sqrt(-1) ->.j)
  2. Napisz funkcję poz(indeksy, shape), która dla zadanej krotki indeksów zwraca liniową pozycję elementu o zadanych indeksach w wielowymiarowaj macierzy o kształcie shape.
  3. Napisz program, który  zmienia znak elementów w macierzy B, których suma indeksów jest nieparzysta, na ujemny. Warto wykorzystać  mnożenie macierzy i ew. broadcasting.
  4. korzystając z metody sort() , posortuj macierz 3-wymiarową wg. drugiej współrzędnej i obejrzyj wynik.
  5. Korzystając z funkcji frompyfunc() napisz funkcje wektorowe, które liczą a) sumę kwadratów dwóch macierzy  (dwie macierze do jednej)
    b) iloraz i resztę z dzielenia całkowitoliczbowego przez 17 (jedna macierz wejściowa i dwie macierze wyjściowe)
  6. Korzystając z modułu time, porównaj prędkość funkcji liczących N potęg dwójki – na liście i w wektorze. Dla jakich wartości N warto używać macierzy?