{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "#### ФИВТ МФТИ\n", "\n", "#### Курс математической статистики\n", "\n", "Никита Волков (email, VK)\n", "\n", "# О Python и Jupyter Notebook\n", "\n", "Чтобы скачать этот файл, нажмите на кнопку в правом верхнем углу.\n", "\n", "\n", "## Почему Python?\n", "\n", "Язык Python разрабатывался так, чтобы на нем можно было легко писать код.\n", "Вы потратите намного больше времени на код на C++, чем на питоновский код.\n", "Правда за это приходится платить низкой производительностью — программа на C++ будет в десятки раз быстрее, чем программа на Питоне.\n", "Но если вы пишете какой-нибудь простой исследовательский код, то тут вы потратите намного меньше времени и нервов, если напишете код на Питоне.\n", "\n", "Так же на Питоне написано огромное количество библиотек для анализа данных (описание некоторых ниже) с очень хорошей документацией.\n", "\n", "Математикам, которые не любят писать код.\n", "Этот язык для вас!\n", "Вот посмотрите, как просто можно написать код, который генерирует выборку размера 1000 из двумерного нормального распределения $N \\left( \\begin{pmatrix} 1 \\\\ 1 \\end{pmatrix}, \\begin{pmatrix} 2 & 1 \\\\ 1 & 2 \\end{pmatrix} \\right)$, считает выборочное среднее и наносит точки на график." ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[ 1.01117655 0.99870022]\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Импортируем всякие библиотеки\n", "import numpy as np\n", "from scipy.stats import multivariate_normal\n", "import matplotlib.pyplot as plt\n", "\n", "sample = multivariate_normal.rvs(mean=[1, 1], cov=[[2, 1], [1, 2]], size=1000) # Генерация выборки\n", "print np.mean(sample, axis=0) # Подсчет и печать среднего значения\n", "\n", "# Рисуем график\n", "plt.figure(figsize=(6, 3)) # Инициализируем график и задаем его размеры\n", "plt.scatter(sample[:, 0], sample[:, 1], color='green', alpha=0.25, label='sample') # Наносим точки выборки\n", "plt.scatter(np.mean(sample[:, 0]), np.mean(sample[:, 0]), color='red') # Наносим центр выборки\n", "plt.legend() # Ставим легенду\n", "plt.show() # Показываем график" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Все еще сомневаетесь в простоте?\n", "Попробуйте написать такой же код на C++ или Java." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Работа с Python в терминале\n", "\n", "(О версиях Питона ниже)\n", "\n", "Набираем в терминале:\n", "\n", "`python main.py` или `python3 main.py` — режим работы, в котором выполнится код из файла main.py\n", "\n", "`python` или `python3` — интерактивный (онлайн) режим работы\n", "\n", "Выход: `Ctrl+D` (Unix) или `Ctrl+Z+Enter` (Windows).\n", "\n", "Помощь: `help(X)`, где `X` — то, по чему нужна помощь.\n", "Выход из помощи: `q`." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Установка Jupiter и дополнительных библиотек\n", "\n", "Чтобы сохранить свое психическое здоровье, устанавливайте Jupyter Notebook на не слишком старых версиях Ubuntu или на Mac.\n", "Инструкция по установке находится тут: http://jupyter.readthedocs.org/en/latest/install.html\n", "\n", "Использовать Anaconda рекомендуется только в крайних случаях.\n", "В Ubuntu обычно все ставится одной простой командой\n", "\n", "`pip install jupyter`\n", "\n", "Если при выполнении этой команды произошла ошибка, возможно требуются права суперюзера.\n", "Для этого в начало этой команды добавьте слово `sudo` и после нажатия Enter введите пароль.\n", "\n", "Так же вам понадобятся несколько достаточно распространенных библиотек, которые можно установить командой\n", "\n", "`pip install numpy scipy matplotlib scikit-learn`\n", "\n", "Если вы хотите использовать Python 3 вместо Python 2, то везде пишите `pip3` вместо `pip`.\n", "\n", "После установки запуск осуществляется командой\n", "\n", "`jupyter notebook`\n", "\n", "Через несколько секунд должна открыться страница в браузере со списком файлов.\n", "Если этого не произошло, перейдите по ссылке, которая будет указана при запуске.\n", "Обычно это http://localhost:8888/\n", "\n", "#### Что делать, если пакет установлен, а Jupyter его не видит?\n", "\n", "В этом случае ему нужно прописать путь до пакета.\n", "Для этого сначала откройте Питон в терминале и выполните (например, для пакета `numpy`):\n", "\n", "`import numpy`\n", "\n", "`numpy`\n", "\n", "Напечатается путь, например, такой `/usr/local/lib/python3.4/dist-packages/numpy/__init__.py`.\n", "Теперь в Jupyter нужно написать такой код" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import sys\n", "sys.path.append('/usr/local/lib/python3.4/dist-packages/numpy')\n", "import numpy" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Онлайн Jupiter Notebook\n", "\n", "Можно ничего не устанавливать и работать с сайтом https://try.jupyter.org/\n", "\n", "На сайте можно создать новый файл `(New -> Python 2/3)` или загрузить файл с компьютера с помощью `Upload`.\n", "\n", "Будьте внимательны!\n", "Сайт не сохраняет ваши файлы и удаляет их после закрытия страницы.\n", "Чтобы загрузить файл себе откройте его нажмите `File -> Download as -> ipynb`.\n", "\n", "Можно так же пользоваться сервисом https://cloud.sagemath.com/, который немного тормознутый, но сохраняет все файлы." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Работа с Python в Jupyter Notebook\n", "\n", "Чтобы создать новый файл, кликните New -> Python 2/3.\n", "\n", "Ноутбук состоит из ячеек, которые бывают текстовыми (Markdown) и кодовыми (Code).\n", "Выбрать тип ячейки можно на панеле управления.\n", "\n", "Работа с ячейками:\n", "" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Кодовые ячейки содержат в себе код на Python.\n", "Если код должен что-то печатать, то оно отобразится сразу под ячейкой.\n", "Перед каждой ячейкой с кодом есть обозначение `In [N]:`, которое означает, что код в этой ячейке выполнился $N$-ым по счету.\n", "В этой ячейке доступны все переменные предыдущих выполненных ячеек, даже если вы их удалите.\n", "Выполнение ячеек происходит в том порядке, в котором вы их запускаете, а не в том, в котором они расположены в ноутбуке.\n", "Чтобы перезагрузить ноутбук, стерев все данные в памяти, нажмите на `restart`.\n", "Чтобы сохранить ноутбук нажмите на панеле.\n", "Все отображаемые данные при этом сохраняться, включая вывод, но после перезагрузки среды (или загрузки в онлайн сервис) для дальнейшей работы придется заново произвести все вычисления." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Текстовые ячейки содержат в себе обычный текст, который может включать в себя формулы `LaTeX` и `html`-команды." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Щелкните два раза на эту ячейку, чтобы посмотреть, как работать с формулами\n", "$$\\mathsf{E} \\xi = \\int \\limits_{\\Omega} \\xi dP$$ " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Щелкните два раза на маркированный список выше, чтобы посмотреть, как работать с `html`." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Изучение Python\n", "\n", "В настоящее время широко распространены две версии Питона — Python 2 и Python 3.\n", "Эти версии похожи, но могут быть не совместимыми.\n", "То есть если у вас есть программа на Python 2, то она может не заработать на Python 3, и наоборот.\n", "\n", "Python 2\n", "\n", "http://habrahabr.ru/post/61905/ — учебник по Питону на Хабрахабре\n", "\n", "http://www.learnpython.org/en/Welcome (англ.) — интерактивный учебник по Питону\n", "\n", "https://www.youtube.com/playlist?list=PL8D9F8F5A09549859 — видеокурс по Питону\n", "\n", "Python 3\n", "\n", "https://try.jupyter.org/ далее \"`/communities/pyladies/Python 101.ipynb`\" (англ.) — основы Питон прямо в среде Jupyter. Для работы с Jupyter рекомендуется посмотреть даже тем, кто решил изучать Python 2.\n", "\n", "https://ru.wikibooks.org/wiki/Python/%D0%A3%D1%87%D0%B5%D0%B1%D0%BD%D0%B8%D0%BA_Python_3.1 — викиучебник\n", "\n", "http://pythontutor.ru/ — интерактивный учебник по Питону\n", "\n", "Различия между Python 2 и Python 3 можете почитать тут http://pythonworld.ru/osnovy/python2-vs-python3-razlichiya-sintaksisa.html\n", "\n", "Так же для работы с Jupyter полезно почитать https://try.jupyter.org/ далее \"`featured/pandas-cookbook/cookbook/A quick tour of IPython Notebook.ipynb`\" (англ.)\n", "\n", "Помочь в изучении Питона поможет так же множество примеров в сети и документация Питона, которая вызывается так:" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Help on built-in function max in module builtins:\n", "\n", "max(...)\n", " max(iterable[, key=func]) -> value\n", " max(a, b, c, ...[, key=func]) -> value\n", " \n", " With a single iterable argument, return its largest item.\n", " With two or more arguments, return the largest argument.\n", "\n" ] } ], "source": [ "help(max)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Дополнительные библиотеки\n", "\n", "NumPy — библиотека для работы с массивами и матрицами, в т.ч. матричные операции.\n", "\n", "http://pythonworld.ru/numpy\n", "\n", "http://habrahabr.ru/post/121031/\n", "\n", "SciPy — для нас это в первую очередь модуль `stats` для работы со статистическими функциями. Полный список модулей можно посмотреть тут\n", "https://ru.wikipedia.org/wiki/SciPy#.D0.9C.D0.BE.D0.B4.D1.83.D0.BB.D0.B8\n", "\n", "http://docs.scipy.org/doc/scipy/reference/stats.html (англ.) — полное описание модуля `stats`\n", "\n", "Scikit-Learn — библиотека алгоритмов машинного обучения с множеством примеров и наборами данных.\n", "Она вам очень пригодится в курсе машинного обучения, но что-то (например, метод наименьших квадратов) может пригодиться уже сейчас.\n", "\n", "http://scikit-learn.org/ (англ.) — очень подробное описание библиотеки\n", "\n", "http://habrahabr.ru/company/mlclass/blog/247751/ — немного примеров на русском\n", "\n", "Matplotlib — библиотека для визуализации данных\n", "\n", "http://matplotlib.org/ (англ.)\n", "\n", "http://matplotlib.org/gallery.html (англ.) — тысячи примеров\n", "\n", "http://jenyay.net/Matplotlib/Matplotlib и http://pyviy.blogspot.ru/2009/09/matplotlib.html — хорошие описания на русском\n", "\n", "Так же желающие могут изучить пакет Pandas для работы с табличными данными, но нам он скорее всего не понадобится." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.4.0" } }, "nbformat": 4, "nbformat_minor": 0 }