Знайомство з Jupyter Notebook

Автори: Квінн Домбровскі, Тессі Ґняди та Девід Клостер Переклали на українську: Мар’яна Юрків, Анастасія Юрків Оригінал уроку: https://programminghistorian.org/en/lessons/jupyter-notebooks

Jupyter Notebook (або Блокноти Jupyter) – це середовище для роботи, яке дозволяє поєднувати текстові пояснення, зрозумілі людині, з кодом, що виконується комп’ютером. У цьому уроці розглянемо, як встановити Jupyter Notebook, як створювати і запускати блокноти, а також у яких випадках використання цього інструменту є найбільш корисним.

Вступ

Коли обчислення є невід’ємною частиною ваших досліджень, як опублікувати науковий аргумент так, щоб код був таким же доступним і зрозумілим, як і супровідний текст? У гуманітарних науках дослідження зазвичай подаються у вигляді написаного тексту – статті або монографії. Хоча видавці дедалі частіше допускають додавання посилань на допоміжний код та інші матеріали, такий підхід зазвичай зводить їх до другорядного статусу по відношенню до основного тексту.

А що якби можна було публікувати дослідження у форматі, який би надавав рівну вагу тексту та коду? У сучасних академічних публікаціях звично розділяти код і текст аргументації, а їхнє поєднання часто вимагає подолання численних технічних та організаційних труднощів. Зазвичай код публікується окремо, наприклад, на GitHub, або в іншому репозиторії, де читачам потрібно знаходити посилання у тексті щоб зрозуміти, на які скрипти посилаються, переходити за URL-адресою репозиторію, знаходити необхідні скрипти, завантажувати їх та пов'язані з ними дані, а тоді запускати. Однак, якщо у вас є право на повторну публікацію матеріалу, Jupyter Notebook дозволяє об’єднати текст і код в єдиному середовищі, надаючи їм рівнозначності.

Jupyter Notebook почав активно використовуватись в спільноті фахівців аналізу даних, настільки, що дедалі частіше ним замінюють Microsoft Word як основне середовище для наукових матеріалів. У виданнях з цифрових гуманітарних наук посилання на Jupyter (що відокремився від iPython — інтерактивного Python, з 2014 року) почали з'являтися з 2015 року.

Jupyter Notebook також набув популярності у цифрових гуманітарних науках як інструмент для викладання. Численні навчальні уроки Programming Historian, такі як Text Mining in Python через HTRC Feature Reader і Extracting Illustrated Pages from Digital Libraries with Python, а також інші навчальні матеріали для семінарів, рекомендують використовувати Jupyter для зручного розміщення коду. Це дозволяє студентам легко експериментувати та редагувати код, що є ідеальним варіантом для навчання, особливо якщо користувачі мають різний рівень технічної підготовки та досвіду у написанні та редагуванні коду.

Блокноти Jupyter створені для того, щоб забезпечити більш зручний інтерфейс для роботи з кодом у дослідженнях з використанням цифрових методів та освітніх процесах. Використання Jupyter має сенс тоді, коли є конкретна мета, оскільки самі по собі блокноти не сприяють безпосередньо просуванню досліджень чи навчання. Перед тим як розпочати цей урок, визначте, чого саме хочете досягти за допомогою Jupyter Notebooks. Наприклад, чи прагнете ви організувати робочий процес вашого проєкту? Можливо, вам потрібно аналізувати дані з можливістю відстеження кожного кроку процесу? Або, можливо, важливо, щоб читачі ваших наукових робіт могли слідувати за теоретичними і технічними аспектами аргументації без необхідності перемикатися між PDF і папками зі скриптами? Якщо вашою метою є проведення семінарів з програмування, які б враховували різний рівень підготовки учасників, або якщо ви хочете використовувати чи адаптувати вже готові блокноти, то Jupyter Notebook може значно полегшити цей процес.

Пам’ятайте про вашу мету під час проходження цього уроку: залежно від того, як саме ви плануєте використовувати блокноти Jupyter, деякі розділи можна пропустити, якщо вони стосуються інших завдань чи контекстів.

Мета уроку

У цьому уроці ви дізнаєтесь:

  • Що таке блокноти Jupyter

  • Як встановити, налаштувати та використовувати програмний пакет Jupyter Notebook

  • Коли блокноти можуть бути корисними для досліджень і навчання

На уроці ми розглянемо приклад використання Jupyter Notebook для аналізу даних, а потім адаптуємо цей блокнот і дані для навчального процесу.

Також торкнемося складніших тем, зокрема:

  • Використання Jupyter Notebook для інших мов програмування, не лише Python

  • Перетворення наявного коду Python у формат Jupyter Notebook

  • Масштабування обчислень за допомогою Jupyter Notebook у середовищах, таких як високопродуктивні обчислювальні кластери

Що потрібно знати заздалегідь

Цей урок підходить для сміливих початківців, які мають мінімальний технічний досвід. Насправді, Jupyter Notebook — чудовий інструмент для тих, хто вивчає основи програмування.

Залежно від блокнота, який ви плануєте використовувати, можливо, вам потрібно буде встановити певні модулі Python через pip. Це передбачає базові навички роботи з командним рядком (докладні інструкції для Windows дивіться тут, а для Mac/Linux — тут).

Цей урок створений для Jupyter Notebook версії 6.0, однак інтерфейс і функціональні можливості цього програмного забезпечення залишаються доволі сталими в різних версіях.

Грамотне обчислення

Зв’язок між кодом, який може виконувати комп'ютер, і текстом, зрозумілим людині, став особливо важливим у галузі інформатики в 1970-х роках, коли Дональд Кнут запропонував концепцію "грамотного програмування". Замість того, щоб упорядковувати код лише з урахуванням ефективного його виконання комп'ютером, грамотне програмування розглядає програму як літературний твір, зрозумілий людині, і робить акцент на розумовому процесі самого програміста. Грамотне програмування, розроблене Кнутом, використовує письмову прозу, в яку вбудований комп'ютерний код через макроси (спрощений формат написання коду). Інструменти грамотного програмування допомагають отримати два результати: "заплутаний" код який виконується комп'ютером, та форматовану документацію, переплетену з кодом яка слугує поясненням для людей.

Фернандо Перес, творець середовища програмування iPython, яке згодом стало основою проєкту Jupyter, ввів термін грамотне обчислення для опису моделі, яка використовується в блокнотах Jupyter:

Грамотне обчислювальне середовище дозволяє користувачам не лише виконувати команди, але й зберігати результати цих команд у форматі документа, з додаванням графіків, тексту у довільній формі та форматованих математичних виразів. На практиці це можна уявити як поєднання командного інтерфейсу, наприклад Unix shell, і текстового процесора: отримані документи можна читати як текст, але вони містять блоки коду, виконані базовою обчислювальною системою.

Jupyter – далеко не перший і не єдиний інструмент у форматі обчислювальних блокнотів. Ще у 1980-х роках інтерфейси блокнотів були доступні через такі програми, як Wolfram Mathematica та MATLAB. У 2013 році Стефан Сінклер і Джеффрі Роквелл представили "Voyant notebooks", побудовані за зразком Mathematica, які розкривають деякі припущення, що лежать в основі Voyant Tools, і роблять їх доступними для налаштування користувачем. Згодом вони розширили цю концепцію у проєкті "Мистецтво аналізу літературного тексту за допомогою Spyral Notebooks".

Jupyter здобув популярність у багатьох галузях як середовище з відкритим вихідним кодом, яке підтримує численні мови програмування. Назва Jupyter є посиланням на три основні мови, що підтримуються проєктом (Julia, Python, R), проте є доступними ядра, які роблять Jupyter сумісним з багатьма іншими мовами, включаючи Ruby, PHP, JavaScript, SQL та Node.js. Може бути не доцільно реалізовувати проєкти на всіх цих мовах у Jupyter (наприклад, Omeka не підтримує плагіни у форматі Jupyter), це середовище все одно є корисним для документування коду, навчання програмуванню та створення простору, де студенти можуть легко експериментувати з готовими прикладами.

Встановлення Jupyter Notebooks

Станом на 2025 рік існують два основні середовища для роботи з Jupyter Notebooks: Jupyter Notebook (не плутати з файлами блокнотів із розширенням .ipynb) та новіше середовище Jupyter Lab.

Jupyter Notebook широко використовується та має детальну документацію, і надає простий файловий браузер разом із середовищем для створення, редагування та виконання блокнотів. Jupyter Lab є складнішим і за своєю структурою ближче до інтегрованого середовища розробки – IDE (зазначено у попередніх уроках від Programming Historian (Посібнику з цифрової історії) для Windows, Mac і Linux). Попри те, що Jupyter Lab був створений для того, щоб у майбутньому замінити Jupyter Notebook, поки немає жодних ознак, що підтримка Jupyter Notebook припиниться найближчим часом. Через простоту і зручність для початківців у цьому уроці використовується саме Jupyter Notebook. Обидва середовища включені в дистрибутив Anaconda, який описується далі. Найпростіший спосіб встановити Jupyter Notebook — через Anaconda, але якщо у вас вже встановлено Python, і ви не хочете встановлювати Anaconda, можна скористатися командою pip install jupyter (для Python 3).

Anaconda

Anaconda — це дистрибутив Python і R, який має відкриту частину з відкритим вихідним кодом (open source) і комерційну частину. У базовій (безкоштовній для індивідуального використання) версії він включає понад 1400 популярних пакетів, менеджер пакетів Conda для встановлення бібліотек, а також Anaconda Navigator — зручний інструмент з графічним інтерфейсом для керування середовищами. Це дозволяє створювати окремі ізольовані середовища з різними наборами бібліотек для уникнення конфліктів між проєктами. Після встановлення Anaconda ви можете використовувати Anaconda Navigator для додавання нових пакетів (або ж команду conda install в командному рядку), але деякі пакети доступні лише через pip (тобто через pip install в командному рядку або в Jupyter Notebook).

Для більшості завдань рекомендовано завантажити версію Anaconda для Python 3, хоча певний код може бути написаний старішою версією Python 2. У цьому курсі ви будете використовувати Python 3. Інсталятор Anaconda займає понад 500 МБ, а після інсталяції може потребувати більше 3 ГБ простору на жорсткому диску, тож переконайтеся, що у вас є достатньо місця на комп'ютері та стабільне підключення до інтернету перед початком.

Якщо місце на жорсткому диску є обмеженим, можна запакувати блокнот так, щоб його можна було запускати за допомогою безкоштовних хмарних обчислювальних ресурсів, без встановлення Anaconda. Це може бути корисним для проведення майстер-класів або навчальних занять. Детальніше про цю можливість дивіться у розділі про Binder нижче.

Щоб завантажити та встановити Anaconda, перейдіть на офіційний сайт Anaconda. Зверху, на головній сторінці знайдіть опцію "Free Download", введіть вашу пошту і перейдіть на наступну сторінку, потім натисніть кнопку "Download" зі значком відповідної операційної системи. Якщо у вас Windows, то завантажується файл із розширенням .exe; для Mac це буде файл .pkg, а для Linux — .sh.

Відкрийте файл, щоб встановити програмне забезпечення, як ви це зазвичай робите у своїй операційній системі. Додаткові деталі щодо встановлення можна знайти в офіційній документації Anaconda docs, де також описані інструкції зі встановлення через командний рядок для кожної операційної системи. Якщо ваш комп'ютер не може відкрити файл, переконайтеся, що було обрано правильну операційну систему перед завантаженням інсталятора. На Windows під час встановлення обов'язково виберіть параметр "Додати Anaconda до змінної PATH", інакше не вдасться запускати блокноти Jupyter із командного рядка.

Використання Jupyter Notebook для дослідницької роботи

У цьому уроці описано, як спочатку створити блокнот Jupyter для аналізу даних у рамках дослідницького проєкту, а згодом адаптувати його і використовувати для навчання. Хоча цей конкретний приклад взято з досліджень дописів користувачів популярної новинної соцмережі, він зосереджений на перетворенні дат, яке широко потрібне в аналізі історичних та літературних даних.

Запуск Jupyter Notebook

Якщо ви вже встановили Anaconda, як описано вище, можете запустити Anaconda Navigator, як і будь-яку іншу програму. (Можна закрити підказку про створення облікового запису в Anaconda Cloud — для роботи з Anaconda він не потрібен.) На головному екрані ви побачите набір значків і короткий опис кожної програми, включеної в Anaconda.

Щоб відкрити Jupyter Notebook, натисніть кнопку "Launch" (Запуск) під відповідною піктограмою.

Anaconda Navigator інтерфейс

Якщо ви надаєте перевагу використанню командного рядка замість Anaconda Navigator, після встановлення Anaconda ви можете відкрити нове вікно терміналу (Mac) або командного рядка (Windows) і запустити команду jupyter notebook, щоб відкрити Jupyter Notebook у вашому браузері. Якщо запускаєте Jupyter Notebook з командного рядка, зверніть увагу на папку, в якій перебуваєте під час запуску. Ця папка стане головним каталогом, який відразу з’явиться в інтерфейсі Jupyter Notebook.

Обидва підходи відкриють інтерфейс Jupyter Notebook у новому вікні або вкладці вашого звичного браузера. Оскільки Jupyter Notebook працює в браузері, вся взаємодія відбувається у браузері, навіть якщо застосунок запущено на вашому комп’ютері.

Оскільки ви працюєте з блокнотами, які імпортують пакети Python, залежні від певних версій інших пакетів, рекомендується створити середовище для роботи з цими блокнотами, щоб уникнути конфліктів версій (наприклад, один блокнот може вимагати версії 1.0 певного пакета, а інший — версії 2.0). Документація Anaconda Navigator з управління середовищами (або, якщо ви надаєте перевагу командному рядку, документація Conda) пропонує покрокові інструкції щодо створення, оновлення та активації середовища. Для запуску Jupyter Notebook у вибраному середовищі потрібно спочатку активувати це середовище.

Інтерфейс перегляду файлів у Jupyter Notebook — це основний спосіб роботи з файлами блокнотів Jupyter (.ipynb). Якщо спробувати відкрити такий файл у звичайному текстовому редакторі, ви побачите його у форматі JSON, без інтерактивних блоків коду. Для перегляду та роботи з блокнотом необхідно спочатку запустити Jupyter Notebook. Це відкриє вебінтерфейс у браузері, звідки можна відкрити потрібний файл. Хоча за замовчуванням немає можливості встановити Jupyter Notebook як програму для відкриття .ipynb файлів подвійним натисканням, це можна налаштувати за допомогою додаткових інструментів як nbopen або створення відповідних скриптів.

Якщо ви запускаєте Jupyter Notebook через Anaconda Navigator, інтерфейс автоматично відкриє ваш головний каталог. На Mac це зазвичай шлях /Users/ваше_ім'я_користувача, а на Windows — диск C:. У випадку запуску Jupyter Notebook з командного рядка він покаже вміст тієї папки, у якій ви перебували на момент запуску (також, за допомогою командного рядка можна відкрити конкретний блокнот, використовуючи команду, наприклад: jupyter notebook example.ipynb).

Щоб уникнути безладу в головному каталозі, рекомендується створити окрему папку для збереження блокнотів. Це можна зробити як через стандартний файловий менеджер (Finder на Mac або Провідник файлів у Windows), так і безпосередньо в інтерфейсі Jupyter Notebook. Подібно до Google Drive, Jupyter Notebook надає інструменти для управління файлами прямо у вебінтерфейсі. Щоб створити нову папку в Jupyter Notebook, натисніть кнопку "Створити" (New) у верхньому правому куті й оберіть "Папка" (Folder). Це створить папку з назвою Untitled Folder. Тож одразу з'явиться можливість перейменувати нову папку. Дайте папці ім’я, наприклад, notebooks, і відкрийте її.

Завантаження даних зразка

Приклад CSV-файлу для оригінальної версії цього уроку містить метадані фанфікшину про Гаррі Поттера, отримані з італійського фанфікшн-сайту efpfanfic.net і попередньо очищені за допомогою регулярних виразів і OpenRefine.

Для адаптації цього уроку було обрано набір даних "WorldNews: Russian Invasion of Ukraine" з платформи Kaggle. Цей набір містить дописи з популярної новинної соцмережі Reddit за посиланням r/worldnews, які стосуються російського вторгнення в Україну. Вони дають можливість аналізувати динаміку висвітлення подій, інтерес користувачів до певних тем та взаємодію з публікаціями.

Для уроку ми спростили оригінальний набір, залишивши найважливіші поля, такі як ідентифікатор допису, час публікації, кількість коментарів, рейтинг, кількість голосів та час оновлення.

Дати публікації та оновлення генеруються автоматично під час додавання або редагування історії, тому вони є узгодженими. Завдяки цьому їх можна конвертувати у дні тижня за допомогою Python. Якщо у вас немає значного досвіду роботи з конвертації дат у Python, Jupyter Notebook стане зручним інструментом для експериментів з різними модулями і методами.

Спочатку завантажте приклад CSV-файлу.

У середовищі Jupyter Notebook, відкривши файловий браузер, перейдіть у створений вами каталог notebooks. У правому верхньому куті натисніть кнопку "Завантажити" (Upload) й імпортуйте CSV-файл. Найзручніше буде, якщо файл знаходиться в тому ж каталозі, що й блокнот, який ви створите для конвертації дат.

Завантаження файлів у Jupyter Notebook

Зверніть увагу, що це не єдиний спосіб відобразити файли в браузері Jupyter Notebook. Папка notebooks, яку ви створили, є звичайним каталогом на вашому комп’ютері. Тому ви можете використовувати звичний файловий менеджер (наприклад, Finder на Mac або Провідник файлів у Windows), щоб додати до цієї папки файли .ipynb або дані. Jupyter Notebook автоматично використовує розташування файлу блокнота (.ipynb) як початковий шлях до файлів. Для курсів чи семінарів доцільно створити окрему папку, де можна зберігати блокнот, пов’язані зображення та дані, з якими ви працюєте. Якщо всі файли не знаходяться в одній папці, вам доведеться вказувати до них шлях у кожному посиланні або змінити робочий каталог за допомогою Python-коду у вашому блокноті.

Створення нового блокнота

У папці notebooks створіть новий блокнот для роботи з датами у вашому дослідницькому проєкті. Для цього натисніть кнопку "Новий" (New) у верхньому правому куті інтерфейсу файлового менеджера Jupyter Notebook. Якщо ви щойно встановили Anaconda (як описано вище), єдиний доступний варіант — це створення блокнота Jupyter з використанням ядра Python 3 (бекенд-компонента, що виконує код у блокноті). У подальшому ми розглянемо, як додати ядра для інших мов програмування.

Натисніть на "Python 3", і Jupyter Notebook відкриє нову вкладку з інтерфейсом блокнота. За замовчуванням новий блокнот буде називатися "Untitled". Ви можете перейменувати його, натиснувши на назву у верхній лівій частині екрана.

Створення нового блокнота Jupyter

Робота з блокнотами Jupyter

Блокноти Jupyter складаються з комірок (cells), які можуть містити код або текст у зрозумілому для людини вигляді. Тип кожної комірки визначається параметром, який можна змінити через випадне меню. За замовчуванням новостворена комірка належить до типу "Code" і призначена для введення коду. Щоб створити текстову комірку, потрібно змінити її тип на "Markdown". Щоб дізнатися більше про Markdown, перегляньте урок "Початок роботи з Markdown" у Посібнику з цифрової історії.

Коли ви створюєте новий блокнот Jupyter, перша комірка буде коміркою коду. У верхній частині інтерфейсу Jupyter Notebook розташована панель інструментів з функціями, які застосовуються до комірки, яка зараз вибрана. Однією з функцій є спадне меню, яке за замовчуванням має значення "Code". Натисніть на це меню та виберіть "Markdown". (Ви також можете використовувати комбінації клавіш: Esc + M для зміни типу комірки на Markdown, або Esc + Y для повернення типу Code). Першу комірку блокнота часто використовують для заголовка або короткого опису мети проєкту. На даний момент це лише робочі нотатки для довідки; на цьому етапі проєкту не варто надто переймати стилем викладу та форматуванням, оскільки невідомо, чи буде цей код частиною остаточного проєкту, чи ви використаєте інший інструмент або метод. Проте кілька комірок із текстовими нотатками можуть бути корисними, щоб згодом легше було відновити хід ваших думок.

Вставте наступний текст у першу комірку. Якщо перший рядок не відображається великим шрифтом (як заголовок), переконайтеся, що в спадному меню обрано "Markdown".

# Конвертація дат публікації та оновлень
Конвертування дати публікації та оновлення інтернет коментарів, пов’язаних з вторгненням Росії в Україну за днем тижня.
Редагування комірки типу Markdown у блокноті Jupyter

Під час редагування комірки ви можете використовувати Ctrl + Z (Windows) або Command + Z (Mac), щоб скасувати внесені зміни. Кожна комірка має власну історію редагувань. Навіть якщо ви перейшли до іншої комірки і внесли там зміни, повернувшись до першої комірки, можна скасувати попередні зміни, не втрачаючи правок у другій комірці.

Щоб вийти з режиму редагування та "Виконати" (Run) код у поточній комірці (для комірок типу Markdown це просто переміщує вас далі на наступну комірку або автоматично створює нову), натисніть на кнопку запуску ▶ на панелі інструментів або скористайтеся комбінацією Ctrl + Enter (Ctrl + Return на Mac). Якщо захочете продовжити редагування цієї комірки пізніше, можна двічі натиснути на неї мишкою або натиснути Enter (Windows) / Return (Mac). Для запуску поточної комірки та створення нової (за замовчуванням це буде комірка з кодом) одразу під нею, використовуйте Alt + Enter (Option + Enter на Mac).

Далі необхідно розібратися, як виконати конвертування. Пошук за відповідними термінами може перенаправити до обговорення на StackOverflow, де в першій відповіді рекомендовано використовувати модуль datetime для Python. Як перший крок, імпортуйте цей модуль у комірці типу code. Оскільки вхідний файл має формат CSV, також слід імпортувати модуль csv.

Для додавання нової комірки натисніть кнопку ➕ на панелі інструментів або скористайтеся комбінацією Esc + B. Це створить нову комірку типу code під поточною. У цій новій комірці введіть наступний код для імпорту модулів Python:

import datetime
import csv

З огляду на те, що цей блокнот або його варіант можуть бути оприлюднені пізніше, варто винести імпорт модулів в окрему комірку, а основний код розмістити в іншій, щоб між ними можна було додати Markdown-комірку з поясненнями щодо функціоналу кожного імпортованого модуля.

Обидва пакети, які імпортуються в цьому блокноті, вже входять до складу дистрибутиву Anaconda. Однак існує багато спеціалізованих пакетів, корисних для наукових досліджень (наприклад, Classical Languages Toolkit (CLTK) для текстового аналізу давніх мов), які не включені до Anaconda і недоступні через менеджер пакетів conda. Для встановлення таких пакетів слід використовувати pip. Інсталяція пакетів у середовищі Jupyter Notebook може викликати труднощі, оскільки ядро Jupyter, яке використовується поточним блокнотом, може відрізнятися від інших версій Python, встановлених на вашому комп’ютері. Детальний технічний опис цих проблем можна знайти в одній із публікацій блогу.

Якщо ви працюєте над блокнотом (Jupyter Notebook), яким хочете поділитися, і він використовує рідковживані пакети, можна вказати інструкції в комірці типу Markdown, де рекомендуєте користувачам заздалегідь встановити ці пакети за допомогою conda або pip. Також є можливість виконати встановлення прямо з блокноту, використовуючи команду conda:

import sys
!conda install --yes --prefix {sys.prefix} YourModuleNameHere

Тут синтаксис ! означає, що команда виконується з командного рядка, а не в середовищі ядра Jupyter. Якщо пакет недоступний у репозиторії conda (багато спеціалізованих пакунків для досліджень там не представлені), ви можете скористатися pip для встановлення:

import sys
!{sys.executable} -m pip install YourModuleNameHere

Якщо Python не був попередньо встановлений на вашому комп'ютері перед інсталяцією Anaconda для цього уроку, можливо, потрібно буде додати модуль pip, щоб встановлювати інші пакети. Це можна зробити через інтерфейс Anaconda Navigator або виконавши команду conda install pip у командному рядку.

Повертаючись до нашого прикладу, додайте ще одну нову комірку та вставте наступний код (переконайтеся, що зберегли правильні відступи):

with open('threads_example.csv') as f:
    csv_reader = csv.reader(f, delimiter=',')
    for row in csv_reader:
        datetime.datetime.strptime(row[1],'%d-%m-%y %H:%M:%S').strftime('%A')
        print(row)

Натиснувши на кнопку запуску ▶ на панелі інструментів, поточна комірка з щойно введеним нами кодом буде виконана. Після виконання коду в комірці, поряд з номером комірки з’явиться число в квадратних дужках. Це число вказує на порядок виконання комірки. Якщо ви знову виконаєте цю комірку, номер зміниться.

Якщо число не з’являється одразу поруч із коміркою, ви побачите зірочку в дужках. Це означає, що комірка коду ще не завершила виконання. Це звичайна практика для ресурсомістких обчислень (наприклад, обробка природної мови) або тривалих завдань на кшталт вебскрейпінгу. Коли комірка виконується, значок на вкладці браузера змінюється на пісковий годинник ⌛. Якщо потрібно переключитися на іншу вкладку, поки код виконується, ви знатимете, що виконання завершено, коли пісковий годинник знову зміниться на значок блокнота 📔.

Виконання комірки коду в блокноті Jupyter

Запустіть дві комірки коду в блокноті, починаючи з верхньої.

Блокноти Jupyter найкраще працюють, коли ви запускаєте комірки по черзі. Іноді можуть виникати помилки або некоректні результати, якщо комірки запускаються не по порядку або ви намагаєтесь повторно редагувати та виконувати різні частини блокнота. Якщо ви внесли багато змін і запускали блоки коду в нелінійній послідовності і отримуєте дивні результати, можна скинути Jupyter Notebook, натиснувши "Ядро" (Kernel) в меню та обравши "Reset Kernel and Clear Outputs of All Cells…" (Скинути ядро та очистити виводи всіх комірок). Навіть якщо ви не помітили нічого аномального, корисно виконати скидання і повторно запустити код після завершення його написання, щоб переконатися у правильності результату.

Успішним результатом запуску другої комірки коду має бути список рядків даних з вихідного файлу.

Робота з датами є ключовою складовою аналізу історичних даних. Однак у їх обробці можуть виникати певні труднощі, зокрема, пов'язані з різними форматами дат. Припустимо, ви використовуєте інший набір даних з іншим форматуванням дат. На жаль, застосування такої бібліотеки як datetime може бути недостатнім для обробки ваших даних. Щоб зрозуміти причину можливих проблем, в першу чергу варто звернутися до документації для datetime, де описано кожен варіант форматування. Там ви побачите, що єдиний варіант для значень днів у записі дат передбачає використання нульового доповнення (тобто однозначним числам, що позначають дні або місяців повинен передувати нуль). У прикладі цього уроку, ваш код може коректно зчитати дату формату ‘12-2-22’ завдяки тому, що функція strptime в Python намагається автоматично інтерпретувати формат дати, навіть якщо немає нульового доповнення. Однак, на деяких системах, особливо з іншими мовами чи налаштуваннями, інтерпретація може бути менш гнучкою. В такому випадку у вас є два варіанти: можна змінити дані або змінити код. Найкраще завжди вказувати формат даних максимально точно або обробляти дати без доповнюючих нулів за допомогою додаткового коду.

Якщо продовжити читати обговорення на StackOverflow, можна знайти ще один підхід, що використовує іншу бібліотеку — dateutil, яка, схоже, є більш гнучкою щодо типів дат, які вона приймає.

Спробуймо використати бібліотеку dateutil для синтаксичного аналізу (парсингу) та приведення наших вихідних даних до більш поширеного та правильного формату дати. Поверніться до комірки, де ви імпортували модулі, і відредагуйте її, додавши (в будь-якому місці комірки, врахувавши, що кожен імпорт модуля повинен бути у новому рядку):

import dateutil

Після цього знову запустіть цю комірку. Зауважте, що номер біля комірки змінюється під час повторного запуску.

Тепер створіть нову комірку типу Markdown внизу блокнота і вставте:

Спроба використати dateutil для парсингу дат, як зазначено на https://stackoverflow.com/a/16115575.

Під нею додайте нову клітинку типу сode зі наступним кодом (зверніть увагу на правильність відступів, щоб код виглядав так само, як у прикладі):

with open('threads_example.csv') as f:
    csv_reader = csv.reader(f, delimiter=',')
    for row in csv_reader: 
       parseddate = dateutil.parser.parse(row[1])
        print(parseddate)

Виконайте код, який ви щойно додали. Це може зайняти певний час. Почекайте, доки зірочка (*) біля клітинки не зміниться на номер. У результаті ви побачите список дат публікацій, відформатованих по-новому. На перший погляд, виглядає так, ніби все спрацювало. Однак, якщо порівняти результат із даними вхідного файлу, помітно, що не всі дати правильно опрацьовано. Наприклад, дати, де число дня перевищує 12, обробляються правильно (оскільки число 13 і більше не можуть бути числом місяця). Але якщо значення дати дорівнює 12 або менше, дата обробляється в порядку "місяць-день-рік".

Наприклад, перший рядок файлу містить дату 12-2-22 17:43:15, яка інтерпретується як 2022-12-02 17:43:15. У документації модуля dateutil зазначено, що для вирішення цієї проблеми можна вказати параметр dayfirst=True. Відредагуйте передостанній рядок визначення змінної parseddate у комірці коду так:

parseddate = dateutil.parser.parse(row[1], dayfirst=True)

Запустивши комірку з кодом ще раз, ви побачите, що всі дати тепер оброблено правильно.

Наступний крок – визначення днів тижня. Для цього знову використаємо модуль datetime. У цій ж комірці замініть останній рядок коду, print(parseddate), на наступне (не забувайте про правильні відступи):

dayofweek = datetime.date.strftime(parseddate, '%A')
print(dayofweek)

Запустіть код повторно. Результатом буде список днів тижня, визначених для кожної дати.

Тепер, коли у вас є код для парсингу та форматування одного масиву дат, потрібно виконати цю дію для обох наборів у кожному рядку вашого вихідного файлу. Якщо ви впевнені, що поточна комірка коду працює, але ще не дуже добре знайомі з Python, рекомендуємо скопіювати поточну комірку перед внесенням змін. Для цього виберіть потрібну комірку та натисніть кнопку "Копіювати" на панелі інструментів; кнопка "Вставити" 📋 додасть скопійовану комірку під вибраною коміркою. Це дозволить експериментувати з кодом, маючи резервну копію робочої версії.

Якщо ви не хочете писати код самостійно, можна скопіювати та вставити наведений нижче код у нову комірку або замінити ним вміст поточної комірки:

# Відкриває вхідний файл та називає його f
with open('threads_example.csv') as f:
    # Створює вихідний файл для запису результатів
    with open('threads_example_modified.csv', 'w') as out:
        # Визначає об’єкт csv_reader для читання з файлу
        csv_reader = csv.reader(f, delimiter=',')
        # Визначає об’єкт csv_writer для запису у вихідний    файл
        csv_writer = csv.writer(out)
        # Перебирає кожний рядок у вхідному файлі
        for row in csv_reader:
            # Перетворює рядок на список значень
            values = list(row)
            # Задає ідентифікатор посту(post_id), кількість коментарів(comments), рейтинг(rating) та кількість коментарів(upvouts) як відповідні значення у списку
            post_id = values[0]
            comments = values[2]
            rating = values[3]
            upvotes = values[4]
            # Форматує другу колонку як дату, використовуючи dateutil.parser (день вказано першим)
            parseddatepub = dateutil.parser.parse(values[1], dayfirst=True)
            # Форматує шосту колонку як дату, використовуючи такий самий підхід
            parseddateupdate = dateutil.parser.parse(values[5], dayfirst=True)
            # Отримує день тижня для дати публікації (%A – формат дня тижня)
            dayofweekpub = datetime.date.strftime(parseddatepub, '%A')
            # Те ж саме для дати оновлення
            dayofweekupdate = datetime.date.strftime(parseddateupdate, '%A')
            # Створює список оновлених значень
            updatedvalues = [ post_id, dayofweekpub, comments, rating,  upvouts, dayofweekupdate]
            # Записує новий рядок у вихідний файл
            csv_writer.writerow(updatedvalues)
            # Виводить значення на екран
            print(updatedvalues)

Після запуску цього коду у створеній вами раніше папці з’явиться новий файл threads_example_modified.csv, що міститиме ваші дані у форматі, необхідному для аналізу.

Тепер, коли у вас є готовий код для перетворення дат із початкового формату у потрібний, можна очистити комірки-чернетки та зайві примітки. Залиште першу комірку коду з операторами імпорту та першу Markdown-комірку із заголовком і описом. Інші комірки Markdown і Code, які не містять фінальної версії коду, слід видалити. Щоб видалити комірку, виберіть її та натисніть на значок "контейнера" у правій частині комірки. Якщо ви випадково видалите комірку, зверху в головному меню оберіть "Редагувати" (Edit) оберіть пункт "Скасувати операцію комірки" (Undo Cell Operation) для відновлення.

Збереження, експорт та публікація блокнотів Jupyter

Блокноти Jupyter автоматично зберігають вашу роботу, створюючи контрольні точки. Це дозволяє повернутися до попередньої точки, якщо щось піде не так. Щоб повернутись, перейдіть до "Файл" (File) і оберіть "Повернутись до контрольної точки" (Revert Notebook to checkpoint). Проте для збереження конкретно потрібних вам змін важливо вручну натискати "Зберегти", оскільки контрольні точки втрачаються після завершення роботи ядра ноутбука чи його перезапуску.

Jupyter також дозволяє експортувати блокноти у різні формати ("Файл" → "Завантажити як…"). Формат .ipynb ідеально підходить для спільного використання блокноту з усіма його елементами. Ви також можете експортувати код у форматах .py (Python), .r (R), або .js (JavaScript), зберігати у форматі .html, .md (Markdown), або створювати PDF-файли через LaTeX. Якщо завантажити ноутбук у вигляді коду, текст у комірках Markdown буде автоматично перетворено на коментарі. (Для конвертації .ipynb у інші формати після збереження можна використовувати утиліту nbconvert.)

Блокноти Jupyter чудово підходять для відстеження робочого процесу у дослідницьких проєктах. Деякі дослідники публікують свої блокноти на GitHub разом із слайдами, PDF-файлами чи вихідними даними (з урахуванням авторських прав). GitHub відображає неінтерактивну версію блокнотів, доступну для попереднього перегляду в межах репозиторію. Для більш швидкого попереднього перегляду можна скористатися nbviewer, вставивши URL репозиторію GitHub із блокнотами.

Щоб забезпечити повторне використання блокнота іншими, можна додати комірку типу Markdown із рекомендованим цитуванням та посиланням на репозиторій. Це особливо корисно, якщо код вашого блокнота може допомогти у схожих аналізах.

Код, створений під час цього уроку, є частиною значно більшого проєкту. Якщо ви використовуєте блокноти для документування свого робочого процесу, значно зручнішим буде додати нову комірку коду до вже наявного блокнота, замість збереження її у вигляді окремого файлу. Блокноти Jupyter особливо корисні для документування проєктів, які включають короткострокових співавторів. Вони допомагають швидко пояснити кроки робочого процесу, структуру зберігання файлів та надають посилання на навчальні матеріали. До прикладу, два проєкти, які використовували блокноти Jupyter для публікації робочих процесів, – це проєкт соціалістичного реалізму Сари МакЕліні та проєкт Мері Честер-Кадвелл.

Якщо ви публікуєте результати своєї роботи і ці набори даних доступні для поширення, Jupyter-блокноти можуть стати чудовим форматом для демонстрації коду, який є основою ваших наукових досліджень. Цей код буде доступним, придатним для перевірки та повторного використання. Хоча журнали та видавництва зазвичай не приймають формат блокнотів Jupyter, ви можете створити "версію" вашої статті зі структурою блокнота. Вона міститиме повний текст (у вигляді комірок Markdown) і комірки з кодом, інтегровані в текст для наочної демонстрації аналізу, який ви описуєте. Також можна включити комірки коду, які описують робочі процеси підготовки даних, як додаток — у тому ж блокноті або в окремому. Інтеграція коду у текст вашої наукової статті значно підвищує шанси того, що читачі дійсно звернуться до коду, оскільки можуть запускати його безпосередньо в блокноті, читаючи аргументацію.

Такий формат уже активно використовується в академічній спільноті. Наприклад, у статті Володимира Копея "Простий генератор інтерактивних документів Jupyter" (Вісник ХНУ імені Лесі Українки. Серія: Інформаційні технології, 2019, №1, с. 274–282) наведено приклади ефективного використання Jupyter Notebook у дослідницькому процесі, зокрема для підготовки публікацій, роботи з даними та автоматизації аналізу. У європейській практиці поширеним варіантом є публікація Jupyter-блокнотів на платформі Zenodo, яка слугує архівом для досліджень незалежно від країни, джерела фінансування або дисципліни. Zenodo підтримує завантаження наборів даних обсягом до 50 ГБ (у порівнянні з обмеженням 100 МБ на GitHub) і надає DOI для завантажених матеріалів, включаючи блокноти. Деякі науковці комбінують архівування на Zenodo з публікацією на GitHub для полегшеного пошуку, додаючи DOI Zenodo до readme.md файлу у відповідному репозиторії. Наприклад, блокнот для семінару “Applied Data Analytics” Джованні Колавіцци та Маттео Романелло для DHOxSS 2019 опубліковано на GitHub і він містить DOI Zenodo.

Хоча повна інтеграція тексту наукової аргументації та коду все ще є рідкісним явищем через відсутність відповідних платформ для публікації, науковці починають використовувати Jupyter-блокноти як інтерактивний інструмент для поступового переходу до динамічних обчислювальних публікацій. Наприклад, Хосе Кальво створив блокнот як додаток до статті про стилометрику (іспанською мовою), а Джед Добсон опублікував серію блокнотів, що супроводжують його книгу “Критичні цифрові гуманітарні науки: пошук методології”, яка детально розглядає використання Jupyter-блокнотів як наукових об’єктів (ст. 39–41).

Використання Jupyter Notebook для навчання

Jupyter Notebook — це чудовий інструмент для навчання програмуванню або концепціям, які потребують написання коду, наприклад, тематичному моделюванню чи роботі з векторними представленнями слів. Можливість надавати інструкції і пояснення у форматі Markdown дозволяє викладачам детально пояснювати код, чергуючи текстові інструкції та комірки з кодом. Така структура дуже корисна для практичних занять: інструкції та код можна підготувати заздалегідь, щоб учасники просто відкрили блокнот, завантажили дані та запустили код. Якщо ви навчаєте студентів із різним рівнем знань, можна додати додаткові завдання для тих, хто впевнено пише код, водночас забезпечуючи досягнення основних результатів іншими студентами виконуючи заздалегідь написані комірки коду.

Jupyter Notebook також підходить для написання коду безпосередньо під час заняття. Студенти можуть почати з порожнього блокнота, записуючи код разом із викладачем. Комірки різних форматів дозволяють сегментувати код, що набагато зручніше для навчання, ніж у текстовому редакторі чи середовищі розробки (IDE), які не завжди мають подібну структурованість.

Інший спосіб використання Jupyter Notebook — створення інтерактивних завдань для студентів. Інструкції можна написати у комірках формату Markdown, а студенти заповнюють порожні комірки кодом, ґрунтуючись на вказівках. Такий підхід дозволяє одночасно навчити синтаксису мови програмування та найкращих практик кодування.

Якщо ви вже використовуєте Jupyter Notebook у наукових проєктах, то можете адаптувати їх і для навчання. Цей приклад навчального блокноту є поєднанням деяких педагогічних підходів, описаних вище. Перша частина блокноту призначена для студентів, які мають мало або взагалі не мають досвіду роботи з кодом; основна мета навчання — порівняти час, необхідний для ручного форматування даних, із часом, який займає виконання цього завдання за допомогою коду. Можна використати цей блокнот під час практичного лабораторного заняття в рамках вступного курсу з цифрових гуманітарних наук або цифрової історії, де всі студенти встановлюють Anaconda та вивчають основи роботи з Jupyter Notebook. Якщо у класі є як студенти без технічного досвіду, так і ті, хто раніше працював з Python, ви можете запропонувати студентам із досвідом програмування працювати в групах по двоє-троє, щоб запропонувати рішення для завдань у другій частині блокноту. Пам’ятайте, що якщо ви використовуєте таке завдання як спосіб залучити студентів до написання коду, який допомагає вашому дослідницькому проєкту, вони мають бути зазначені як співавтори і згадані у наступних публікаціях, що виходять із цього проєкту.

Є багато курсів та семінарів із цифрових гуманітарних наук, присвячених "Вступу до Python", які широко використовують Jupyter Notebooks. Наприклад, у рамках проєкту Python for Humanities від Carpentries Incubator створено навчальний курс з відкритим кодом, який орієнтований на гуманітаріїв без досвіду програмування. Курс охоплює роботу з даними у форматі CSV, основи бібліотеки pandas, візуалізацію даних за допомогою Matplotlib та bokeh, а також роботу з базами даних. Jupyter Notebooks також часто використовуються на семінарах із текстового аналізу, наприклад, на семінарі із векторного представлення слів на DH 2018, який проводили Юн Со Джо, Хав'єр де ла Роса та Скотт Бейлі.

Викладання з використанням Jupyter Notebooks не обов’язково має включати трудомісткий процес завантаження та встановлення Anaconda, особливо якщо планується провести лише один або два уроки, використовуючи блокноти. Якщо ваші навчальні завдання з Jupyter Notebooks містять приклади даних, які ви вже підготували, і якщо ви вже написали хоча б частину коду, можливо, варто дослідити можливість запуску Jupyter Notebooks, використовуючи безкоштовні ресурси хмарних обчислень, за умови, що студенти матимуть надійне інтернет-з’єднання в аудиторії. Запуск блокнотів у хмарі також забезпечує використання однакового середовища для всіх студентів, що позбавляє необхідності вирішувати питання різниці між Windows та Mac або надавати альтернативу студентам, чиїм ноутбукам бракує місця на диску або пам’яті для успішного запуску Anaconda.

Оскільки можливості швидко розвиваються, найкраще скористатися улюбленою пошуковою системою, щоб знайти оновлений список варіантів хмарних обчислень для Jupyter Notebooks. Один із проєктів, який набув популярності серед академічних користувачів ноутбуків, — це MyBinder, який використовує GitHub-репозиторій, що містить файли Jupyter Notebook (.ipynb), пов’язані дані (вбудовані зображення, набори даних, які ви хочете використовувати в ноутбуках тощо) та інформацію про необхідні пакети та складові (у файлі requirements.txt або environment.yml), і робить його доступним для запуску на хмарному сервері. Після того як ви налаштували GitHub-репозиторій для роботи з MyBinder, можна додати значок Binder у файл readme для репозиторію. Будь-хто, хто переглядає репозиторій, може запустити блокнот безпосередньо у браузері, без необхідності щось завантажувати чи встановлювати.

Оскільки дані, до яких блокнот повинен мати доступ, мають бути включені до репозиторію, цей метод не підходить для всіх ситуацій (наприклад, якщо дані не можна легально розповсюджувати на GitHub, вони перевищують максимальний розмір файлів GitHub або їх не можна завантажити з іншого джерела як частину налаштування середовища Binder, або якщо ви хочете, щоб користувачі використовували блокнот із власними даними), але це чудовий варіант для семінарів або занять, де всі працюють із тими самими, спільними даними.

Якщо ви хочете почати досліджувати хмарні варіанти, Shawn Graham створив кілька шаблонів для налаштування блокнотів Jupyter на Python і R для використання з Binder.

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

Перетворення наявного коду Python

Навіть якщо вам подобається ідея використання Jupyter Notebook, будь-яке перетворення формату вимагає додаткової роботи. Якщо ви вже маєте Python код, перетворення у формат Jupyter Notebook досить просте. Ви можете скопіювати та вставити код з вашого .py файлу в одну кодову комірку нового блокноту, а потім розділити цю комірку на сегменти та додати необхідні комірки формату Markdown.

Також, може бути зручніше розбивати код під час перенесення, копіюючи один сегмент за раз у нову комірку коду. Обидва методи працюють, і вибір методу залежить від особистих уподобань.

Також існують інструменти, такі як пакет p2j, які автоматично конвертують наявний код Python у формат Jupyter Notebook, дотримуючись задокументованого набору правил (наприклад, перетворюючи коментарі на комірки Markdown).

Jupyter Notebook та інші мови програмування

Jupyter Notebook дозволяє використовувати багато різних мов програмування, включаючи R, Julia, JavaScript, PHP або Ruby. Поточний список доступних мов можна знайти на сторінці Jupyter Kernels GitHub.

Хоча Python підтримується за замовчуванням при встановленні Jupyter Notebook через Anaconda, інші мови програмування потребують встановлення відповідних ядер мов, щоб їх можна було запускати в Jupyter Notebook. Інструкції з встановлення відрізняються для кожного ядра мови, тому найкраще просто знайти та дотримуватися інструкцій для мови, яка вам потрібна. Принаймні для R це відносно просто. На сторінці Jupyter Kernels GitHub є посилання на інструкції для всіх доступних ядер мов.

Після встановлення ядра для потрібної мови програмування ви можете запускати блокноти, написані цією мовою, або створювати власні для виконання коду такою мовою. Кожна мова з встановленим ядром буде доступною як опція при створенні нового блокнота, як описано вище.

Масштабування обчислень з використанням Jupyter Notebook

У випадку якщо ви тільки починаєте писати мовою Python, досягнення будь-якого результату може відчуватися як перемога. Проте, якщо почнете працювати з більшими наборами даних, можете виявити, що деякі з початкових “рішень”, які ви знайшли (наприклад, використання .readlines() для читання текстового файлу рядок за рядком), виявляються неефективними з точки зору обчислювань і можуть призводити до проблем. Один із способів, який допоможе побачити неефективність вашого коду — це додати %%timeit на початок комірки. Блокнот обере кількість ітерацій для виконання коду залежно від складності завдання та відобразить кількість ітерацій та середній час. Виконання кількох ітерацій, а не лише однієї, може допомогти врахувати невеликі затримки на рівні системи (наприклад, якщо ваш ноутбук тимчасово завантажений іншими процесами). Якщо ви хочете виміряти час виконання кількох ітерацій окремого рядка, а не всієї комірки, можете додати %timeit перед цим рядком. Будьте обережні з використанням цих команд: сортування списку займе значно більше часу на першій ітерації, ніж на другій, коли список вже буде впорядкований. У випадках, коли немає сенсу вимірювати кілька ітерацій, як-от сортування списків, або для довготривалих завдань, де незначні системні затримки не матимуть значного впливу, можна використовувати %%time на початку комірки або %time перед рядком, що вимірює час, який займає одне виконання. Ці команди є частиною вбудованих “магічних команд”, доступних у Jupyter Notebook; див. документацію Jupyter для отримання додаткової інформації.

Певне уявлення про те, як довго, ймовірно, виконуватиметься ваш код, є важливою передумовою для масштабування до більших обчислювальних ресурсів, таких як кластери високопродуктивних обчислень (HPC) з централізованим фінансуванням, які є у багатьох установах. Переважна більшість дослідників, які використовують ці ресурси, займаються наукою, але зазвичай будь-який викладач може подати запит на доступ. (Для українських дослідників доступ до європейських HPC-ресурсів через EuroHPC наразі обмежений через відсутність асоціації з відповідними програмами ЄС, проте існують спеціальні програми підтримки українських науковців.) Ці обчислювальні ресурси можуть суттєво прискорити виконання об'ємних завдань, особливо таких, як 3D-моделювання, скориставшись перевагами обчислювальних вузлів із потужними графічними процесорами (GPU). Освоєння HPC-кластерів — це тема достатньо велика для окремого курсу, проте Jupyter Notebook може допомогти спростити процес. Деякі науково-дослідні обчислювальні групи пропонують зручніші способи для дослідників запускати Jupyter Notebook з використанням ресурсів HPC-кластерів, і ви можете знайти безліч загальних посібників та прикладів для цього. Якщо у вас є доступ до ресурсів HPC, варто звернутися до IT-персоналу дослідницьких груп і дізнатися, як можна запускати ваші Jupyter Notebook на кластері, якщо ви не знаходите документації на їхньому вебсайті.

Підсумок

Від експериментування з кодом до документування робочих процесів, від педагогіки до наукових публікацій — Jupyter Notebook є гнучким, багатоцільовим інструментом, який може підтримувати цифрові дослідження в різних контекстах. Навіть якщо ви не впевнені, як саме будете їх використовувати, досить легко встановити програмне забезпечення Jupyter Notebook, завантажити та дослідити наявні блокноти або поекспериментувати зі створенням власних. Jupyter Notebook має великий потенціал для поєднання критичних і обчислювальних аспектів досліджень у цифрових гуманітарних науках. Наостанок, наведемо цитату з книги Джеда Допсона "Critical Digital Humanities: The Search for a Methodology":

Блокноти — це не лише код як теорія, а й сама теорія, що постає як уважне осмислення теоретичної роботи та наслідків коду. Дисциплінарні норми — зокрема подання контексту, теоретичний аналіз і критичне переосмислення власних підходів — мають супроводжувати, доповнювати й спрямовувати будь-яку комп’ютерну критику. Максимальне розкриття коду, даних і методів є необхідним для підтримання постійного фахового діалогу. Об’єднання цих елементів в одному об’єкті, який можна експортувати, поширювати, перевіряти й виконувати іншими, створює динамічний тип теоретизування, що є водночас модульним і тісно пов’язаним зі своїм предметом.

Посилання

Про авторів

Квінн Домбровскі — фахівець з академічних технологій у Департаменті літератур, культур і мов Стенфордського університету, працює над проєктами з цифрових гуманітарних наук для неангломовних аудиторій, ORCID; Тассі Ґнайді є менеджером інфраструктури для цифрових гуманітарних наук та креативної діяльності (CyberDH) в університеті Індіани, ORCID; Девід Клостер працює в групі CyberDH в Університеті Індіани як програміст/аналітик, ORCID.

Переклад українською: Мар’яна Юрків, доцент кафедри картографії та геопросторового моделювання Національного університету “Львівська політехніка”, ORCID; Анастасія Юрків, випускниця Львівського національного університету імені Івана Франка.

Переклад рецензували: Марія Мелешко-Судьїна, аспірантка, Центр сучасної та цифрової історії, Університет Люксембурга; Дмитро Марченко, кандидат технічних наук, завідувач кафедри картографії та геопросторового моделювання Національного університету "Львівська політехніка".

Рекомендоване цитування: Домбровскі, Квінн; Ґняди, Тассі та Клостер, Девід, "Вступ до Jupyter Notebooks", Programming Historian 8 (2019), переклали Мар’яна Юрків та Анастасія Юрків, Посібник з цифрової історії, 2025.

Last updated