Jupyter Notebook -- это удобно!

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


In [18]:
print(math.sqrt(4))


2.0

In [17]:
import math

К коду можно добавлять пояснения в ячейках с режимом markdown. Поддерживается различное форматирование: bold, italic, $\LaTeX$

заголовки

различного

уровня

  • списки
    • в
    • том
      • числе
        • и
          • вложенные

HTML

картиночки

И многое дугое...

Для некоторых объектов доступно особое отображение.


In [4]:
import numpy as np
np.array([[1,2,3],[4,5,6],[7,8,9]])


Out[4]:
array([[1, 2, 3],
       [4, 5, 6],
       [7, 8, 9]])

Горячие клавиши

Использование горячих клавиш позволяет очень мильно облегчить и ускорить работу с любой программой, особенно связанной со вводом текста. В плане горячих клавиш очень продвинутым является текстовый редактор vim. В нем существует отдельный режим, мозволяющий пользоваться горячими клавишами. В Jupyter notebook поддерживается та же концепция.

Существуют 2 режима работы: режим ввода и командный режим. Режим ввода отображается зеленой рамкой вокруг активной ячейки, командный режим -- синей. Для того, чтобы переключиться из режима ввода в командный режим необходимо нажать Esc, переход в режим редактирования осуществляется по нажатию клавиши Enter.

В командном режиме часто используются следующие горячие клавиши:

  • b -- вставить пустую ячейку после текущей
  • a -- вставить пустую ячейку перед текучей

  • c -- копировать текущую ячейку
  • x -- вырезать ячейку
  • v -- вставить ячейку из буфера после текущей

  • dd -- удалить текущую ячейку
  • z -- отменить предыдущее действие (в юпитере не последней версии можно отменить ТОЛЬКО ОДНО действие)

  • m -- перевести ячейку в режим Markdown
  • y -- перевести ячейку в режим кода
  • l -- отображать номера строк
  • o -- скрыть/показать вывод текущей ячейки

  • ii -- остановить выполнение текущей ячейки
  • 00 -- перезагрузить ядро
  • s -- сохранить notebook

  • h -- Показать справку по горячим клавишам

Некоторые сочетания используются в режиме редактирования:

  • Tab (в начале строки либо для выделенных строк) -- добавить отступ
  • Shift+Tab (в начале строки либо для выделенных строк) -- убрать отступ

  • Tab -- автодополнение вводимой команды
  • Shift+Tab -- показать docstring введеннной команды

  • Clrl+/ -- закомментировать выделеные строки

  • Shift+Enter -- выполнить текущую ячейку кода и перейти к следующей
  • Ctrl+Enter -- выполнить текущую ячейку кода и остаться на ней
  • Alt+Enter -- выполнить текущую ячейку кода и создать новую

Также Jupytr Notebook имеет большое количество встроенных "магических" функций. С некоторыми познакомимся в этом курсе, про другие стоит рассказать сразу.

Выполнение bat/bash комманд:


In [5]:
!dir


 Том в устройстве C не имеет метки.
 Серийный номер тома: EE02-B71B

 Содержимое папки C:\Users\Teacher\Desktop\PythonNP\materials\week1

20.03.2018  13:42    <DIR>          .
20.03.2018  13:42    <DIR>          ..
20.03.2018  13:42    <DIR>          .ipynb_checkpoints
20.03.2018  11:05           789 151 IPython intro.ipynb
02.03.2018  17:28            67 497 lena.jpg
20.03.2018  12:53            12 164 е1.ipynb
               3 файлов        868 812 байт
               3 папок  135 433 506 816 байт свободно

Замер времени выполнения кода

Измерение времени выполнения ячейки кода:


In [22]:
%%time
a = 352e+11
for i in range(10000):
    a = math.sin(a)


Wall time: 0 ns

Время выполнения конкретной строки из блока


In [23]:
%time a = 352e+10
for i in range(1000):
    a = math.sin(a)


Wall time: 0 ns

Замер времени выполнения в цикле


In [24]:
%timeit a = 352e+10
for i in range(1000):
    a = math.sin(a)


18.5 ns ± 0.252 ns per loop (mean ± std. dev. of 7 runs, 100000000 loops each)

Построение графиков и вывод изображений


In [10]:
import matplotlib.pyplot as plt
%matplotlib inline

In [11]:
a = np.linspace(-50, 50, 10000)
b = np.sin(a)/a

plt.figure(figsize=(10,8))
plt.plot(a, b, label=r"$\frac{sin(x)}{x}$")
plt.legend()
plt.title(r'$f(x) = \frac{sin(x)}{x}$')
plt.xlabel('x')
plt.ylabel('f(x)');



In [26]:
from sklearn.datasets import make_classification
X, y = make_classification(n_features=2, n_redundant=0)
plt.figure(figsize=(10,8))
plt.scatter(X[:,0], X[:,1], c=y, marker='+')
plt.title("Classification problem");



In [44]:
lenna = plt.imread("lena.jpg")
plt.figure(figsize=(10,10))
plt.imshow(lenna)
plt.title("image")
plt.figure(figsize=(10,10))
plt.title("histograms")
plt.subplot(2,2,1)
plt.hist((lenna[:,:,0]*0.3+lenna[:,:,2]*0.59+lenna[:,:,2]*0.11).reshape(-1), 
         bins = 256, color="black")
plt.subplot(2,2,2)
plt.hist(lenna[:,:,0].reshape(-1), color="red", bins = 256)
plt.subplot(2,2,3)
plt.hist(lenna[:,:,1].reshape(-1), color="green", bins = 256)
plt.subplot(2,2,4)
plt.hist(lenna[:,:,2].reshape(-1), color="blue", bins = 256);


Интерактивные графики


In [27]:
from ipywidgets import interactive, widgets

In [28]:
def func(a,b,delta):
    plt.figure(figsize=(8,8))
    plt.title('Lissajous curves')
    t = np.linspace(0,100,10000)
    x = np.sin(a*t+delta)
    y = np.sin(b*t)
    plt.plot(x,y)
    plt.show()

interactive(func,a=(0., 3., .01), b=(0., 3., .01), delta=(0., np.pi, .01))



In [ ]: