Jupyter Notebook
Jupyter Notebook — интерактивная среда анализа: код, текстовые пояснения и графики в одном документе. Стандарт для data science и исследований.
1. Что такое Jupyter
Проект Jupyter объединяет Notebook (браузерный редактор) и JupyterLab (IDE с файлами, терминалом и панелями). Документ — файл .ipynb из ячеек:
- Code — исполняемый код с протоколом внизу.
- Markdown — текст, заголовки, формулы.
- Raw — вывод без обработки.
2. Установка
pip install jupyter
jupyter notebook # или: jupyter labАльтернатива — Anaconda/Miniconda с Jupyter сразу. Запуск — из командной строки в папке проекта.
3. Основные клавиши
| Действие | Клавиша |
|---|---|
| Новая ячейка | A (выше) / B (ниже) |
| Выполнить | Shift+Enter |
| Сменить тип (Code/MD) | M / Y |
| Удалить | D D |
| Сохранить | Ctrl+S |
4. Кернелы
Кернел — процесс, исполняющий код ячейки. В настройках можно выбрать Python, R, Julia и другие. При перезапуске кернела (Kernel → Restart) все переменные теряются — перезапуск обязателен после установки пакетов.
5. Markdown-ячейки
# Заголовок 1
## Заголовок 2
**жирный**, *курсив*, `код`
- пункт один
- пункт два
$$ x^2 + y^2 = r^2 $$ # формула LaTeXНажми Enter для редактирования, Shift+Enter для рендера.
6. Магические команды
%time sum(range(10**6)) # время
%%timeit sum(range(10**6)) # многократно
%lsmagic # список магий
!pip install pandas # команда ОС7. Графики в тетради
import matplotlib.pyplot as plt
# встраивание графиков в вывод ячейки
%matplotlib inline
plt.plot([1, 2, 3], [4, 2, 5])Теперь любой plt.plot появляется прямо под ячейкой. Для интерактивных графиков: %matplotlib widget.
8. Сохранение и экспорт
- File → Download as — HTML, PDF, Markdown, Python (.py).
- Версия тетради — JSON; сливать сложно — держи тетради как артефакты, а повторяемый код переноси в отдельные модули.
- Git: Git хранит .ipynb, но diff плохой — используй
nbstripoutдля очистки выходов перед коммитами.
9. JupyterLab
JupyterLab — следующая ступень: слева файловый менеджер, вкладки, терминал, несколько панелей одновременно. Частично запускается той же командой jupyter lab.
10. Лучшие практики
- Нумеруй разделы тетради (1.1, 1.2), чтобы находить логические блоки.
- Не оставляй тяжёлые расчёты без
%%time— всегда видно, где «тормозит». - Фиксируй версии пакетов:
pip freeze > requirements.txt.
np.random.seed) и перезапускай всё перед публикацией.11. Расширения и настройка окружения
Jupyter расширяется пакетами, которые добавляют панели, автодополнение и проверку кода. Для классического Notebook ставятся классические расширения, для JupyterLab — отдельные плагины:
pip install jupyter_contrib_nbextensions
jupyter contrib nbextension install --user
pip install jupyterlab-git jupyterlab-spellchecker- Table of Contents — автооглавление тетради по Markdown-заголовкам.
- Variable Inspector — все переменные и их типы в боковой панели.
- Spellchecker — проверка орфографии в текстовых ячейках.
jupyter notebook --generate-config создаст файл конфигурации для точной настройки поведения.12. Параметризация и автоматизация с Papermill
Papermill выполняет тетрадь «на автомате», подставляя параметры прямо в ячейку, помеченную тегом parameters. Это превращает тетрадь в переиспользуемый отчёт:
import papermill as pm
pm.execute_notebook("report.ipynb", "report_out.ipynb",
parameters={"period": "2026-02", "region": "msk"})Ячейка в тетради выглядит так: period = "2026-02", регион и период задаются извне, а остальной код не меняется.
13. Интерактивные виджеты
Библиотека ipywidgets добавляет слайдеры, кнопки и выпадающие списки прямо в тетрадь. Функция interact сама строит элементы управления по типам аргументов:
from ipywidgets import interact
@interact(a=(1, 100), b=(1, 100))
def multiply(a, b):
print(a * b)Вращая ползунки, ты мгновенно видишь результат — удобно исследовать порог, при котором модель меняет поведение:
interactive_output— связывает виджеты с вычислениями без обновления ячейки.HBox/VBox— выравнивание нескольких виджетов в ряд.jupyter-widgets/jupyterlab-manager— обязательное расширение JupyterLab.
14. Тетради в командной работе и в production
Тетрадь — JSON: диффы непонятны, а выходы раздувают историю. Комаандные практики сводятся к чистке и предсказуемости:
- Очищай выходы перед коммитом:
nbstripoutубирает вывод без ущерба коду. - Храни пару
.ipynb+.pyчерезjupytext— код ревьюится как обычный файл. - Запускай тетради в CI командой
nbconvert --executeи падай при ошибке.
| Задача | Инструмент |
|---|---|
| Очистка выходов перед коммитом | nbstripout |
| Удобные диффы и ревью | jupytext (.py) |
| Перезапуск всех ячеек | nbconvert --execute |
| Публикация отчётов без кода | Voilà |
os.getenv.15. Удалённый сервер и совместный доступ
Тетради удобно держать на сервере или в Docker и открывать их из любого браузера. Запуск на удалённой машине без локального GUI:
jupyter server --no-browser --ip=0.0.0.0 --port=8888При первом старте в консоли печатается токен — URL с ?token=… открывает тетрадь даже без пароля. Токены не любят разглашения: за туннелем наружу ты сразу отдашь доступ к процессу.
- Безопасный вариант — SSH-туннель:
ssh -L 8888:localhost:8888 user@server, браузер держит локальный адрес. - Для команды ставят JupyterHub — общий вход, изоляция пользователей по кернелам и своя папка у каждого.
- Альтернатива — образ
jupyter/docker-stacks: идеальные окружения для воспроизводимых экспериментов.
--ip=0.0.0.0 открытым в интернете без HTTPS и токена — это готовая точка входа злоумышленника в окружение с вычислениями.16. Отладка и профилирование кода
Ошибиться в тетради легко, а вот понять, где падает — сложнее. Среда даёт полноценный отладчик прямо в ячейке:
%debug # войти в отладчик после исключения
%pdb on # включать отладчик автоматически
%prun my_func() # профиль по вызовам функцийКоманды отладчика — как в pdb: n (следующий шаг), s (шаг внутрь), p var (печать значения), q (выход).
- Построчное профилирование:
%load_ext line_profiler+%lprun. - Использование памяти:
%load_ext memory_profilerи декоратор@profile. - Альтернатива — обернуть проблемный фрагмент в
try/except, но отладчик честнее.
%debug → осмотри локальные переменные на месте падения → исправь причину, а не симптом.17. Оформление отчётов: LaTeX и презентации
Markdown-ячейки и $…$ решают только простые формулы. Полноценные материалы собирают в документы:
pip install jupyter-book rise- Jupyter Book — тетради в единый сайт: оглавление, нумерация формул, библиография, экспорт в PDF через следующую команду сборки
jupyter-book build. - RISE — тетрадь сама становится презентацией: режим слайдов задаётся метаданными ячеек, переходы стрелками.
- nbconvert — эмбеддинг в HTML/PDF с параметрами через
--templateи--ExecutePreprocessor.
Формулы набираются стандартно: \frac{1}{n}\sum x_i, нумерованный вывод — \begin{equation}…\end{equation}.
18. Jupyter в VS Code и Google Colab
Тетради — кросс-инструментальный формат: один и тот же .ipynb открывается везде. Сравнение самых частых сред:
| Среда | Сильные стороны | Ограничения |
|---|---|---|
| JupyterLab | панели, расширения, локальный кернел | требует настройки сервера |
| VS Code | интеграция с Git, отладчик, IntelliSense | среда тяжелее, кернел настраивается через интерфейс |
| Google Colab | бесплатный GPU, общий чат-URL, готовые пакеты | лимиты времени, данные в облаке |
В VS Code тетрадь редактируется с автодополнением и дебагом; ячейки подсвечивают ошибки до запуска. Colab удобен для экспериментов и обучения, но не для работы с приватными данными.
19. Виртуальные окружения и изолированные ядра
Частый источник «разъехавшихся» ноутбуков — общее окружение: вчера обновили пакет, и старый эксперимент перестал запускаться. Для каждого проекта выделяйте отдельную среду и регистрируйте её как собственное ядро Jupyter.
conda create -n ml python=3.11
conda activate ml
python -m ipykernel install --user --name ml --display-name "ML 3.11"- Уникальный
--nameдаёт изолированное ядро: оно не сломает соседние проекты и не займёт лишнего места в панели запуска. - Фиксируйте зависимости:
pip freeze > requirements.txtилиconda env export. - После установки пакетов перезапускайте ядро — библиотеки читаются при старте сессии.
- Список доступных ядер проверяйте командой
jupyter kernelspec list.
environment.yml в репозиторий проекта: коллега воспроизведёт окружение одной командой и получит те же версии pandas и numpy.20. SQL прямо в тетради
Расширение ipython-sql превращает ячейку в SQL-консоль: вы не выходите из ноутбука, чтобы проверить гипотезу на данных.
pip install ipython-sql
%load_ext sql
%sql postgresql://user:pass@host:5432/db
%%sql
SELECT city, count(*) FROM orders GROUP BY city;- Результат запроса превращается в DataFrame:
result = %sql SELECT * FROM orders, затемdf = result.DataFrame(). - Передавайте параметры из Python через
:переменная— безопасно, без конкатенации строк. - Тяжёлые запросы выполняются на серверной БД, не таская данные в память ноутбука.
.env, иначе секреты уедут в git-историю вместе с тетрадью.21. Распараллеливание вычислений
Тетрадь не обязана быть однопоточным скриптом: независимые запуски (бутстрап, фолды кросс-валидации, сетка гиперпараметров) легко разносить по ядрам CPU.
from joblib import Parallel, delayed
scores = Parallel(n_jobs=8)(delayed(train)(fold) for fold in folds)- Для матричных операций numpy/scipy параллельность не нужна — там уже работает BLAS.
- Замеряйте эффект до и после: сравните вывод
%%timeна одной и той же ячейке. - Если задач мало, оставьте однопоточный вариант: оверхед на передачу данных между процессами съедает выигрыш.
multiprocessing: память на ядро умножается кратно числу процессов.22. Чек-лист воспроизводимого эксперимента
Ноутбук должен в любой момент вернуть результат, который повторит коллега или будущий вы. Соберите минимальный набор правил.
- Зафиксируйте версии Python и ключевых библиотек в requirements или lock-файле.
- Прокидывайте
random.seedиnumpy.random.seedв ячейках подготовки данных. - Откажитесь от абсолютных путей: данные лежат рядом с тетрадью.
- Параметры эксперимента храните в отдельной структуре (dataclass или конфиг), а не разбросанными по ячейкам.
Kernel → Restart & Run All. Это лучший тест на скрытые состояния и порядок выполнения.Что дальше
Весь стек анализа живет в Jupyter: Pandas, Matplotlib, Seaborn, Scikit-Learn.