Кафедра дискретной математики МФТИ

Курс математической статистики

Никита Волков

О Python и Jupyter Notebook

Почему Python?

Язык Python разрабатывался так, чтобы на нем можно было легко писать код. Вы потратите намного больше времени на код на C++, чем на питоновский код. Правда за это приходится платить низкой производительностью — программа на C++ будет в десятки раз быстрее, чем программа на Питоне. Но если вы пишете какой-нибудь простой исследовательский код, то тут вы потратите намного меньше времени и нервов, если напишете код на Питоне.

Так же на Питоне написано огромное количество библиотек для анализа данных (описание некоторых ниже) с очень хорошей документацией.

Для примера посмотрите, как просто можно написать код, который генерирует выборку размера 1000 из двумерного нормального распределения $\mathscr{N} \left( \begin{pmatrix} 1 \\ 1 \end{pmatrix}, \begin{pmatrix} 2 & 1 \\ 1 & 2 \end{pmatrix} \right)$, считает выборочное среднее и наносит точки на график.


In [1]:
# Импортируем всякие библиотеки
import numpy as np
from scipy.stats import multivariate_normal
import matplotlib.pyplot as plt

sample = multivariate_normal.rvs(mean=[1, 1], cov=[[2, 1], [1, 2]], size=1000)  # Генерация выборки
print(np.mean(sample, axis=0))  # Подсчет и печать среднего значения

# Рисуем график
plt.figure(figsize=(6, 3))  # Инициализируем график и задаем его размеры
plt.scatter(sample[:, 0], sample[:, 1], color='green', alpha=0.25, label='sample')  # Наносим точки выборки
plt.scatter(np.mean(sample[:, 0]), np.mean(sample[:, 0]), color='red')  # Наносим центр выборки
plt.legend()  # Ставим легенду
plt.show()  # Показываем график


[ 0.95374685  0.94759646]

Все еще сомневаетесь в простоте? Попробуйте написать такой же код на C++ или Java.

Python

В настоящее время широко распространены две версии Питона — Python 2 и Python 3. Эти версии похожи, но могут быть не совместимыми. То есть если у вас есть программа на Python 2, то она может не заработать на Python 3, и наоборот. В нашем курсе мы поддерживаем только Python 3, а именно версию 3.5. Это означает, что весь выдаваемый код будет корректно работать на этой версии. Почти весь код, который вы отправляете нам вместе с выполненной работе, мы не запускаем, поэтому использовать можно любую версию Питона. Однако, если в задании сказано, что код будет запускаться, то он должен корректно работать на Python 3.5.

Из операционных систем поддерживается только Ubuntu. Скорее всего больших проблем с Mac быть не должно. Конечно, вы можете использовать Windows, но можете и получить за это целый зоопарк проблем.

Если у вас Ubuntu, то Python скорее всего уже установлен. Попробуйте в терминале следующие команды для запуска интерактивного режима работы:

python или python3 или python2

Выход: Ctrl+D

Режим работы, в котором выполнится код из файла main.py

python main.py

Помощь: help(X), где X — то, по чему нужна помощь. Выход из помощи: q.

Обновить Питон, например, с версии 3.4 на 3.5 можно так https://gist.github.com/larainema/a05d2f28cc7d944da6f6

Установка Jupyter и дополнительных библиотек

Чтобы сохранить свое психическое здоровье, устанавливайте Jupyter Notebook на не слишком старых версиях Ubuntu или на Mac. Инструкция по установке находится тут: http://jupyter.readthedocs.org/en/latest/install.html

Ниже описана инстуркция по услановке для Ubuntu.

Прежде чем перейти к установке, рекомендуется обновить pip командой

sudo pip3 install --upgrade pip

Затем можно поставить Jupyter командой

sudo pip3 install jupyter

Так же вам понадобятся несколько достаточно распространенных библиотек, которые можно установить командой

sudo pip3 install numpy scipy matplotlib scikit-learn

Если вы хотите использовать Python 2 вместо Python 3, то везде пишите pip2 вместо pip3.

После установки запуск осуществляется командой

jupyter notebook

Через несколько секунд должна открыться страница в браузере со списком файлов. Если этого не произошло, перейдите по ссылке, которая будет указана при запуске. Обычно это http://localhost:8888/

Что делать, если пакет установлен, а Jupyter его не видит?

В этом случае ему нужно прописать путь до пакета. Для этого сначала откройте Питон в терминале и выполните (например, для пакета numpy):

import numpy

numpy

Напечатается путь, например, такой /usr/local/lib/python3.5/dist-packages/numpy/__init__.py. Теперь в Jupyter нужно написать такой код


In [2]:
import sys
sys.path.append('/usr/local/lib/python3.5/dist-packages/numpy')
import numpy

Онлайн Jupyter Notebook

Можно ничего не устанавливать и работать с сайтом https://try.jupyter.org/

На сайте можно создать новый файл (New -> Python 2/3) или загрузить файл с компьютера с помощью Upload.

Будьте внимательны! Сайт не сохраняет ваши файлы и удаляет их после закрытия страницы. Чтобы загрузить файл себе откройте его нажмите File -> Download as -> ipynb.

Можно так же пользоваться сервисом https://cloud.sagemath.com/, который немного тормознутый, но сохраняет все файлы.

Работа с Python в Jupyter Notebook

Чтобы создать новый файл, кликните New -> Python.

Ноутбук состоит из ячеек, которые бывают текстовыми (Markdown) и кодовыми (Code). Выбрать тип ячейки можно на панеле управления.

Работа с ячейками:

  • Выбор ячейки — нажмите на нее мышкой.
  • Редактирование — нажмите на нее два раза.
  • Запуск ячейки — `SHIFT+ENTER` или нажмите на кнопку на панеле.
  • Добавление новой ячейки — нажмите на кнопку на панеле.
  • Удаление ячейки — нажмите на кнопку на панеле.
  • Перемещение ячейки — нажмите на вертикальные стрелки.

Кодовые ячейки содержат в себе код на Python. Если код должен что-то печатать, то оно отобразится сразу под ячейкой. Перед каждой ячейкой с кодом есть обозначение In [N]:, которое означает, что код в этой ячейке выполнился $N$-ым по счету. В этой ячейке доступны все переменные предыдущих выполненных ячеек, даже если вы их удалите. Выполнение ячеек происходит в том порядке, в котором вы их запускаете, а не в том, в котором они расположены в ноутбуке. Чтобы перезагрузить ноутбук, стерев все данные в памяти, нажмите на restart. Чтобы сохранить ноутбук нажмите на панеле. Все отображаемые данные при этом сохраняться, включая вывод, но после перезагрузки среды (или загрузки в онлайн сервис) для дальнейшей работы придется заново произвести все вычисления.

Текстовые ячейки содержат в себе обычный текст, который может включать в себя формулы LaTeX и html-команды.

Щелкните два раза на эту ячейку, чтобы посмотреть, как работать с формулами $$\mathsf{E} \xi = \int \limits_{\Omega} \xi dP$$

Щелкните два раза на маркированный список выше, чтобы посмотреть, как работать с html.

Изучение Python

Кроме наших питон-ноутбуков можете воспользоваться также следующими ресурсами.

Python 2

http://habrahabr.ru/post/61905/ — учебник по Питону на Хабрахабре

http://www.learnpython.org/en/Welcome (англ.) — интерактивный учебник по Питону

https://www.youtube.com/playlist?list=PL8D9F8F5A09549859 — видеокурс по Питону

Python 3

https://try.jupyter.org/ далее "/communities/pyladies/Python 101.ipynb" (англ.) — основы Питон прямо в среде Jupyter. Для работы с Jupyter рекомендуется посмотреть даже тем, кто решил изучать Python 2.

https://ru.wikibooks.org/wiki/Python/%D0%A3%D1%87%D0%B5%D0%B1%D0%BD%D0%B8%D0%BA_Python_3.1 — викиучебник

http://pythontutor.ru/ — интерактивный учебник по Питону

Различия между Python 2 и Python 3 можете почитать тут http://pythonworld.ru/osnovy/python2-vs-python3-razlichiya-sintaksisa.html

Так же для работы с Jupyter полезно почитать https://try.jupyter.org/ далее "featured/pandas-cookbook/cookbook/A quick tour of IPython Notebook.ipynb" (англ.)

Помочь в изучении Питона поможет так же множество примеров в сети и документация Питона, которая вызывается так:


In [3]:
help(max)


Help on built-in function max in module builtins:

max(...)
    max(iterable, *[, default=obj, key=func]) -> value
    max(arg1, arg2, *args, *[, key=func]) -> value
    
    With a single iterable argument, return its biggest item. The
    default keyword-only argument specifies an object to return if
    the provided iterable is empty.
    With two or more arguments, return the largest argument.

Дополнительные библиотеки

NumPy — библиотека для работы с массивами и матрицами, в т.ч. матричные операции.

http://pythonworld.ru/numpy

http://habrahabr.ru/post/121031/

SciPy — для нас это в первую очередь модуль stats для работы со статистическими функциями. Полный список модулей можно посмотреть тут https://ru.wikipedia.org/wiki/SciPy#.D0.9C.D0.BE.D0.B4.D1.83.D0.BB.D0.B8

http://docs.scipy.org/doc/scipy/reference/stats.html (англ.) — полное описание модуля stats

Scikit-Learn — библиотека алгоритмов машинного обучения с множеством примеров и наборами данных. Она вам очень пригодится в курсе машинного обучения, но что-то (например, метод наименьших квадратов) может пригодиться уже сейчас.

http://scikit-learn.org/ (англ.) — очень подробное описание библиотеки

http://habrahabr.ru/company/mlclass/blog/247751/ — немного примеров на русском

Matplotlib — библиотека для визуализации данных

http://matplotlib.org/ (англ.)

http://matplotlib.org/gallery.html (англ.) — тысячи примеров

http://jenyay.net/Matplotlib/Matplotlib и http://pyviy.blogspot.ru/2009/09/matplotlib.html — хорошие описания на русском

Так же желающие могут изучить пакет Pandas для работы с табличными данными, но нам он скорее всего не понадобится.