Потрібна допомога
Ми додаємо вправи нижче для того, щоб план уроку зробити більш конкретним. Будемо вдячні за пропозиції (як у вигляді нових готових вправ, так і вигляді коментарів до вже існуючих).
Розділи, що використовуються
Поради Michael Pollan, якби він навчав програмування на R або Python:
- Напишіть код.
- Не надто багато.
- Переважно сценарії.
Цей урок розроблено з використанням скороченого варіанту розділу «Розуміння вмісту». Основні пункти:
- Припущення щодо аудиторії, часу тощо.
(У цьому пункті поточний проект містить деякі висновки і результати
- вони повинні бути перероблені.)
-
Бажані результати: учні повинні розуміти загальні цілі та вміти робити підсумкові оцінки за півдня деталізація.
- План уроку: кожен епізод має заголовок, який описує, що буде розглянуто, потім в дужках вказується час, необхідний на вивчення матеріалу та виконання навчальних вправ.
Етап 1: Припущення
- Аудиторія
- Студенти багатьох спеціальностей від космології до археології
- Хто обробляв дані в електронних таблицях, а також за допомогою інтерактивних інструментів, таких як SAS
- Але не просунулися далі CPD (copy-paste-despair / копіював-вставив-впав в розпач)
- Обмеження
- Один повний день 09:00-16:30
- 06:15 заняття
- 0:45 обід
- 0:30 разом на дві перерви на каву
- Учні використовують інстальоване програмне забезпечення на своїх комп’ютерах
- Можуть використовувати віртуальні машини або хмарні ресурси на розсуд інструктора
- Але необхідно опціонально зберегти інстальоване програмне забезпечення
- Немає залежності від інших модулів Carpentry
- Не вимагається знання системи керування версіями
- Використовується Jupyter Notebook
- Оригінальний інструмент, який використовують багато інструкторів
- Насправді альтернативи просто немає
- І це означає, що навіть люди, які вже трохи вивчали Python раніше, ймовірно, дізнаються щось нове
- Один повний день 09:00-16:30
- Мотивуючий приклад
- Створення двовимірних графіків, придатних для включення в документи
- Приваблює майже всіх
- Робить урок придатним для використання і в Data Carpentry, і в Software Carpentry
- Це означає, що навіть люди, які вже трохи вивчили Python раніше, ймовірно, дізнаються щось нове
- Дані
- Завжди використовуйте дані Gapminder
- Розділяйте дані на декілька файлів в залежності від континенту
- Щоб відображати результати із прикладів якісніше (наприклад, використовуйте Австралію/Нову Зеландію, тобто лише два рядки)
- І дозвольте використання декількох наборів даних у прикладах
- Сфокусуйтеся на Pandas замість of NumPy
- Зробіть урок придатним для використання і в Data Carpentry, і в Software Carpentry
- Новачки, швидше за все, захочуть аналізувати дані
- А користувачі з певним досвідом:
- сприймуть аналіз даних як щось вже відоме,
- але навряд вони стикалися з Pandas, тому вони все одно отримають від уроку щось корисне
- Завдання переважно не полягатимуть у «написати цей код з нуля»
- Хочете багато коротких вправ, які можна надійно виконати за відведений час
- Тож використовуйте MCQ, заповніть пропуски, проблеми Парсонса, «налаштуйте цей код» тощо.
Етап 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 DataFrame.
- Завдання: 10 хв.
- Зчитайте дані про Америки та відобразіть їхню підсумкову статистику.
- Що роблять
.head
та.tail
? - Який(і) рядок(и) слід передати в
read_csv
, щоб зчитувати файли з інших каталогів? - Як можна записати дані CSV?
DataFrames (11:15)
- Навчання: 15 хв.
- Виберіть окремі значення з DataFrame Pandas.
- Виділіть цілі рядки або цілі стовпці з dataFrame.
- Виберіть підмножину рядків і стовпців із DataFrame за одну операцію.
- Виберіть підмножину з DataFrameданих за єдиним булевим критерієм.
- Завдання: 15 хв.
- Напишіть вираз для визначення ВВП Сербії на душу населення у 2007 році.
- Яке правило регулює те, що включається (або не включається) до числових та іменованих фрагментів у Pandas?
- Що робить кожен рядок у наступній короткій програмі?
- Що роблять
idxmin
таidxmax
? - Напишіть вирази, щоб отримати ВВП на душу населення для всіх країн у 1982 році, для всіх країни після 1985 року тощо.
- Враховуючи те, як змінилися кордони після 1900 року, що б ви зробили, якби вас попросили створити таблицю ВВП на душу населення для Польщі 20-го сторіччя?
Графік (11:45)
- Навчання: 15 хв.
- Створіть графік часового ряду, який відповідає одному набору даних.
- Створіть діаграму розсіювання, яка показує зв’язок між двома наборами даних.
- Вправи: 15 хв.
- Заповніть порожні поля, щоб побудувати графік мінімального ВВП на душу населення в європейських країнах.
- Змініть приклад так, щоб створити точкову діаграму ВВП на душу населення в країнах Азії.
- Поясніть, що робить кожен аргумент
plot
у наступному прикладі.
Обід (12:15): 45 min
Списки (13:00)
- Навчання: 10 хв.
- Поясніть, навіщо програмам потрібні колекції значень.
- Напишіть програми, які створюють списки, індексують їх, а також розрізають і змінюють їх через призначення та виклик методів.
- Завдання: 10 хв.
- Заповніть порожні поля, щоб програма повернула потрібні результати.
- Наскільки великими є наступні зрізи?
- Що повертають вирази з від’ємним індексом?
- Що робить «stride» у зрізі?
- Як зрізи задовольняють межі діапазону?
- Які відмінності між цими двома способами сортування?
- Яка різниця між
new = old
таnew = old[:]
?
Цикли (13:20)
- Навчання: 10 хв.
- Поясніть, для чого зазвичай використовуються цикли for.
- Проаналізуйте виконання простого (невкладеного) циклу та правильно вкажіть значення змінних у кожній ітерації.
- Напишіть цикли for, які використовують шаблон накопичувача для агрегування значень.
- Завдання: 15 хв.
- Чи є помилка відступу синтаксичною чи помилкою виконання?
- Простежте, в якому порядку виконуються рядки цієї програми.
- Заповніть пропуски в цій програмі, щоб вона перевернула рядок.
- Заповніть пропуски в цій серії прикладів, щоб навчитися накопичувати значення.
- Змініть порядок і відступи в цих рядках, щоб обчислити сукупну суму значень списку.
Зациклення (13:45)
- Навчання: 5 хв.
- Навчіться читати та писати вирази модулю glob, які відповідають наборам файлів. Використовуйте модуль glob для створення списків файлів
- Напишіть цикли for для виконання операцій над файлами, зазначеними в списку.
- Завдання: 10 хв.
- Які назви файлів не відповідають виразу модуля glod?
- Змініть цю програму так, щоб вона зберігала кількість записів у найкоротшому файлі.
- Напишіть програму, яка зчитує дані та будує по них графіки для всіх регіонів.
Написання функцій (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 хв.
- Збір та обробка відгуків