Дизайн уроку
Останнє оновлення 2026-07-02 | Редагувати цю сторінку
Де потрібна допомога
Ми додаємо вправи нижче для того, щоб план уроку був більш детальним. Будемо вдячні за пропозиції (як у вигляді нових готових вправ, так і у вигляді коментарів щодо конкретних вправ, їх порядку та часу виконання).
Процес розробки
Поради Майкла Поллана, якби він викладав програмування на R або Python:
- Пишіть код.
- Не надто багато.
- Переважно для побудови графіків.
— Michael Koontz {: .quotation}
Урок розроблено за скороченою версією методу “Розуміння за дизайном”. Основні етапи:
Припущення щодо аудиторії, часу тощо. (Поточні нотатки також містять певні висновки та рішення в цьому розділі — їх слід переробити.)
Бажані результати: загальні цілі, підсумкові оцінювання кожні півдня викладання, що слухачі мають знати та вміти.
Навчальний план: кожен епізод містить заголовок з узагальненням матеріалу, що буде розглянуто, оцінку часу на викладання та виконання вправ, а також перелік вправ у вигляді маркованого списку.
Етап 1: Припущення
- Аудиторія
- Аспіранти з різних наукових напрямків — від космології до археології
- Які у минулому обробляли дані в електронних таблицях, а також за допомогою інтерактивних інструментів, таких як SAS
- Але не просунулися далі CPD (copy-paste-despair / скопіював-вставив-впав в розпач)
- Обмеження
- Один повний день 09:00-16:30
- 06:15 час для занять
- 0:45 обід
- 0:30 загалом на дві перерви на каву
- Слухачі використовують власні інсталяції програмного забезпечення на
своїх комп’ютерах
- Можуть використовувати віртуальні машини або хмарні ресурси на розсуд інструктора
- Але локально інстальоване програмне забезпечення на власному комп’ютері має залишатися варіантом
- Немає залежності від інших модулів Carpentry
- Зокрема, не вимагається знання роботи з командним рядком та системи контролю версій
- Використовується Jupyter Notebook
- Надійний інструмент, який використовують багато інструкторів
- Насправді альтернативи просто немає
- І це означає, що навіть ті, хто вже трохи працював із Python, скоріше за все, дізнаються для себе щось нове
- Один повний день 09:00-16:30
- Мотиваційний приклад
- Створення двовимірних графіків, придатних для включення до наукових публікацій
- Цікавий майже всім
- Робить урок придатним для використання в обох програмах Carpentries
(тобто Software Carpentry, Data Carpentry)
- І це означає, що навіть ті, хто вже трохи працював із Python, скоріше за все, дізнаються для себе щось нове
- Дані
- Використовувати дані gapminder протягом усього уроку
- Але розділити на кілька файлів за континентами
- Щоб зробити виведення результатів з прикладів охайнішим (наприклад, використовувати Australia/New Zealand, що містять лише два рядки)
- Та показати приклади роботи з кількома наборами даних одночасно
- Зробити фокус на Pandas замість NumPy
- Зробити урок придатним до використання для Data Carpentry та Software Carpentry
- Абсолютні початківці, ймовірно, захочуть побачити приклад аналізу даних
- Водночас слухачі з деяким попереднім досвідом:
- сприймуть аналіз даних як реальне завдання,
- та, швидше за все, ще не працювали з Pandas, тому урок буде все одно для них корисним
- Завдання здебільшого не будуть вимагати “написати цей код з
нуля”
- Бажано мати багато коротких вправ, які можна надійно закінчити за відведений час
- Тому використовуємо питання з множинним вибором, заповнення пропусків, проблеми Парсонса, “змініть цей код” тощо.
Етап 2: Бажані результати
Питання
Як мені…
- …читати табличні дані?
- …побудувати графік одного набору значень?
- …створити графік часового ряду?
- …створити окремий графік для кожного набору даних?
- …отримати з набору даних додаткові дані для побудови графіку?
- …писати зрозумілі програми, якими можна скористатися пізніше?
Навички
Я зможу…
- …писати короткі скрипти з використанням циклів та умовних операторів.
- …писати функції з фіксованою кількістю параметрів, які повертають єдиний результат.
- …імпортувати бібліотеки з використанням псевдонімів та звертатися до їхнього вмісту.
- …читати та форматувати дані за допомогою Pandas.
Визначення
Я дізнаюся…
- …що програма - це частина лабораторного обладнання, яке виконує
аналіз
- Програму потрібно перевіряти/налагоджувати перед/під час використання
- Програма робить аналіз відтворюваним, придатним для перегляду та поширення
- …що програми пишуться для людей, а не для комп’ютерів
- Інформативні імена змінних
- Модульність коду для зручності його читання та повторного використання
- Без дублювання коду
- Пояснюйте, для чого написана програма і як нею користуватися
- … що програми, якими вони користуються, принципово не відрізняються від тих, які вони пишуть
- … як призначити значення змінним
- … що таке цілі числа, числа з плаваючою комою, рядки, масиви NumPy та датафрейми Pandas
- …як відстежувати виконання циклу
for - …як відстежувати виконання команд
if/else - … як створювати списки та отримувати їхні елементи
- … як створити та індексувати масиви NumPy
- … як створювати датафрейми Pandas та звертатися до їхніх елементів за індексом
- … як створити графік, який показує зміни з часом
- … різниця між визначенням і викликом функції
- … де знайти документацію до стандартних бібліотек
- … як дізнатися, що ще пропонує Python для наукових обчислень
Етап 3: Навчальний план
Підсумкове оцінювання
- Середина курсу: створення графіка часових рядів для кожного файлу в каталозі.
- Завершення: отримання даних з датафрейма Pandas і зображення декількох часових рядів на одному графіку для їх порівняння.
Інтерактивний запуск і вихід з програми (9:00)
- Навчання: 15 хв (з урахуванням проблем із налаштуванням)
- Запустіть Jupyter Notebook, створіть новий документ та вийдіть із Jupyter Notebook.
- Створіть в блокноті комірки типу Markdown.
- Створіть та запустіть комірки Python у блокноті.
- Завдання: 0 хв (враховується в навчальний час - без окремої вправи)
- Створіть список у Markdown
- Що буде зображатися, якщо кілька виразів помістити в одну комірку?
- Змініть тип наявної комірки з коду на Markdown
- Візуалізація рівнянь у LaTeX
Змінні та присвоєння (9:15)
- Навчання: 10 хв.
- Напишіть програми, які присвоюють скалярні значення змінним і виконують обчислення з цими значеннями.
- Правильно відстежуйте значення змінних у програмах, які використовують скалярне присвоєння.
- Завдання: 10 хв.
- Відстеження виконання коду, що міняє місцями два значення за допомогою проміжної змінної.
- Передбачення кінцевих значень змінних після виконання декількох присвоєнь.
- Що станеться, якщо спробувати звернутися до числа за індексом (а не до списку чи рядку)?
- Яке ім’я для змінної є кращим:
m,minабоminutes? - Що повертають наступні вирази?
Типи даних та їх перетворення (09:35)
- Навчання: 10 хв.
- Поясніть, чим цілі числа відрізняються від чисел із плаваючою комою.
- Поясніть ключові відмінності між числами та символьними рядками.
- Використовуйте вбудовані функції для перетворень між цілими числами, числами з плаваючою комою та символьними рядками.
- Завдання: 10 хв.
- Який тип має значення 3.4?
- Який тип має значення 3.25 + 4?
- Який тип значення ви б використали для представлення:
- Кількості днів, які пройшли з початку року.
- Часу, що минув з початку року.
- тощо.
- Як можна використовувати
//(цілочисельне ділення) та%(залишок від ділення)? - Що поверне функція
int("3.4")? - Для даних значень типу float, int та string, які з виразів повернуть певний результат?
- Що, на вашу думку, виведе вираз
1+2j + 3?
Вбудовані функції та Довідка (09:55)
- Навчання: 15 хв.
- Пояснення призначення функцій.
- Правильний виклик вбудованих функцій Python.
- Правильні вкладені виклики вбудованих функцій.
- Використання довідки для зображення документації про вбудовані функції.
- Правильний опис ситуацій, в яких виникають помилки SyntaxError та NameError.
- Завдання: 10 хв.
- Пояснення порядку операцій у певному складному виразі.
- Що поверне кожна вкладена комбінація функцій
minтаmax? - Чому
maxтаminне повертаютьNone, якщо їм не передано аргументів? - Враховуючи те, що ми вже вивчили, який індексний вираз поверне останній символ у рядку?
Перерва на каву: 15 min (10:20)
Бібліотеки (10:35)
- Навчання: 10 хв.
- Поясніть, що таке бібліотека та для чого програмісти їх створюють і використовують.
- Пишіть програми, які імпортують і використовують стандартні бібліотеки Python.
- Знаходьте та читайте документацію про стандартні бібліотеки в інтерактивному режимі (в інтерпретаторі) та онлайн.
- Завдання: 10 хв.
- Яку функцію зі стандартної математичної бібліотеки можна використати для обчислення квадратного кореня?
- Яка бібліотека підходить для вибору випадкового значення з набору даних?
- Якщо
help(math)видає помилку, що ви забули зробити? - Заповніть пропуски в коді нижче, щоб імпорт та програма в цілому запрацювали.
Читання табличних данних (10:55)
- Навчання: 10 хв.
- Імпортуйте бібліотеку Pandas.
- Використайте Pandas, щоб завантажити простий набір даних CSV.
- Отримайте базову інформацію про датафрейм Pandas.
- Завдання: 10 хв.
- Зчитайте дані про Північну та Південну Америки та відобразіть їхню підсумкову статистику.
- Що роблять
.headта.tail? - Який (які) рядок (рядки) слід передати в
read_csv, щоб зчитати файли з інших каталогів? - Як можна записати дані у форматі CSV?
Датафрейми (11:15)
- Навчання: 15 хв.
- Виберіть окремі значення з DataFrame Pandas.
- Виділіть цілі рядки або стовпці з датафрейму.
- Виберіть підмножину рядків і стовпців із датафрейму за одну операцію.
- Виберіть підмножину з датафрейму за єдиним булевим критерієм.
- Завдання: 15 хв.
- Напишіть вираз для визначення ВВП Сербії на душу населення у 2007 році.
- Яке правило регулює те, що входить (або не входить) до індексованих та іменованих зрізів у Pandas?
- Що робить кожен рядок у наступній короткій програмі?
- Що роблять
idxminтаidxmax? - Напишіть вирази для отримання значення ВВП на душу населення для всіх країн у 1982 році, та для усіх країн після 1985 тощо.
- З огляду на зміни кордонів Польщі після 1900 року — як би ви створили таблицю ВВП на душу населення для Польщі за 20-е сторіччя?
Побудова графіків (11:45)
- Навчання: 15 хв.
- Створити графік часового ряду для одного набору даних.
- Створіть діаграму розсіювання, яка показує зв’язок між двома наборами даних.
- Вправи: 15 хв.
- Заповніть порожні поля, щоб побудувати графік мінімального ВВП на душу населення в європейських країнах.
- Змініть приклад так, щоб створити точкову діаграму ВВП на душу населення в країнах Азії.
- Поясніть, що робить кожен аргумент
plotу наступному прикладі.
Перерва (12:15): 45 min
Списки (13:00)
- Навчання: 10 хв.
- Поясніть, чому програмам потрібні набори значень.
- Напишіть програми, які створюють списки, індексують їх, а також розрізають і змінюють їх через присвоєння та виклик методів.
- Завдання: 10 хв.
- Заповніть порожні поля, щоб програма повернула потрібні результати.
- Наскільки великими є наступні зрізи?
- Що повертають вирази з від’ємним індексом?
- Що робить “крок” у зрізі?
- Як зрізи реагують на індекси поза межами діапазону?
- Які відмінності між цими двома способами сортування?
- Яка різниця між
new = oldтаnew = old[:]?
Цикли (13:20)
- Навчання: 10 хв.
- Поясніть, для чого зазвичай використовуються цикли
for. - Проаналізуйте виконання простого (невкладеного) циклу та правильно вкажіть значення змінних у кожній ітерації.
- Напишіть цикли
for, які використовують шаблон накопичення для отримання підсумкових значень.
- Поясніть, для чого зазвичай використовуються цикли
- Завдання: 15 хв.
- Чи є помилка відступу синтаксичною чи помилкою виконання?
- Простежте, в якому порядку виконуються рядки цієї програми.
- Заповніть пропуски в цій програмі, щоб вона розгорнула рядок у зворотному напрямку.
- Заповніть пропуски в цій серії прикладів, щоб навчитися накопичувати підсумкове значення.
- Змініть порядок і відступи в цих рядках, щоб обчислити кумулятивні суми значень списку.
Перебір наборів даних (13:45)
- Навчання: 5 хв.
- Навчіться читати та писати вирази, які відповідають наборам файлів, за допомогою модуля glob.
- Використовуйте модуль glob для створення списків файлів.
- Напишіть цикли
forдля виконання операцій над файлами, зазначеними в списку.
- Завдання: 10 хв.
- Які імена файлів не відповідають цьому виразу модуля glob?
- Змініть цю програму так, щоб вона надрукувала кількість записів у найкоротшому файлі.
- Напишіть програму, яка відкриває всі регіональні файли даних і будує для них графіки.
Написання функцій (14:00)
- Навчання: 10 хв.
- Знайдіть і поясніть різницю між визначенням функції та викликом функції.
- Напишіть функцію, що бере фіксовану кількість аргументів і повертає одне значення.
- Завдання: 15 хв.
- Цей код визначає та викликає функцію. Подумайте, що вона друкує після її виклику?
- Поясніть, чому ця коротка програма повертає відповіді саме в такому порядку?
- Заповніть порожні поля, щоб створити функцію, яка знаходить мінімальне значення у файлі даних.
- Заповніть порожні поля, щоб створити функцію, яка знаходить перше від’ємне значення в списку. Що робить ваша функція, якщо список порожній?
- Чому іноді корисно передавати аргументи із зазначенням імен відповідних параметрів?
- Заповніть пропуски та перетворіть цей короткий фрагмент коду на функцію.
Область видимості змінної (14:25)
- Навчання: 10 хв.
- Визначить локальні та глобальні змінні.
- Розглядайте параметри як локальні змінні.
- Прочитайте повідомлення про помилку та визначте файл, функцію та номер рядка, у якому вона сталася.
- Завдання: 10 хв.
- Відстежте зміни значень у цій програмі, чітко розрізняючи локальні та глобальні змінні.
Кава (14:45): 15 хв.
Умовні оператори (15:00)
- Навчання: 10 хв.
- Правильне написання програм, які використовують оператори
ifтаelse, а також прості булеві вирази (без логічних операторів). - Відстеження виконання невкладених умовних операторів та умовних операторів усередині циклів.
- Правильне написання програм, які використовують оператори
- Завдання: 15 хв.
- Простежте за виконанням цього умовного оператора.
- Заповніть пропуски, щоб функція замінювала всі від’ємні значення на нулі.
- Змініть цю програму так, щоб вона обробляла лише файли, які містять менше ніж 50 записів.
- Змініть цю програму так, щоб вона завжди знаходила найбільше та найменше значення в списку незалежно від його вигляду.
Стиль програмування (15:25)
- Навчання: 15 хв.
- Як я можу зробити свої програми зрозумілішими для читання?
- Як більшість програмістів форматують свій код?
- Яким чином програми можуть самостійно перевіряти, що вони працюють правильно?
- Завдання: 15 хв.
- Які рядки цього коду будуть доступні як онлайн-довідка?
- Перетворіть коментарі в цій програмі на рядки документації.
- Перепишіть цю коротку програму так, щоб її було легше читати.
Підведення підсумків (15:55)
- Навчання: 20 хв.
- Назвіть і знайдіть сайти наукової спільноти Python, присвячені програмному забезпеченню, семінарам і допомозі користувачам.
- Завдання: 0 хв.
- Немає завдань.
Зворотний зв’язок (16:15)
- Навчання: 0 хв.
- Завдання: 15 хв.
- Збір та обробка відгуків