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:
    • ...

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. řešené: funkce
    cvičení: formáty FASTA a FASTQ
  7. řešené: generátory (úlohy 1, 3 a 5)
              ~ dekorátory
    cvičení: náhoda a pravděpodobnost (úloha 1)
  8. řešené: typy – slovníky
              ~ typy – množiny
              ~ výjimky
    cvičení: hustota obyvatelstva
  9. řešené: iterátory (úlohy 2, 4 a 6)
    cvičení: ...
  10. řešené (grafický formát PNM):
            ~ šachovnice
            ~ barevné přechody
    cvičení: problémy pro PNM
  11. jazyk brainfuck a jeho grafické varianty:
            ~ přehled
            ~ základy programování
  12. Numpy: základní grafické operace
                ~ korelační/konvoluční filtry (zvýrazňování hran, ostření)
                ~ steganografie

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 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
    funkce:
         ~ základy
         ~ argumenty / parametry (důležité!)
         ~ viditelnost proměnných
         ~ funkce jako „first-class citizen
  6. zpracování chyb – výjimky
    typy:
         ~ slovníky (& slovníky s výchozími hodnotami collections.defaultdict)
         ~ množiny a „zmražené“ množiny
    základy řazení
    souborová kuchařka aneb „Jak číst/psát ze/do souboru“
  7. funkce:
         ~ generátory (a generátorové výrazy)
         ~ uzávěry, lambda-funkce…
         ~ dekorátory (aplikace uzávěrů)
    nejen typové anotace:
         ~ anotace funkcí
         ~ anotace proměnných a objektů
         ~ modul typing
         ~ projekt Mypy
  8. serializace datových struktur:
         ~ základy
         ~ moduly pickle (včetně pickletools)

    PS – rekurzivní funkce a memoizace:
         ~ rekurzivní algoritmy a jejich náročnost
         ~ technika memoizace
  9. některé aplikace tříd:
         ~ iterátory
         ~ třídění a porovnávání
         ~ kontextový manažer with
    třídy:
         ~ úvod
         ~ magické metody
         ~ protokol deskriptorů
         ~ introspekce
    PS: „Úvod do tříd pro ne-OOP-programátory“
  10. důležitá přednáška o modulech v Python'u
    typy:
         ~ bajtový řetězec (binární data neproměnná)
         ~ bajtová pole (binární data proměnná)
    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
  11. grafika:
         ~ formát PNG
         ~ formát PNM
         ~ třída PhotoImage (GIF, PNM)
    modul struct
  12. Numpy:
         ~ úvod
         ~ tvorba a vlastnosti polí
         ~ základní operace
         ~ „broadcasting“
         ~ výřezy, optimalizace

    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ů
  13. Pandas:
         ~ ...
  14. 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í)
  15. Python a SQLite
    regexpy v Python'u
    kreslení grafů pomocí externí knihovny matplotlib:
         ~ úvod a přehled
         ~ animace (základy)
    uživatelský vstup:
         ~ input() a sys.argv (plus getopt a optparse)
         ~ modul argparse [TODO subcommands a 3.3+]
  16. 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. Aplikace musí umět přinejmenším:

PS: Pokud požadovanou funkcionalitu poskytuje v příliš jednoduché formě PIL, jeho použití místo Numpy nebude uznáno ^_~ Nejste-li si jisti, radši se ptejte dříve než pozdě.

Zkouška

Na zkoušce se řeší: