Zaawansowane techniki programowania dla bioinformatyków 1000-713ZTP
Część I - profesjonalny Python w projekcie naukowym
Jak pisać kod, który da się utrzymać, sprawdzić i uruchomić ponownie?
- Organizacja pracy: środowiska wirtualne, uv, pip/conda, PyCharm, terminal, podstawy pracy na serwerze i dobre praktyki struktury katalogów.
- Od notebooka do programu: moduły, skrypty, argumenty wywołania, argparse, konfiguracja projektu, pliki JSON/YAML, podstawy budowania interfejsów CLI.
- Python obiektowy: „od klasy do metaklasy” wprowadzenie.
- Jakość kodu: debugowanie, profilowanie, testy jednostkowe z pytest, typowanie, walidacja danych, pydantic, mypy, formatowanie i lintowanie kodu, dokumentacja.
- Pakiety Pythona: pyproject.toml, układ src, instalacja developerska, wersjonowanie, budowanie paczek, release i podstawy dystrybucji narzędzi.
- Modele generatywne wspomagające pracę z kodem: ChatGPT, Codex, GitHub Copilot; praktyczne użycie do prototypowania, refaktoryzacji, pisania testów i
dokumentacji, z naciskiem na krytyczną weryfikację wygenerowanego kodu.
Część II - analiza danych i udostępnianie wyników
Jak przekształcić dane w wiarygodny wynik analizy?
- Praca z danymi w pandas; broadcasting i wektoryzacja w numpy.
- Czyszczenie danych, łączenie źródeł, sanity checks, agregacje, analiza trendów i przygotowanie danych do raportowania.
- Wizualizacja wyników: matplotlib, seaborn, plotly oraz podstawy interaktywnych i mapowych prezentacji danych (bokeh, geoplot).
- Wybrane narzędzia naukowe i statystyczne: SciPy oraz elementy modelowania predykcyjnego w scikit-learn.
- Komunikacja z usługami sieciowymi: requests, API, pobieranie danych z internetu, parsowanie stron z BeautifulSoup oraz automatyzacja przeglądarki z Selenium.
- Udostępnianie wyników i modeli: podstawy FastAPI, walidacja danych wejściowych z pydantic, uruchamianie aplikacji przez Uvicorn, serwowanie modeli scikit-learn przez endpointy predykcyjne oraz dobre praktyki pracy z zewnętrznymi serwisami.
Część III - współpraca, powtarzalność i workflow
Jak prowadzić projekt tak, aby inni mogli go sprawdzić, rozszerzyć i uruchomić?
- Git, GitHub/GitLab, gałęzie, konflikty, pull/merge requesty, code review i praca w modelu znanym z projektów open-source.
- Testy i ciągła integracja: automatyczne uruchamianie testów po zmianach w kodzie, kontrola jakości projektu i budowanie artefaktów.
- Wersje, tagi, release, podstawy zasad FAIR oraz przygotowanie kodu i wyników do cytowania lub dalszego wykorzystania.
- Workflow obliczeniowe w Snakemake: reguły, zależności między plikami, konfiguracja, raporty i uruchamianie narzędzi CLI w pipeline’ach.
- Podstawy konteneryzacji, Docker/Apptainer, jako narzędzia wspierające powtarzalność.
Część IV - narzędzia bioinformatyczne
Jak korzystać z ekosystemu Pythona w biologii obliczeniowej?
- Biopython: sekwencje, rekordy, formaty FASTA/FASTQ/GenBank, SeqIO, adnotacje, proste analizy sekwencji, GC-content, ORF, uliniowienia i BLAST.
- Praca z bazami NCBI i PubMed przez Bio.Entrez: wyszukiwanie rekordów, pobieranie metadanych, analiza literatury.
- Wywoływanie zewnętrznych programów z Pythona przez subprocess.
Koordynatorzy przedmiotu
Rodzaj przedmiotu
Założenia (opisowo)
Efekty kształcenia
Po ukończeniu kursu student:
- Posiada praktyczną znajomość języka Python oraz jego bibliotek wystarczającą do tworzenia aplikacji średniej wielkości.
- Zna powszechnie używane narzędzia do analizy danych, wizualizacji oraz udostępniania wyników niezbędne w pracy w data science.
- Rozumie szeroko stosowane narzędzia i praktyki związane ze współpracą zespołową przy tworzeniu oprogramowania oraz zarządzaniu projektami w środowiskach akademickich i przemysłowych.
- Potrafi jasno przedstawić strukturę, użyte narzędzia oraz założenia projektu programistycznego.
- Zdobył praktyczne doświadczenie poprzez etapowe rozwijanie własnego projektu bioinformatycznego, wykorzystując poznane narzędzia i metody w rzeczywistym kontekście.
Kryteria oceniania
W trakcie semestru Studenci będą realizować jeden lub dwa projekty programistyczne rozwijane etapami. Projekty mogą być realizowane indywidualnie lub w małych zespołach. Szczegółowe zasady oceniania opisane będą w kursie przedmiotu na wydziałowej platformie Moodle.
Egzamin końcowy przybierze formę prezentacji i omówienia finalnej wersji projektu. Warunkiem zaliczenia jest wykazanie się znajomością prezentowanego projektu podczas egzaminu.
Literatura
1. Zaawansowany Python, Luciano Ramalho (Fluent Python, 2nd edition)
2. Python. Zwięzłe kompendium dla programisty, David M. Beazley (Python Distilled)
3. Efektywny Python. 90 sposobów na lepszy kod, wydanie II, Brett Slatkin (Effective Python: 90 specific ways to write better Python, 2nd edition)