Jupyter Notebooks

jupyter

Τι είναι το Project Jupyter;

Το Project Jupyter είναι ένας μη κερδοσκοπικός οργανισμός που δημιουργήθηκε με σκοπό την ανάπτυξη λογισμικού ανοιχτού κώδικα, ανοιχτών προτύπων και υπηρεσιών για διαδραστικούς υπολογιστές σε δεκάδες γλώσσες προγραμματισμού. Ένα από τα προγράμματα που ανέπτυξαν και υποστηρίζουν είναι το Jupyeter Notebooks.


Πώς να εγκαταστήσω το Jupyter στο μηχάνημα μου;

Linux

Arch linux

Στα arch linux απλός εκτελέστε το εξής:

In [ ]:
!yes | sudo pacman -S jupyter-notebook python-ipykernel

Προσοχή, μην κάνετε αντιγραφή τον χαρακτήρα !

Ubuntu linux

Στα ubuntu linux εκτελέστε τα εξής:

In [ ]:
%%bash
sudo apt install python3-pip python3-dev
pip install jupyter

Πώς να κάνω πιο προσβάσιμο το Jupyter;

Για να εκτελέσουμε το Jupyter θα πρέπει να το εκτελέσουμε από τη γραμμή εντολών.

In [ ]:
!jupyter lab

ή

In [ ]:
!jupyter lab & disown %jupyter

και για να το κλείσουμε

In [ ]:
!pkill jupyter

Windows

Μπορείτε να ακολουθήσετε αυτόν τον οδηγό.

Μπορείτε να το κατεβάσετε με το anacoda, conda ή pip.

In [ ]:
!pip install jupyter

Kernels

Οι πυρήνες είναι τα προγράμματα που εκτελούν τον κώδικα.


Shortcuts

  • Ctrl + Enter: Run Cell
  • Shift + Enter: Run Cell and Select Below
  • Alt + Enter: Run Cell and Insert Below

Magics

  • lsmagic
  • matplotlib inline
  • html
  • bash
In [1]:
%lsmagic
Out[1]:
Available line magics:
%alias  %alias_magic  %autoawait  %autocall  %automagic  %autosave  %bookmark  %cat  %cd  %clear  %colors  %conda  %config  %connect_info  %cp  %debug  %dhist  %dirs  %doctest_mode  %ed  %edit  %env  %gui  %hist  %history  %killbgscripts  %ldir  %less  %lf  %lk  %ll  %load  %load_ext  %loadpy  %logoff  %logon  %logstart  %logstate  %logstop  %ls  %lsmagic  %lx  %macro  %magic  %man  %matplotlib  %mkdir  %more  %mv  %notebook  %page  %pastebin  %pdb  %pdef  %pdoc  %pfile  %pinfo  %pinfo2  %pip  %popd  %pprint  %precision  %prun  %psearch  %psource  %pushd  %pwd  %pycat  %pylab  %qtconsole  %quickref  %recall  %rehashx  %reload_ext  %rep  %rerun  %reset  %reset_selective  %rm  %rmdir  %run  %save  %sc  %set_env  %store  %sx  %system  %tb  %time  %timeit  %unalias  %unload_ext  %who  %who_ls  %whos  %xdel  %xmode

Available cell magics:
%%!  %%HTML  %%SVG  %%bash  %%capture  %%debug  %%file  %%html  %%javascript  %%js  %%latex  %%markdown  %%perl  %%prun  %%pypy  %%python  %%python2  %%python3  %%ruby  %%script  %%sh  %%svg  %%sx  %%system  %%time  %%timeit  %%writefile

Automagic is ON, % prefix IS NOT needed for line magics.
In [2]:
%%bash
bash --version
GNU bash, version 5.0.16(1)-release (x86_64-pc-linux-gnu)
Copyright (C) 2019 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Ipython magic commands

In [3]:
import time

def method_a():
    time.sleep(1)

def method_b():
    time.sleep(2)
In [4]:
%timeit method_a()
1 s ± 249 µs per loop (mean ± std. dev. of 7 runs, 1 loop each)
In [5]:
%timeit method_b()
2 s ± 488 µs per loop (mean ± std. dev. of 7 runs, 1 loop each)

Plots

plot

In [6]:
import matplotlib.pyplot as plt

points = [
    [1, 1, "Red"], [1, 4, "Red"], [1, 9, "Black"], [5, 3,"Black"],
    [5, 6, "Red"], [6, 1, "Black"], [6, 2, "Black"], [6, 5, "Black"],
    [6, 8, "Red"], [8, 1, "Red"], [9, 3, "Black"], [2, 9, "Black"]
]

plt.title("Points")
plt.xlabel("x")
plt.ylabel("y")

char = 'A'
for point in points:
    plt.plot(point[1],point[0], "o", label=char, color=point[2])
    char = chr(ord(char) + 1)

plt.legend()
plt.show()
In [7]:
from matplotlib.widgets import Button
import matplotlib.pyplot as plt
import numpy as np

print("Gradient Descent f(x) = X^3-3*x^2")
x_root = float(input("x0 (3-4): "))
b = float(input("b (0.01-0.05): "))

y0 = []
x_root_arr = []

x_axis = np.r_[-1:4:0.01]
x_axis0 = np.zeros(x_axis.size)
y_axis = np.r_[-5:25:0.01]
y_axis0 = np.zeros(y_axis.size)

# 3(x_root^2)-6x_root > 10^-3
while abs(3 * pow(x_root, 2) - 6 * x_root) > pow(10, -3):
    # x_root-b(3x_root^2-6x_root)
    x_root = x_root - b * (3 * pow(x_root, 2) - 6 * x_root)
    x_root_arr.append(x_root)
    # x_axis^3-3x_axis^2
    y = pow(x_axis, 3) - 3 * pow(x_axis, 2)
    # 3x_axis^2-6x_axis
    y1 = 3 * pow(x_axis, 2) - 6 * x_axis
    # x_root^3-3x_root^2
    y0.append(pow(x_root, 3) - 3 * pow(x_root, 2))    

plt.title("Gradient Descent f(x) = x^3-3x^2")
plt.xlabel("x")
plt.ylabel("f(x)\\f'(x)")

plt.plot(x_axis, x_axis0, "--", label="X-axis")
plt.plot(y_axis0, y_axis, "--", label="Y-axis")
plt.plot(x_axis, y, "k-", label="f(x)")
plt.plot(x_axis, y1, "g-", label="f'(x)")
plt.plot(x_root_arr, y0, "r-",label="x_root")

plt.legend()
plt.show()
Gradient Descent f(x) = X^3-3*x^2

Pandas

panda

In [8]:
import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(10,5))
df
Out[8]:
0 1 2 3 4
0 0.313821 0.686786 -0.827034 0.348688 -0.480685
1 -0.161645 0.349076 1.165345 -0.342320 0.151420
2 -0.893705 -0.957260 -0.448640 0.231258 -0.743970
3 1.562866 -0.929746 0.172912 -0.576122 1.407895
4 0.411114 -1.247491 -0.802449 0.317958 -0.119262
5 -0.461696 1.392968 -0.954755 -0.253910 -0.259308
6 0.776397 -1.406432 0.292563 -1.742829 0.437358
7 1.215756 0.155151 1.115436 0.312208 -0.493080
8 1.157479 -0.143202 -0.587324 0.970606 -0.570662
9 0.844905 0.502698 1.547538 0.116758 -0.092861
In [9]:
print(df.columns)
RangeIndex(start=0, stop=5, step=1)
In [10]:
df[1]
Out[10]:
0    0.686786
1    0.349076
2   -0.957260
3   -0.929746
4   -1.247491
5    1.392968
6   -1.406432
7    0.155151
8   -0.143202
9    0.502698
Name: 1, dtype: float64
In [11]:
df[1][2:5]
Out[11]:
2   -0.957260
3   -0.929746
4   -1.247491
Name: 1, dtype: float64
In [12]:
df.describe()
Out[12]:
0 1 2 3 4
count 10.000000 10.000000 10.000000 10.000000 10.000000
mean 0.476529 -0.159745 0.067359 -0.061771 -0.076316
std 0.789636 0.936367 0.934102 0.733501 0.630834
min -0.893705 -1.406432 -0.954755 -1.742829 -0.743970
25% -0.042779 -0.950381 -0.748667 -0.320217 -0.489981
50% 0.593755 0.005975 -0.137864 0.174008 -0.189285
75% 1.079336 0.464293 0.909718 0.316520 0.090350
max 1.562866 1.392968 1.547538 0.970606 1.407895

Widgets

In [13]:
import ipywidgets as widgets

widgets.IntSlider()
In [14]:
import ipywidgets as widgets

widgets.Button(description='Press Me')