Zadanie zaliczeniowe 3

Treść zadania zaliczeniowego numer 3 znajduje się tutaj.

Zajęcia 10 (14.12) - Galaxy

Serwer Galaxy powinien jest dostępny do Państwa dyspozycji pod adresem bioputer.mimuw.edu.pl:12345
  1. Rozpocznij nową historię i zapisz ją pod znaczącą nazwą. Ściągnij dane ze zbioru danych (Shared Data / Data Libraries) zajecia_APB
  2. Zobacz w galaxy, jak wygląda plik w formacie FastQ (sample-ChIP-Seq.fastqsanger)
  3. Użyj narzędzia FastQC (QC and manipulation) na pierwszym zbiorze danych (sample-ChIP-Seq.fastqsanger). Przeanalizuj wyniki.
  4. Użyj narzędzia FastQC (QC and manipulation) na drugim zbiorze danych (sample-ChIP-Seq-low-quality.fastqsanger). Przeanalizuj wyniki.
  5. Użyj narzędzia Groomer aby przekonwertować dane do formatu sanger
  6. Użyj narzędzia FastQ quality trimmer, aby wyeliminować problemy występujące w drugim zbiorze danych (zła jakość odczytów na początku, odczyty mające niską średnią jakość).
  7. Z użytych przed chwilą kroków wydziel workflow, który będzie mógł być użyty do mapowania nowych zbiorów danych i usuwania z nich nieprawidłowości.
  8. W folderze zajecia_APB znajdują się jeszcze dwa pliki (właściwe odczyty i kontrola). Użyj narzędzia MACS do znalezienia wierzchołków w sygnale. Następnie używając narzędzi do sortowania i operacji na tekstach dostępnych w Galaxy znajdź 50 najbardziej istotnych statystycznie wierzchołków.

Zajęcia 6 (16.11) - NumPy cd.

  1. Dane jest n miast, z których nie wszystkie mają ze sobą połączenia drogowe. Połączenia między miastami są opisane macierzą n x n, gdzie 1 na pozycji (i, j) oznacza, że połączenie istnieje, a wpp 0. Napisz funkcję can_reach(i, j, k, path), która wczyta z pliku pod ścieżką path macierz połączeń (wiersze w kolejnych liniach, kolumny oddzielone spacją) i zwróci wartość True wtw. z wierzchołka i do j da się dojść w co najwyżej k krokach. Przykładowe dane są tu i tu.
  2. Dana jest macierz kwadratowa n x n o elementach rzeczywistych. Zastąp jej wartości wartościami tzw. z-score'u.
  3. Wczytaj z pliku kwadratową macierz n x n o wartościach całkowitych i znajdź największą podmacierz kwadratową złożoną wyłącznie z liczb większych od 0. Przykładowy plik znajduje się tutaj i powinien zwrócić macierz [[15, 16, 17], [21, 22, 23], [27, 28, 29]]. W przypadku remisów należy zwrócić dowolną taką podmacierz.
  4. W zadanej w pliku zad4.txt macierzy dwuwymiarowej o elementach całkowitych znajdź taką podmacierz, która ma największą sumę.
  5. Wygeneruj losową macierz liczb całkowitych od 0 do 100 wymiaru n. Znajdź liczbę unikalnych wartości w macierzy.
  6. Dana jest macierz n x n. W każdym wierszu na pewnej pozycji znajduje się klucz. Indeks tej pozycji znajduje się zawsze w pierwszej kolumnie. Posortuj wiersze macierzy dowolną metodą sortowania używając kluczy. W pliku zad6_po.txt znajduje się efekt sortowania macierzy z pliku zad6_przed.txt. Remisy rozstrzygamy dowolnie.

Zadanie zaliczeniowe 2

Treść zadania zaliczeniowego numer 2 znajduje się tutaj.

Zajęcia 5 (9.11)

  1. Przeczytaj samouczek do modułu numpy (na dzisiaj wystarczy nam znajomość zagadnień do funkcji ix_(), bez tej funkcji).
  2. Napisz funkcję primes(n), która zwraca wektor liczb pierwszych z zakresu od 1 do n. Skorzystaj z opcji indeksowania wektorów w numpy, która pozwala przypisać co k-temu elementowi określoną wartość.
  3. Wygeneruj losową macierz 5x5 liczb rzeczywistych z przedziału [0;10], a następnie:
  4. Wygeneruj dwie losowe macierze 5x5; wstaw 0 w drugiej macierzy tam, gdzie w pierwszej wartość była większa od średniej.
  5. Wygeneruj wektor 100 pierwszych liczb Fibonacciego, a następnie zwróc tylko liczby na pozycjach, których indeksy są kwadratami liczb całkowitych.
  6. Napisz funkcję multi_row(a), która dla zadanej macierzy a zawierającej liczby całkowite dodatnie zwróci nową macierz, w której każdy wiersz macierzy a będzie powtórzony tyle razy, ile wynosi wartość na pozycji a_ii (i-ty wiersz, i-ta kolumna). Wskazówka: patrz 'Indexing with Arrays of Indices'.

Zajęcia 4 (26.10)

Zadania łatwiejsze:
  1. Weźmy funkcję f zdefiniowaną następująco:
    def f(n):
        if n % 2 == 0:
            return n / 2
        else:
            return 3*n + 1
    
    Napisz rekurencyjną funkcję collatz_steps(n), która zwróci dla zadanego n liczbę elementów ciągu n, f(n), f(f(n)), ..., potrzebnych do osiągnięcia 1. Np.
    collatz_steps(1) == 1
    collatz_steps(4) == 3
    
  2. Napisz rekurencyjną funkcję check_sort(v), która sprawdzi, czy lista v jest posortowana.
  3. Napisz rekurencyjną funkcję newton(n, k), która dla zadanych liczb n i k wylicza współczynnik dwumianowy ("n po k", wzór rekurencyjny na stronie http://pl.wikipedia.org/wiki/Symbol_Newtona).
Zadania trudniejsze:
  1. Przeczytaj dokumentację modułu collections.
  2. Używając obiektu Counter i modułu random napisz funkcję, która wygeneruje listę 1000 liczb losowych (całkowitych) z przedziału z przedziału [0, 9] i zwróci trzy najczęściej występujące liczby wraz z liczbą wystąpień.
  3. Używając obiektu Counter oraz funkcji cumsum napisz funkcję probgram(s), która dla zadanego tekstu s zwróci nowy tekst, w którym każdy wyraz będzie występował z takim prawdopodobieństwem, jak w s.
  4. Napisz funkcję buffer(size, moves), która zasymuluje działanie dwustronnego bufora. Parametr size definiuje rozmiar bufora. Na liście moves znajduje się opis kolejnych operacji na buforze. Początkowo bufor jest pusty. Opis operacji, to krotka składająca się z liczby całkowitej oraz litery. Znak liczby całkowitej określa, ile razy w tym ruchu dodamy literę do bufora. Znak natomiast określa, z której strony bufora litera zostanie dodana. Przykładowo, (-7, "a") oznacza polecenie dodania litery "a" do bufora siedmiokrotnie z lewej strony. Bufor może ulec przepełnieniu. W tym wypadku z bufora powinien "wypaść" element po przeciwnej stronie, niż element dodawany. W rozwiązaniu warto użyć obiektu deque.
  5. Napisz funkcję to_dict(s), która dla zadanego tekstu s zwróci słownik. W słowniku każdemu słowu znalezionemu w tekście s powinna odpowiadać lista liczb naturalnych - indeksów ich wystąpień w tekście. Dla przykładu to_dict("kto jak kto) == ["kto": [0, 2], "jak": [1]] .

Przykładowe dane do zadania 1.

mały i większy plik .bedGraph
mały i większy plik .wig (fixed step)
mały i większy plik .wig (variable step)

Zajęcia 3 (19.10)

Zadania podstawowe:
  1. Napisz funkcję palindrom(s), która dla zadanego ciągu znaków s sprawdzi, czy napis ten jest palindromem.
  2. Napisz funkcję prefix(s, w), która dla dwóch słów s i w zwróci najdłuższy wspólny prefix obu słów.
  3. Napisz funkcję fib(n), która dla zadanej liczby całkowitej dodatniej n zwróci n-ty wyraz ciągu Fibonacciego.
  4. Napisz rekurencyjną wersję funkcji fib z poprzedniego zadania.
  5. Napisz rekurencyjną funkcję rec_count(v, x), która dla listy v i liczby x zwróci liczbę wystąpień liczby x w liście v.
  6. Napisz funkcję incr_segment(v), która dla zadanej listy v zwróci jej najdłuższy rosnący segment (spójny kawałek).
Zadania na "jednolinijkowce":
  1. Napisz funkcję has_a(l), która zwraca listę indeksów tych elementów listy l, które zawierają literę "a" (enumerate, filter).
  2. Napisz funkcję uniq(l), która usunie duplikaty z listy l zachowując przy tym kolejność elementów na liście - chodzi nam o wzięcie pierwszych wystąpień elementów (reduce).
  3. Napisz funkcję odd(s), która zwróci listę indeksów tych linii tekstu s, które zawierają nieparzystą liczbę wystąpień litery "a" (map, filter, enumerate).
Zadania na użycie biblioteki itertools:
  1. Napisz funkcję prime(a,b) zwracającą True, jeśli obie zadane jako argumenty liczby są pierwsze.
  2. Korzystając z powyższej funkcji napisz funkcję twin_primes(n), która zwróci pierwszą parę liczb bliźniaczych większych od n (obie z nich)(zip, dropwhile).
  3. Napisz funkcję make_plot(f), która wyświetli funkcję f na przedziale [-1,1] z krokiem 0.01. Skorzystaj z funkcji count i takewhile oraz funkcji plot pakietu pylab.
  4. Używając operatora tee napisz funkcję take_mod(s, N, k), która zwróci dla liczb N i k te elementy łańcucha s, których indeksy i spełniają warunek i mod N = k.
  5. Napisz funkcję, która policzy ilość k-merów (wektor) dla zadanego K w sekwencji s (kombinacje z powtórzeniami).
  6. Napisz funkcję, która sprawdzi, czy dana permutacja jest cyklem.
  7. Znajdź wszystkie cykle długości K.
Zadanie 1 (10pkt)
Napisz program do automatycznej konwersji plików w formatach .bedGraph i .wig (odpowiednie specyfikacje znajdują się tu i tu). Jeśli chodzi o pierwszą (możemy założyć, że obowiązkową) linię nagłówka zaczynającą się od słowa track, konwerter powinien zostawić ją bez zmian, z wyjątkiem pola type, które powinno zostać odpowiednio zmodyfikowane. Można założyć, że jest to jedyna linia nagłówka i że w plikach nie występują komentarze (w szczególności w pliku będzie tylko jedna linia track). Konwerter powinien sobie radzić z plikami .wig zarówno typu fixedStep, jak i variableStep. Należy zwrócić uwagę na to, jak są interpretowane przedziały w obu plikach (pozycje w chromosomie numerowane od 1 czy od 0? czy przedziały zawierają w sobie oba końce?). W przypadku użycia konwertera na pliku .bedGraph w wyniku powinniśmy dostać plik .wig typu fixedStep. Program powinien być wywoływany z jednym parametrem - ścieżką do pliku z danymi - i tworzyć nowy plik z odpowiednim rozszerzeniem w katalogu, w którym znajduje się plik wejściowy. Integralną częścią rozwiązania zadania jest odpowiednie wersjonowanie tworzonego kodu. Należy w tym celu użyć subversion lub git'a. Zadanie będziemy sprawdzać 26. października na zajęciach. W przypadku, gdyby kogoś miało nie być wtedy na zajęciach, należy umówić się ze mną indywidualnie na termin nie późniejszy. Powodzenia!

Zajęcia 2 (12.10) Przydatne polecenia: Zajęcia 1 (5.10) Przydatne polecenia: