Python (VŠCHT – ZS 2024/2025)
TYP+kecanemanZ.iriJ

http://studuj.bioinformatiku.cz
PS: Na obdobný předmět BI-PYT volně navazuje předmět MI-PYT zaměřený na praktické aplikace Python'u, jako jsou webové aplikace, testování, dokumentace a distribuce modulů, zpracování dat, tvorba GUI, matematické a jiné náročné výpočty.

Pomůcky

Python 3.x
~ přehled Python'u 3.x
~ tahák pro Python 3.x
~ základní programové konstrukce pro Python 3.x
~ PyPI aka Python CheeseShop (repozitář balíčků pro pip)

IDEs
~ PyCharm – pythoní IDE v Javě (multiplatformní)
~ Jupyter – webový notebook
~ DreamPie – pythoní shell s víceřádkovou historií
~ PyScripter – pythoní IDE s integrovaným debugerem (pro Windows)

Další nástroje
~ kiki-re – vizualizátor regexpů
~ Git – DVCS
~ Mercurial (hg) – DVCS

Příklady z hodin

  1. 2024-09-20:
  2. 2024-09-27:
    • Z důvodu nemoci hodina bohužel odpadá :-( Částečnou náhradou domácí úkol, viz mejl.
  3. 2024-10-04:
    • Z důvodu nemoci hodina bohužel odpadá :-(
  4. 2024-10-11:
  5. 2024-10-18
  6. 2024-10-25
  7. 2024-11-01
  8. 2024-11-08
  9. 2024-11-15
  10. 2024-11-22
  11. 2024-11-29
    • Hodina odpadá (rektorský den a DOD).
  12. 2024-12-06
  13. 2024-12-13
  14. 2024-12-20
    • ???

Příklady

  1. řešené: rozcvička
  2. řešené: typy – čísla
              ~ typy – řetězce
    cvičení: hrátky s „printem“ (úlohy 1-4)
  3. cvičení: parsování textových souborů (úlohy 1-4)
  4. řešené: typy – seznamy
    cvičení: příklady na čísla (úlohy 1-2, případně i 3)
  5. cvičení: hrátky s čísly
  6. cvičení: parsování textových souborů (úloha 6)
    řešené: typy – slovníky
              ~ typy – množiny
              ~ výjimky
    cvičení: hustota obyvatelstva
  7. řešené: funkce
    cvičení: velká data a jejich zpracování
               ~ formáty FASTA a FASTQ
  8. řešené: generátory (úlohy 1, 3 a 5)
              ~ dekorátory
    cvičení: ...
  9. řešené: iterátory (úlohy 2, 4 a 6)
    cvičení (odpočinkové :-): L-systémy a několik jejich příkladů (želví grafika v Pythonu: úvod, přehled)
  10. řešené (grafický formát PNM):
            ~ šachovnice
            ~ barevné přechody
    cvičení: problémy pro PNM
  11. Numpy: základní grafické operace
                ~ korelační/konvoluční filtry (zvýrazňování hran, ostření)
                ~ steganografie
  12. cvičení: náhoda a pravděpodobnost (úloha 1)
  13. jazyk brainfuck a jeho grafické varianty:
            ~ přehled
            ~ základy programování

Domácí úkoly

Domácí úkoly nejsou – nahrazuje je zápočtový projekt (na který budete muset kromě Pythonu nastudovat i základy použití formulářů na webu). Procvičování bude věnován čas na hodinách.

Přednášky

  1. úvodní slovo (Python, Numpy, BDFL, PEPs…)
  2. Python prakticky:
         ~ instalační kuchařka (pro úplné začátečníky)
         ~ jak pracovat s vícero Python'y na jednom systému
         ~ virtuální prostředí: úvod & modul venv
         ~ balíčky prakticky: pip a wheel
         ~ externí nejen balíčkovací systém Conda:
    1. Conda – Víc než Python?
    2. základy práce s Condou (připravil Jiří Novotný)
         ~ práce s Jupyter Notebookem:
    1. úvod, instalace, spuštění
    2. základy práce
  3. PS 0: obecné poznámky k typům v Python'u (a specifické pro sekvenční typy)
    PS 1: dokumentační řetězce a dokumentační testy
    PS 2: modulová kuchařka (pro začátečníky)
  4. základní řídicí konstrukce
    typy:
         ~ čísla
         ~ řetězce
    k textům:
         ~ kódování textů & Unicode
         ~ hrátky s printem
  5. typy:
         ~ n-tice (tuples) & pojmenované n-tice
         ~ Boolean (a priority operátorů)
         ~ seznamy & číselná typovaná pole array
    základy řazení
    souborová kuchařka aneb „Jak číst/psát ze/do souboru“
  6. typy:
         ~ slovníky (& slovníky s výchozími hodnotami collections.defaultdict)
         ~ množiny a „zmražené“ množiny
    zpracování chyb – výjimky
  7. serializace datových struktur:
         ~ základy
         ~ moduly pickle (včetně pickletools)
    funkce I:
         ~ základy
         ~ argumenty / parametry (důležité!)
         ~ viditelnost proměnných
         ~ funkce jako „first-class citizen
    PS – rekurzivní funkce a memoizace:
         ~ rekurzivní algoritmy a jejich náročnost
         ~ technika memoizace
  8. funkce II:
         ~ generátory (a generátorové výrazy)
         ~ uzávěry, lambda-funkce…
         ~ dekorátory (aplikace uzávěrů)
         ~ funkce vyššího řádu (higher/order functions)
    nejen typové anotace:
         ~ anotace funkcí
         ~ anotace proměnných a objektů
         ~ modul typing
         ~ projekt Mypy
    PS: „přetěžování“ funkcí pomocí dekorátoru @functools.singledispatch
  9. uživatelský vstup:
         ~ input() a sys.argv (plus getopt a optparse)
         ~ zpracování vstupu z pajpy pomocí modulu fileinput

         ~ modul argparse [TODO subcommands a 3.3+]
  10. některé aplikace tříd:
         ~ iterátory
         ~ třídění a porovnávání
         ~ kontextový manažer with
    třídy:
         ~ úvod
         ~ funkce super()
         ~ magické metody
         ~ protokol deskriptorů
         ~ introspekce
    PS: „Úvod do tříd pro ne-OOP-programátory“
  11. důležitá přednáška o modulech v Python'u
    PS k semestrálce:
         ~ knihovna CherryPy
         ~ formuláře na webu: úvod, element <input> (připravil Jiří Novotný)
  12. typy:
         ~ bajtový řetězec (binární data neproměnná)
         ~ bajtová pole (binární data proměnná)
    aplikace bajtových typů na grafiku:
         ~ formát PNM
    práce se soubory:
         ~ přehled (více o binárních a textových souborech)
         ~ práce s velkými soubory pomocí mmap
         ~ modul pathlib
         ~ modul tempfile
  13. Numpy:
         ~ úvod
         ~ tvorba a vlastnosti polí
         ~ základní operace
         ~ „broadcasting“
         ~ výřezy, optimalizace
         ~ základy vektorizace

    PS k Numpy: rozšířená výřezová notace
    knihovna Pillow
    zrychlování kódu:
         ~ přehled
         ~ Numba [TODO @(gu)vectorize]
         ~ viz Cython
         ~ příklad – filtrace obrázků
  14. Pandas:
         ~ ...
  15. testování kódu:
         ~ úvod
         ~ doc-testy aneb O smysluplnosti docstringů
         ~ unit-testy
    ladění kódu:
         ~ modul timeit
         ~ moduly cProfile a pstats
         ~ odbroukovávače pdb (interní) a pudb3 (externí)
  16. Python a SQLite
    regexpy v Python'u
    kreslení grafů pomocí externí knihovny matplotlib:
         ~ úvod a přehled
         ~ animace (základy)
  17. interakce s prostředím:
         ~ os.system(), subprocess [TODO]
         ~ FFI: přehled, poznámky k vybraným jazykům, modul ctypes
         ~ Cython: přehled, úvod

Přednášky PLUS

Zápočet

Zápočet bude udělen za úspěšně odevzdaný a obhájený projekt, kterým bude aplikace napsaná pomocí Numpy na základní úpravy obrázků. Rozhraní bude webové, serverová a výpočetní část poběží v Pythonu. Projekt bude vypracován pomocí verzování, např. git – odevzdání bez historie nebo s podezřele krátkou historií se nepokládá za úspěšné! Aplikace musí umět přinejmenším:

PS: Požadovanou funkcionalitu často poskytuje přímo knihovna Pillow, nicméně není v ní všechno a navíc jsou některé operace pomocí broadcastingu zajímavější přímo v Numpy. Každopádně úkolem je připravit pěkný a přehledný „editor“ obrázků, takže se soustřeďte spíše na to.

Zkouška

Na zkoušce se řeší: