Додаток C — Основи Jupyter Notebook

Jupyter Notebook — це веб додаток для інтерактивних обчислень. Для його запуску необхідно в консолі перейти в потрібну папку і виконати команду jupyter notebook. Після цього відкриється веб сторінка, де будуть відображатися файли тієї директорії, звідки була запущена команда. Файли Юпітера, які також називаються зошитами, мають розширення ipynb. При натисканні на такий файл він відкривається в інтерактивному режимі.

Кожен окремий файл представляє веб сторінку, яка складається з комірок. Кожна комірка може бути двох видів: 1. Markdown або 2. Code.

C.1 Комірка Markdown

Як можна здогадатися з назви в Markdown осередках можна створювати текст в markdown форматі. Підтримуються різні способи форматування, які можна подивитися за посиланням. Текст, який ви зараз читаєте, також знаходиться в markdown клітинці.

Крім форматування тексту також підтримується можливість створення математичних формул за допомогою LaTex. Формулу можна вбудувати в текст (наприклад, \(e^{i\pi}=-1\)) або створити в окремому рядку:

\[e^x=\sum_{k=0}^\infty \frac{x^k}{k!}\]

Для редагування тексту в markdown осередку необхідно два рази клікнути по ній.

C.2 Комірка Code

Наступна комірка є Сode осередком і в ній можна писати код і виконувати його. Для виконання коду необхідно натиснути Ctrl + Enter(виконати і залишитися в поточній комірці) або Shift + Enter (виконати і перейти в наступну комірку)

import numpy as np # імпортуємо бібліотеку

Якщо останній рядок коду повертає яке-небудь значення, то воно відображається відразу після комірки

np.random.rand(10) # генеруємо випадкові значення
array([0.66066316, 0.72739371, 0.52981988, 0.49703974, 0.48385109,
       0.12894506, 0.13740195, 0.81722274, 0.05088196, 0.9682992 ])

C.3 Автодоповнення та робота з документацією

Для автодоповнення можна використовувати клавішу <TAB > після точки або всередині дужки при виклику функції. При цьому вийде список доступних варіантів, які можна вибрати, щоб автоматично доповнити код. Можете спробувати автодоповнення поставивши курсор після np.random.<TAB>.

В Jupyter є кілька способів викликати документацію. Перший спосіб це використовувати поєднання клавіш Shift + Tab. Другий спосіб поставити знак ? після необхідного модуля

np?
Type:        module
String form: <module 'numpy' from 'c:\\Users\\Andrii\\anaconda3\\Lib\\site-packages\\numpy\\__init__.py'>
File:        c:\users\andrii\anaconda3\lib\site-packages\numpy\__init__.py
Docstring:  
NumPy
=====

Provides
  1. An array object of arbitrary homogeneous items
  2. Fast mathematical operations over arrays
  3. Linear Algebra, Fourier Transforms, Random Number Generation

How to use the documentation
----------------------------
Documentation is available in two forms: docstrings provided
with the code, and a loose standing reference guide, available from
`the NumPy homepage <https://numpy.org>`_.

We recommend exploring the docstrings using
`IPython <https://ipython.org>`_, an advanced Python shell with
TAB-completion and introspection capabilities.  See below for further
instructions.

The docstring examples assume that `numpy` has been imported as ``np``::

  >>> import numpy as np

Code snippets are indicated by three greater-than signs::

  >>> x = 42
  >>> x = x + 1

Use the built-in ``help`` function to view a function's docstring::

  >>> help(np.sort)
  ... # doctest: +SKIP

For some objects, ``np.info(obj)`` may provide additional help.  This is
particularly true if you see the line "Help on ufunc object:" at the top
of the help() page.  Ufuncs are implemented in C, not Python, for speed.
The native Python help() does not know how to view their help, but our
np.info() function does.

To search for documents containing a keyword, do::

  >>> np.lookfor('keyword')
  ... # doctest: +SKIP

General-purpose documents like a glossary and help on the basic concepts
of numpy are available under the ``doc`` sub-module::

  >>> from numpy import doc
  >>> help(doc)
  ... # doctest: +SKIP

Available subpackages
---------------------
lib
    Basic functions used by several sub-packages.
random
    Core Random Tools
linalg
    Core Linear Algebra Tools
fft
    Core FFT routines
polynomial
    Polynomial tools
testing
    NumPy testing tools
distutils
    Enhancements to distutils with support for
    Fortran compilers support and more  (for Python <= 3.11).

Utilities
---------
test
    Run numpy unittests
show_config
    Show numpy build configuration
matlib
    Make everything matrices.
__version__
    NumPy version string

Viewing documentation using IPython
-----------------------------------

Start IPython and import `numpy` usually under the alias ``np``: `import
numpy as np`.  Then, directly past or use the ``%cpaste`` magic to paste
examples into the shell.  To see which functions are available in `numpy`,
type ``np.<TAB>`` (where ``<TAB>`` refers to the TAB key), or use
``np.*cos*?<ENTER>`` (where ``<ENTER>`` refers to the ENTER key) to narrow
down the list.  To view the docstring for a function, use
``np.cos?<ENTER>`` (to view the docstring) and ``np.cos??<ENTER>`` (to view
the source code).

Copies vs. in-place operation
-----------------------------
Most of the functions in `numpy` return a copy of the array argument
(e.g., `np.sort`).  In-place versions of these functions are often
available as array methods, i.e. ``x = np.array([1,2,3]); x.sort()``.
Exceptions to this rule are documented.

C.4 Magic команди

Jupyter підтримує набір так званих “чарівних” (magic) команд. Це різні корисні команди, які не є частиною Python. Всі ці команди починаються з %.

Можна безпосередньо завантажити вміст зовнішнього файлу в комірку за допомогою команди %load

# %load code/magic_example.py
def square(x): # ініціалізуємо функцію знаходження квадрату вхідного значення
    """
    Squares given number
    """
    return x ** 2 # повертаємо значення


print(square(42)) # виводимо результат
1764

З корисних команд також можна відзначити команду %timeit, яка виконує код багато разів і виводить середній час виконання коду

%timeit L = [n ** 2 for n in range(1000)]
377 µs ± 21.4 µs per loop (mean ± std. dev. of 7 runs, 1,000 loops each)

Список усіх magic команд можна подивитися окремою командою %lsmagic.

C.5 Робота з графікою

У Python є багато бібліотек для візуалізації даних. Більшість з них інтегруються з Jupyter і відображають графіки.

import matplotlib.pyplot as plt # імпортуємо бібліотеку

# вбудовуємо виведені рисунки в юпітеровський ноутбук
%matplotlib inline

plt.plot([1, 4], [1, 4]); # виводимо лінію за двома точками

Або будуємо декілька графіків:

all_data = [np.random.normal(0, std, size=100) for std in range(1, 4)] # генеруємо список значень із нормального розподілу
labels = ['x1', 'x2', 'x3'] # ініціалізуємо список міток

fig, axes = plt.subplots(nrows=1, ncols=2, figsize=(9, 4)) # ініціалізуємо об'єкт матриці рисунків

# прямокутна коробчаста діаграма
bplot1 = axes[0].boxplot(all_data,
                         vert=True,  # вертикальне вирівнювання
                         patch_artist=True,  # заповнити кольором
                         labels=labels)  # використовується для позначення підписів на вісі x
axes[0].set_title('Прямокутна діаграма') # встановлюємо титулку для першого рисунку

# побудова коробчастої діаграми з виїмкою
bplot2 = axes[1].boxplot(all_data,
                         notch=True,
                         vert=True,  # вертикальне вирівнювання
                         patch_artist=True,  # заповнити кольором
                         labels=labels)  # використовується для позначення підписів на вісі x
axes[1].set_title('Прямокутна діаграма з виїмкою') # встановлюємо титулку для другого рисунку

# заповнити кольорами
colors = ['pink', 'lightblue', 'lightgreen']
for bplot in (bplot1, bplot2):
    for patch, color in zip(bplot['boxes'], colors):
        patch.set_facecolor(color)

# додати сітку з горизонтальних ліній
for ax in axes:
    ax.yaxis.grid(True)
    ax.set_xlabel('Три відокремлений зразки')
    ax.set_ylabel('Спостережувані значення')

Або тривимірну графіку:

from mpl_toolkits.mplot3d import Axes3D
from matplotlib import cm
from matplotlib.ticker import LinearLocator, FormatStrFormatter
import numpy as np

fig = plt.figure(figsize=(10, 10)) # ініціалізуємо об'єкт рисунок
ax = fig.add_subplot(projection='3d') # додаємо до об'єкту тривимірне представлення

# ініціалізуємо дані
X = np.arange(-5, 5, 0.25)
Y = np.arange(-5, 5, 0.25)
X, Y = np.meshgrid(X, Y) # заповнюємо поверхню значеннями за двома вісями
R = np.sqrt(X**2 + Y**2)
Z = np.sin(R) # ініціалізуємо значення по вісі Oz

# будуємо поверхню
surf = ax.plot_surface(X, Y, Z, cmap=cm.coolwarm) # будуємо тривимірну поверхню по заданим значенням

ax.set_zlim(-1.01, 1.01) # встановлюємо границі по вісі Oz
ax.zaxis.set_major_locator(LinearLocator(10)) # встановлюємо 10 граничних ліній по вісі Oz
ax.zaxis.set_major_formatter(FormatStrFormatter('%.02f')) # визначаємо формат виведення значень

C.6 Інші можливості

Для Jupyter Notebook було створено велику кількість плагінів. Наприклад, можна вбудовувати відео з youtube:

from IPython.display import YouTubeVideo
YouTubeVideo('kjBOesZCoqc')

Або інтерактивні карти (дана комірка відобразиться тільки якщо у вас встановлений folium. Якщо у вас нічого не відображається, то можете пропустити даний приклад, він далі не знадобиться)

Встановити необхідну бібліотеку можна через команду pip install назва бібліотеки, яку варто прописати в консолі, як представлено в прикладі нижче:

Або, як варіант, можна прописати команду прямо в комірці середовища Jupyter Notebook, як представлено в прикладі нижче:

!pip install folium
import folium
m = folium.Map(zoom_start=12, location=[47.89829743895897, 33.36626740165739])
m
Make this Notebook Trusted to load map: File -> Trust Notebook

Або вбудувати будь-який інший шматок HTML за допомогою магічної команди %%html. Нижче наведено приклад вбудовування посту з Твіттеру:

%%html
<blockquote class="twitter-tweet" data-lang="en"><p lang="en" dir="ltr">Replace &quot;AI&quot; with &quot;matrix multiplication &amp; gradient descent&quot; in the calls for &quot;government regulation of AI&quot; to see just how absurd they are</p>&mdash; Ben Hamner (@benhamner) <a href="https://twitter.com/benhamner/status/892136662171504640?ref_src=twsrc%5Etfw">July 31, 2017</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

C.7 Гарячі клавіші

Багато дій можна виконати за допомогою так званих гарячих клавіш. Список гарячих клавіш можна знайти в меню Help - Keyboard shortcuts. Нижче наведено список найбільш корисних поєднань:

Ключ Опис
Esc вийти з режиму редагування та виділити поточну комірку
Enter перейти в режим редагування поточної комірки
Ctrl+S, S зберегти файл
Ctrl+Enter виконати код і залишитися в поточній комірці
Shift + Enter виконати код і перейти в наступну клітинку
Shift + Tab виводить спливаюче вікно з документацією
a додати комірку згори (above)
b додати комірку знизу (below)
c скопіювати комірку
v вставити скопійовану клітинку
dd видалити комірку
z скасування останньої дії