{ "cells": [ { "cell_type": "markdown", "metadata": { "collapsed": true, "pycharm": { "name": "#%% md\n" } }, "source": [ "# Jupyter блокноты\n", "\n", "Исторически, первый проект в сторону появления блокнотов — IPython, это более удобная консоль для работы в Python.\n", "Jupyter блокнот — набор ячеек двух видов, ячейки с текстом и ячейки с кодом на Python. Ячейки с текстом содержат форматированный код (формат Markdown), ячейки с кодом можно выполнить, причем переменные, созданные в одной ячейке, доступны во всех остальных.\n", "Зачем нужны такие блокноты:\n", " - интерактивные вычисления, т.е. можно дописывать код по одной строчке, исправлять вычисления, исследовать данные. Данные постоянно хранятся в памяти, это полезно особенно, если данные большие, их хочется один раз загрузить, а потом исследовать по чуть-чуть.\n", " - удобно для обучения, хорошо подходит для конспекта по Python, по обработке данных и т.п.\n", " - удобно для статей в Интернете" ] }, { "cell_type": "code", "execution_count": 12, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "4\n" ] } ], "source": [ "x = 2 + 2\n", "print(x)" ], "metadata": { "collapsed": false, "pycharm": { "name": "#%%\n" } } }, { "cell_type": "code", "execution_count": null, "outputs": [], "source": [ "print(x * x)" ], "metadata": { "collapsed": false, "pycharm": { "name": "#%%\n" } } }, { "cell_type": "code", "execution_count": 6, "outputs": [], "source": [ "# читаем в память весь файл (http.pdf — только для примера)\n", "with open('http.pdf', mode='rb') as f:\n", " pdf = f.read()\n" ], "metadata": { "collapsed": false, "pycharm": { "name": "#%%\n" } } }, { "cell_type": "code", "execution_count": 9, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "b'%PDF-1.5\\n%'\n" ] } ], "source": [ "print(pdf[:10])" ], "metadata": { "collapsed": false, "pycharm": { "name": "#%%\n" } } }, { "cell_type": "code", "execution_count": 10, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "366312\n" ] } ], "source": [ "# можем узнать размер файла, повторное чтение не нужно\n", "print(len(pdf))" ], "metadata": { "collapsed": false, "pycharm": { "name": "#%%\n" } } }, { "cell_type": "markdown", "source": [ "## Возможности\n", "### текстовые ячейки:\n", "\n", "(формат Markdown)\n", "\n", "Заголовки — несколько диезов в начале строки. Выделение курсивом, _обрамляем текст подчеркиваниями_ или *звездочками*. Жирный — обрамляем __двойными подчеркиваниями__ или **двойными звездочками**.\n", "\n", "Нумерованные списки:\n", "1. первый элемент\n", "2. второй элемент\n", "3. третий элемент\n", "\n", "Нерумерованный:\n", "* звездочками\n", "* второй элемент\n", "* третий элемент с подэлементами\n", " 1. делаем отступ (4 пробела)\n", " 2. можно вставить нумерованный список\n", "* продолжается ненеумерованный список\n", "\n", "Неформатированный текст (часто код), тройная обратная кавычка в начале и конце\n", "```\n", "Это неформатированный текст\n", "```\n", "или отступ 4 пробела\n", "\n", " неформатированный текст\n", " еще неформатированный текст\n", "\n", "конец\n", "\n", "Есть другие возможности.\n", "\n", "### Возможности в ячейчках с кодом\n", "У ячеек с кодом есть вывод, туда выводится то, что получилось после запуска кода в ячейке. Обычно там текст, который получается при печати из print(), но могут быть и более интересные объекты:" ], "metadata": { "collapsed": false, "pycharm": { "name": "#%% md\n" } } }, { "cell_type": "markdown", "source": [], "metadata": { "collapsed": false, "pycharm": { "name": "#%% md\n" } } }, { "cell_type": "code", "execution_count": 11, "outputs": [ { "data": { "text/plain": "[]" }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" }, { "data": { "text/plain": "
", "image/png": "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\n" }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "from matplotlib.pyplot import plot\n", "plot([10, 20, 30], [30, 10, 20], 'ro')" ], "metadata": { "collapsed": false, "pycharm": { "name": "#%%\n" } } }, { "cell_type": "markdown", "source": [ "## Файл с блокнотом\n", "\n", "Блокноты хранятся в файлах ipynb (от IPython notebook). Эти файлы содержат всю информацию о содержимом клеточек и __содержимое вывода__ в клеточках с кодом. Т.е. чтобы просмотреть блокнот, не обязательно запускать в нём код, результат выполнения кода сохраняется. Поэтому, Github, например, показывает ipynb файлы.\n", "\n", "## Ядро\n", "Ядро — это процесс в операционной системе, т.е. запущенная программа, которая выполняет код из ячеек и хранит значения переменных. Ядро надо запускать, его можно останавливать, можно перерывать, если оно зависло в процессе вычислений, можно перезапускать. После перезапуска значения переменных пропадают.\n", "\n", "Ядра в Jupyter бывают не только для Python, поэтому название технолгии и изменилось с IPython на Jupyter (Julia + Python + R), сейчас IPyhton — это название Python ядра. Поэтому такое же интерактивное программирование с блокнотами можно делать и на других языках: Java, ...\n", "\n", "## Работа с Jupyter блокнотами\n", "\n", "Все не так просто. Если вы хотите работать с блокнотами на своей компьютере, т.е. запускать ядро на своем компьютере, необходимо установить Python + библиотеку Jupyter + некоторые другие библиотеки. После этого вы запускаете ядро, оно при запуске говорит, как к нему можно подключиться, показывает ссылку для браузера. Т.е. пользовательский интефрейс сделан в Web. Такая установка может быть не очень простой.\n", "\n", "Другой вариант — можно установить Anaconda [https://www.anaconda.com](https://www.anaconda.com), это еще один дистрибутив Python, у него есть пользовательский интерфейс, чтобы запускать блокноты одной кнопкой.\n", "\n", "Третий вариант — через PyCharm (IDEA), она сама предложит установить пакет Jupyter. Работа с ipynb возможна только в коммерческих версиях. (PyCharm Community — не подходит). Используйте академическую лицензию.\n", "\n", "Онлайн блокноты:\n", "- Google collab: [https://colab.research.google.com](https://colab.research.google.com)\n", "- Kaggle блокноты\n", "- Datalore [https://datalore.jetbrains.com](https://datalore.jetbrains.com)\n", "\n", "У онлайн блокнотов есть ограничения, самое неприятное — ядра долго не живут, через какое-то время неактивности их надо перезапускать.\n", "\n", "Есть много других сервисов для разной работы с блокнотами...\n" ], "metadata": { "collapsed": false, "pycharm": { "name": "#%% md\n" } } } ], "metadata": { "kernelspec": { "name": "python3", "language": "python", "display_name": "Python 3 (ipykernel)" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", "version": "2.7.6" } }, "nbformat": 4, "nbformat_minor": 0 }