Дизайн уроку

Останнє оновлення 2026-07-02 | Редагувати цю сторінку

Примітка

Де потрібна допомога

Ми додаємо вправи нижче для того, щоб план уроку був більш детальним. Будемо вдячні за пропозиції (як у вигляді нових готових вправ, так і у вигляді коментарів щодо конкретних вправ, їх порядку та часу виконання).

Процес розробки


Поради Майкла Поллана, якби він викладав програмування на R або Python:

  1. Пишіть код.
  2. Не надто багато.
  3. Переважно для побудови графіків.

Michael Koontz {: .quotation}

Урок розроблено за скороченою версією методу “Розуміння за дизайном”. Основні етапи:

  1. Припущення щодо аудиторії, часу тощо. (Поточні нотатки також містять певні висновки та рішення в цьому розділі — їх слід переробити.)

  2. Бажані результати: загальні цілі, підсумкові оцінювання кожні півдня викладання, що слухачі мають знати та вміти.

  3. Навчальний план: кожен епізод містить заголовок з узагальненням матеріалу, що буде розглянуто, оцінку часу на викладання та виконання вправ, а також перелік вправ у вигляді маркованого списку.

Етап 1: Припущення


  • Аудиторія
    • Аспіранти з різних наукових напрямків — від космології до археології
    • Які у минулому обробляли дані в електронних таблицях, а також за допомогою інтерактивних інструментів, таких як SAS
    • Але не просунулися далі CPD (copy-paste-despair / скопіював-вставив-впав в розпач)
  • Обмеження
    • Один повний день 09:00-16:30
      • 06:15 час для занять
      • 0:45 обід
      • 0:30 загалом на дві перерви на каву
    • Слухачі використовують власні інсталяції програмного забезпечення на своїх комп’ютерах
      • Можуть використовувати віртуальні машини або хмарні ресурси на розсуд інструктора
      • Але локально інстальоване програмне забезпечення на власному комп’ютері має залишатися варіантом
    • Немає залежності від інших модулів Carpentry
      • Зокрема, не вимагається знання роботи з командним рядком та системи контролю версій
    • Використовується Jupyter Notebook
      • Надійний інструмент, який використовують багато інструкторів
      • Насправді альтернативи просто немає
      • І це означає, що навіть ті, хто вже трохи працював із Python, скоріше за все, дізнаються для себе щось нове
  • Мотиваційний приклад
    • Створення двовимірних графіків, придатних для включення до наукових публікацій
    • Цікавий майже всім
    • Робить урок придатним для використання в обох програмах 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, якщо їм не передано аргументів?
    • Враховуючи те, що ми вже вивчили, який індексний вираз поверне останній символ у рядку?

Бібліотеки (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 хв.
    • Збір та обробка відгуків

Завершення (16:30)