= Programming in Python (for quantitative biologists) = == Learning objectives and expected learning outcomes == The course introduces students to imperative programming by referring to the Python language. The course is divided in two parts: 1. Python and its object-oriented features; 1. Python libraries that can be useful in scientific computation and data analysis, in particular [https://numpy.org/ NumPy] and [https://pandas.pydata.org/ pandas]. Students will acquire the ability to write and tune a program that automatizes simple computational tasks; they will be able to understand how a small piece of Python code works, to find the reasons of a malfunction and to correct it appropriately. Moreover, students will be able to use the [https://numpy.org/ NumPy] and [https://pandas.pydata.org/ pandas] library to analyze tabular data. == A.A. 2021/22 == The course will take place in the second semester. Currently, we expect to lecture on-premises. Lectures will be also streamed: if you are forced to attend via MS Teams use the code **tf93sr0** to join the team; recording of the lessons will NOT be available, but you can find some videos from last year course in the old web page linked below. [https://easystaff.divsi.unimi.it/PortaleStudenti/index.php?view=easycourse&form-type=attivita&include=attivita&anno=2021&attivita%5B%5D=ECF5B-5_1&visualizzazione_orario=cal&periodo_didattico=&_lang=en&list=0&week_grid_type=-1&ar_codes_=&ar_select_=&col_cells=0&empty_box=0&only_grid=0&highlighted_date=0&all_events=0&faculty_group=0# Official Timetable] ||= Lessons Rooms G30, 306, 504 (40h) =||Mo_7/3 Fr_11/3 Mo_14/3|| ||Mo_21/3 ''Tu_22/3 (14:30, Room 504)''||Mo_28/3 ''Tu_29/3 (14:30, Room 504)''||Mo_4/4 Mo_11/4 ''Tu_12/4 (14:30, Room 504)'' Fr_22/4||''Tu_26/4 (14:30, Room 504)''||Mo_2/5 Fr_6/5 Mo_9/5||Mo_23/5 Fr_27/5 Mo_30/5 Mo_6/6|| Mo_13/6 || ||= Labs, Room 306 (16h) =|| || Fr_18/3|| Fr_25/3|| Fr_1/4|| Fr_8/4|| Fr_29/4|| Fr_13/5|| Fr_10/6|| Fr_17/6|| ||= Setup =|| Scaffolded |||||||| Plain Python interpreter |||||||| Notebooks || During these hard times of physical distance it is useful to keep a social proximity by exchanging comments on the course: subscribe to the forum on [https://pyqb.zulipchat.com/join/wnge4uj2yujcwda73it3gvn5/ Zulip] (use an `@studenti.unimi.it` email). Please answer to this (very short!) [https://homes.di.unimi.it/monga/lucidi2122/survey-pyqb.html survey]. === Exams === * [https://docs.google.com/spreadsheets/d/e/2PACX-1vR2JGk8tvLNsgYnfGhr7cxKNAvqZupk1spgWzl4CAXfFQmYWzcFqyiT2-8oyua4wHqpXIr93r87IreT/pubhtml?gid=119669032&single=true September 19 Results] [https://github.com/pyqb2022/pyqb-20220919 Exam text] * [https://docs.google.com/spreadsheets/d/e/2PACX-1vQKS74MBxjilF6p2d-XDJVTkISK7TAEcvhYSL8Zq3GqRINgDQgBuIENeguDSA0T6y014jbH6zqdUtc1/pubhtml?gid=119669032&single=true September 5 Results] [https://github.com/pyqb2022/pyqb-20220905 Exam text] * July 25 (no students) * [https://docs.google.com/spreadsheets/d/e/2PACX-1vRpQ02j_n1hRzohSGGzmSjCLRYpLbCL2CkpCBAc2vPqIYIeFCEFTKY5VOeemNZApMl0vYddLjh86th3/pubhtml?gid=119669032&single=true July 14 Results] [https://github.com/pyqb2022/pyqb-20220714 Exam text] * [https://docs.google.com/spreadsheets/d/e/2PACX-1vSZxjRu9_tiF_Qrb_NgdSVrObCcYcyzmVShNNYyLYP0o_XRR-1EmkwLYRnWh5uYf6SI52KOaII8akMz/pubhtml?gid=119669032&single=true June 27 Results] [https://github.com/monga-didattica/pyqb-20220627 Exam text] === Syllabus === * The Python programming language. * Native data types. * Functions, selections and iterations. * Basic data structures: lists, tuples, dictionaries. * Object-oriented encapsulation. * Iterators and generators. * Files. * Numpy multi-dimensional arrays and matrices. * Data manipulation and analysis with pandas. Any Python3 book can be used to support the learning of the general part, for example [https://link-springer-com.pros.lib.unimi.it/book/10.1007%2F978-3-030-20290-3 J. Hunt "A Beginners Guide to Python 3 Programming"] (The electronic version is free for Unimi students). [https://numpy.org/ NumPy] and [https://pandas.pydata.org/ pandas] have excellent online documentation. The examination is based on laboratory exercises. A final mark (on a 30 point scale) is given, by taking into account the knowledge of the subject and tools, and the clarity of the solutions. [[PageOutline]] == 2021/22 == === 1. March 7, 2022 8:30 Room G30 === * [https://homes.di.unimi.it/monga/lucidi2122/pyqb01.pdf Slides] [https://homes.di.unimi.it/monga/lucidi2122/pyqb01-handout.pdf Handouts for printing] * [https://python.di.unimi.it/ CS Circles @ Unimi] === 2. March 11, 2022 8:30 Room 306 === * [https://homes.di.unimi.it/monga/lucidi2122/pyqb02.pdf Slides] [https://homes.di.unimi.it/monga/lucidi2122/pyqb02-handout.pdf Handouts for printing] === 3. March 14, 2022 8:30 Room G30 === * [https://homes.di.unimi.it/monga/lucidi2122/pyqb03.pdf Slides] [https://homes.di.unimi.it/monga/lucidi2122/pyqb03-handout.pdf Handouts for printing] === 4. March 18, 2022 8:30 Room 306 === * [https://homes.di.unimi.it/monga/lucidi2122/pyqb04.pdf Slides] [https://homes.di.unimi.it/monga/lucidi2122/pyqb04-handout.pdf Handouts for printing] === 5. March 21, 2022 8:30 Room G30 === * [https://homes.di.unimi.it/monga/lucidi2122/pyqb05.pdf Slides] [https://homes.di.unimi.it/monga/lucidi2122/pyqb05-handout.pdf Handouts for printing] === 6. March 22, 2022 14:30 Room 504 === * [https://homes.di.unimi.it/monga/lucidi2122/pyqb06.pdf Slides] [https://homes.di.unimi.it/monga/lucidi2122/pyqb06-handout.pdf Handouts for printing] === 7. March 25, 2022 8:30 Room 306 === * [https://classroom.github.com/a/qx2DEA71 DNA Hamming] * [https://classroom.github.com/a/VRY9ukd1 Newton square root] === 8. March 28, 2022 8:30 Room G30 === * [https://homes.di.unimi.it/monga/lucidi2122/pyqb07.pdf Slides] [https://homes.di.unimi.it/monga/lucidi2122/pyqb07-handout.pdf Handouts for printing] === 9. March 29, 2022 14:30 Room 504 === * [https://homes.di.unimi.it/monga/lucidi2122/pyqb08.pdf Slides] [https://homes.di.unimi.it/monga/lucidi2122/pyqb08-handout.pdf Handouts for printing] === 10. April 1, 2022 8:30 Room 306 === * [https://homes.di.unimi.it/monga/lucidi2122/pyqblab03.pdf Slides] [https://homes.di.unimi.it/monga/lucidi2122/pyqblab03-handout.pdf Handouts for printing] === 11. April 4, 2022 8:30 Room G30 === * [https://homes.di.unimi.it/monga/lucidi2122/pyqb09.pdf Slides] [https://homes.di.unimi.it/monga/lucidi2122/pyqb09-handout.pdf Handouts for printing] === 12. April 8, 2022 8:30 Room 306 === * [https://homes.di.unimi.it/monga/lucidi2122/pyqblab04.pdf Slides] [https://homes.di.unimi.it/monga/lucidi2122/pyqblab04-handout.pdf Handouts for printing] === 13. April 11, 2022 8:30 Room G30 === * [https://homes.di.unimi.it/monga/lucidi2122/pyqb10.pdf Slides] [https://homes.di.unimi.it/monga/lucidi2122/pyqb10-handout.pdf Handouts for printing] === 14. April 12, 2022 14:30 Room 504 === * [https://homes.di.unimi.it/monga/lucidi2122/pyqb11.pdf Slides] [https://homes.di.unimi.it/monga/lucidi2122/pyqb11-handout.pdf Handouts for printing] * Exceptionally this lecture was [https://homes.di.unimi.it/monga/lucidi2122/video/pyqb11.mp4 recorded] (user `pyqb`, password `snake_case`) The screen was only partially recorded (see the slides above instead), the audio should be complete. === 15. April 22, 2022 8:30 Room 306 === * [https://homes.di.unimi.it/monga/lucidi2122/pyqb12.pdf Slides] [https://homes.di.unimi.it/monga/lucidi2122/pyqb12-handout.pdf Handouts for printing] === 16. April 26, 2022 14:30 Room 504 === * [https://homes.di.unimi.it/monga/lucidi2122/pyqb13.pdf Slides] [https://homes.di.unimi.it/monga/lucidi2122/pyqb13-handout.pdf Handouts for printing] === 17. April 29, 2022 8:30 Room 306 === * [https://classroom.github.com/a/tsaJ9qFE Matplotlib basics] === 18. May 2, 2022 8:30 Room G30 === * [https://homes.di.unimi.it/monga/lucidi2122/pyqb14.pdf Slides] [https://homes.di.unimi.it/monga/lucidi2122/pyqb14-handout.pdf Handouts for printing] === 19. May 6, 2022 8:30 Room 306 === * [https://classroom.github.com/a/kDvs5VJp Lotka-Volterra] === 20. May 9, 2022 8:30 Room G30 === * [https://homes.di.unimi.it/monga/lucidi2122/pyqb15.pdf Slides] [https://homes.di.unimi.it/monga/lucidi2122/pyqb15-handout.pdf Handouts for printing] * [https://classroom.github.com/a/UcZMDe9e Gray-Scott] === 21. May 13, 2022 8:30 Room 306 === * [https://classroom.github.com/a/TLoExXyC Numpy & images] === ~~May 16, 2022~~ (suspended) === === ~~May 20, 2022~~ (suspended) === === 22. May 23, 2022 8:30 Room G30 === * [https://homes.di.unimi.it/monga/lucidi2122/pyqb16.pdf Slides] [https://homes.di.unimi.it/monga/lucidi2122/pyqb16-handout.pdf Handouts for printing] === 23. May 27, 2022 8:30 Room 306 === * [https://classroom.github.com/a/f3cERSCB Analyze Howell's data with pandas] === 24. May 30, 2022 8:30 Room G30 === * [https://homes.di.unimi.it/monga/lucidi2122/pyqb17.pdf Slides] [https://homes.di.unimi.it/monga/lucidi2122/pyqb17-handout.pdf Handouts for printing] === 25. June 6, 2022 8:30 Room G30 === * [https://homes.di.unimi.it/monga/lucidi2122/pyqb18.pdf Slides] [https://homes.di.unimi.it/monga/lucidi2122/pyqb18-handout.pdf Handouts for printing] === 26. June 10, 2022 8:30 Room 306 === * [https://classroom.github.com/a/P4lW4yt7 Howell's data 2] === 27. June 13, 2022 8:30 Room G30 === * [https://github.com/monga-didattica/pymc-howell Analizing Howell's data with MCMC models] === 28. June 17, 2022 8:30 Room 306 === == [=#old Previous years] == * [wiki:WikiStart@79 A.A. 2020/21]