Jupyter

Wstęp

Jupyter jest projektem Open Source, który zdobywa obecnie sporą popularność. Na pierwszy rzut oka jest to coś podobnego do Mathematici: interfejs pozwalający tworzyć notatnik oraz prowadzić w nim obliczenia czy wizualizować wyniki. O ile jądrem obliczeniowym Mathematici jest jej jądro o sporych możliwościach obliczeń symbolicznych i numerycznych, to jądrem obliczeniowym Jupytera może być jeden z wielu języków programowania1:

  • głównie Python wraz z bibliotekami NumPy i SciPy,
  • R,
  • Julia,

ale również inne:

  • JavaScript,
  • Java,
  • Scala,
  • Go,
  • C#,
  • Ruby,
  • Kotlin,
  • Haskell.

Ale to nie koniec. Jąder obliczeniowych jest w sumie około stu, a wśród nich zarówno Matlab jak i Mathematica.

Instalacja

Sposób instalacji nie jest przedmiotem niniejszego krótkiego tutoriala. Znaleźć można go na stronach z dokumentacją jupytera2 lub tu. Ale nie tylko tam. Program jest tak popularny, że praktycznie wszędzie tam gdzie sugerują korzystanie z niego podają też sposób instalacji.

Oprogramowanie bez problemu powinno pracować w każdym popularnym środowisku3

Wydaje mi się, że instalacja anacondy może być najlepszym rozwiazaniem niż instalacja pojedynczych pakietów za pomocą programu pip. W jednym (sporawym) pakiecie dostaje się to co może być przydatne w trakcie zajęć.

W szczegóności w Windows (nie ma tam środowiska Python) dostajemy ten język programowania z wielu dodatkowymi pakietami. SW systemie Linux (tam python zazwyczaj już jest) Anaconda duplikuje wiele pakietów, ale ułatwia instalowanie nowych. W szczególności do różnego rodzaju testów. Wraz z usunięciem Anacondy otrzymujemy nienaruszone orginalne środowisko.

Deinstalacja anacondy usuwa wszystko i można o niej zapomnieć.

Uruchomienie w laboratorium 604 B1

W przypadku chęci skorzystania z jupytera (i innych narzędzi związanych z Anacondą) należy jednorazowo wykonać następujące czynności:

  1. Otworzyć terminet (najprościej, na klawiaturze nacisnąć równocześnie trzy klawisze: Ctrl-Alt-T).
  2. W terminalu napisać:
  3. A następnie:

    i zamknąć terminal (na przykład naciskając klawisze Ctrl-D).

Od tej chwili będzie można już korzystać z anacondy i/lub jupytera. Kolejne otworzenie terminala pokaże zmodyfikowany napis zachęty (prompt), który będzie wyglądał jakoś tak:

Dobrym sosobem na rozpoczęcie może być uruchomienie nawigatora, czyli napisanie w terminalu:

(W chwili obecnej nie można instalować dodatkowych pakietów, ani tworzyć środowisk!)

Uruchomienie

Notatnik jupyter pracuje w układzie serwer (jądro) — klient (klientem jest przeglądarka www). Uruchamiamy go wpisując w terminalu4:

Po uruchomieniu jądra, uruchamiana jest przeglądarka (rys. 1.1) i automatycznie kierowana pod adres http://localhost:8888. W przypadku gdy zamkniemy przeglądarkę, wystarczy w tym oknie, w którym uruchomione jest polecenie jupyter notebook nacisnąć równocześnie klawisze Ctrl-C. Próba przerwania jupytera zaowocuje zadaniem pytania czy na pewno przerwać, ale dodatkowo wyświetli również informację pod jakim portem szukać jupuytera:

(Niestety) ten token jest niezbędny!

Okno przeglądarki po uruchomieniu notatnika Jupyter

Praca z notatnikiem

Nowy notatnik tworzony jest wybierając opcję „New” (rys. 1.2). W chwili obecnej (w laboratorium) mamy dwie możliwości (dwa języki) do wyboru: Python 2 i Python 3. Na pierwszy rzut oka różnice między tymi dialektami nie są wielkie, ale nie każdy, nawet najprostszy kod napisany w Pythonie 2 uruchomi się gdy używamy interpretera Python 35.

Tworzenie nowego notatnika

Korzystanie z notatnika jupyter jest bardzo podobne jak w Mathematici. Wpisujemy polecenia w języku, który rozumie jądro, a następnie naciskamy klawisze Shift+Enter. Jądro wykonuje natychmiast polecenie.

W każdej komórce można oprócz polecenia umieścić albo kod albo tekst. Tekst może być formatowany zgodnie z pewnym podzbiorem standardu markdown6.

Kod musi spełniać wszystkie wymagania używanego języka programowania. Po przełączeniu komórki w tryb Markdown można wprowadzać tekst. Będzie on wprowadzany zgodnie z następującymi zasadami:

  • Aby zacząć nowy ustęp (paragraf) tekstu należy zostawić co najmniej jedną linię pustą.
  • Listy tworzymy w sposób naturalny.
    • Lista numerowana zaczyna się od liczby. Lista nienumerowana zaczyna się od punktora (może być nim znak \(+\) albo \(-\).
    • Pod-lista powinna być „wcięta” w stosunku do pozycji macierzystej.
  • Można korzystać z tabelek, ale ich tworzenie może być (na pierwszy rzut oka) niezbyt proste. Ale można się posiłkować generatorem tabelek.
  • Wzory matematyczne — wprowadzane zgodnie ze standardami LaTeXa. Nie jest on potrzebny (nie musi być zainstalowany) — do wyświetlania używana jest znakomita biblioteka MathJax. Żeby wzory umieszczać — potrzebna jest dosyć elementarna znajomość LaTeXa. Można skorzystać z jednego z wielu dostępnych w sieci serwisów on-line pozwalających wzór „wyklikać”. Może to być, na przykład, Sciweavers.
  • Obrazki wstawia się zgodnie z zasadami Markdown:

Tak zwany rich content może być bardzo łatwo włączany do notatników Jupyter. Opisuje to dokumentacja.

Najważniejsze skróty klawiaturowe zawiera ściąga.

Dokumentacja

Ponieważ Jupyter jest dziś produktem bardzo modnym, wszędzie można znaleźć (czasami różnej jakości) przykłady tłumaczące zasady pracy z tym programem. W związku z tym tu, dokumentacja nie zostanie umieszczona.

W pewnym sensie najlepszym źródłem informacji jest serwis bazowy.

Przykłady

  1. Najlepszym źródłem przykładów będzie strona umieszczona w serwisie GitHub jupytera.
  2. Warto sięgnąć do książki Python Data Science Handbook której źródła dostępne są jako szereg natatników jupyter umieszczonych (oczywiście) w serwisie GitHub.
  3. Wspomnieć też muszę o serwisie Binder pozwalającym na udostępnianie notatników Jupytera on-line. Jest tam też podstawowy zestaw dokumentacji.
  4. Na potrzeby zajęć przygotowałem kilka przykładowych notebooków. Na razie nie bardzo wiem jak je udostępnić najsensowniej. Zapewne skończy się utworzeniem własnego kąta w GitHubie. Na razie dostępne są (wraz z niezbędnymi plikami) jako jeden plik ZIP7.Pokazują one rozwiązanie (lub może raczej dają jakiś rodzaj wędki) kilku problemów związanych z tematyką zajęć.
    1. Aproksymacja:
    2. Interpolacja:
      • Bardzo podstawowe dane na temat interpolacji: Interpolacja.
      • Coś jeszcze o interpolacji nieudolna próba pokazania w jaki sposób można walczyć z niewłaściwym zachowaniem funkcji interpolacyjnych, które „wariują” na końcach przedziału.
    3. Różne:
    4. FFT:
      • Szybka transformata Fouriera. Zawiera podstawowe informacje na temat szybkiej transformaty Fouriera.
      • Rozdzielczość transformaty Fouriera. Zadanie do rozwiązania związane z Laboratorium 2a.
      • Zagadka. Drobiazg do przemyśleń na temat tego co, tak na prawdę, pokazuje FFT.
      • Piki Przykłąd starający się pokazać jak losowość sygnały potrafi „wychodzić” spod zaburzeń.
    5. Obliczenia dużej precyzji:

Instrukcja w postaci jednego pliku…

…jest również dostępna.


  1. Nazwa Jupyter pochodzi od Ju(lia) + Py(thon) + (e)R.↩︎
  2. https://jupyter.org/install↩︎
  3. Linux, Window, IOS.↩︎
  4. Aby otworzyć terminal najprościej nacisnąć równocześnie trzy klawisze Ctrl-Alt-T albo znaleźć terminal na liście aplikacji.↩︎
  5. Najważniejsze różnice posumowane są na stronie: http://sebastianraschka.com/Articles/2014_python_2_3_key_diff.html. Standardowo dostępny jest program 2to3, który pokazuje różnice ale może też automatycznie dokonać odpowiednich korekt (gdy użyć go z parametrem -w): 2to3 -w a.py.↩︎
  6. Pod tym odsyłaczem można znaleźć podstawowe informacje na temat języka Markdown. Swoją drogą Markdown to bardzo wygodny sposób do przygotowywania nawet dosyć rozbudowanych tekstów. Mimo, że wprowadzanie tekstu jest całkowicie tekstowe, można sobie pozwolić na wiele.↩︎
  7. Ściągnięty plik należy gdzieś rozpakować, a następnie w tej kartotece uruchomić notatnik jupytera.↩︎
  8. Sugeruję zapoznanie się z odpowiednią instrukcją laboratoryjną. Same dane są tutaj.↩︎