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:
- Otworzyć terminet (najprościej, na klawiaturze nacisnąć równocześnie trzy klawisze: Ctrl-Alt-T).
- W terminalu napisać:
1source /opt/anaconda3/bin/activate - A następnie:
1conda init
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:
1 |
(base) 123456@piwko012:~$ |
Dobrym sosobem na rozpoczęcie może być uruchomienie nawigatora, czyli napisanie w terminalu:
1 |
anaconda-navigator |
(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:
1 |
jupyter notebook |
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:
1 2 3 |
The Jupyter Notebook is running at: http://localhost:8888/?token=5ac2de4791858399254a74de588cd4016a381618ce12ce27 Shutdown this notebook server (y/[n])? |
(Niestety) ten token jest niezbędny!
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.
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:
1![tekst altenatywny](jup_ekran.png "Tytuł obrazka")
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
- Najlepszym źródłem przykładów będzie strona umieszczona w serwisie GitHub jupytera.
- 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.
- Wspomnieć też muszę o serwisie Binder pozwalającym na udostępnianie notatników Jupytera on-line. Jest tam też podstawowy zestaw dokumentacji.
- 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ęć.
- Aproksymacja:
- Aproksymacja wielomianowa — bardzo podstawowe informacje na temat aproksymacji.
- Przykład realizacji aproksymacji liniowej: Aproksymacja liniowa.
- 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.
- Różne:
- Czytanie danych zawierających ciągi znaków NaN. Zawiera również informacje na temat odrzucania różnych rodzajów błędnych danych.
- Informacje na temat wczytania do notatnik danych z „drugiego zestawu”8. Są tam również informacje na temat proponowanego sposobu „redukcji” danych (resampling).
- 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ń.
- Obliczenia dużej precyzji:
- Obliczenia dużej precyzji w Pythonie. Przykład do laboratorium nr 4.
- Aproksymacja:
Instrukcja w postaci jednego pliku…
…jest również dostępna.
- Nazwa Jupyter pochodzi od Ju(lia) + Py(thon) + (e)R.↩︎
- https://jupyter.org/install↩︎
- Linux, Window, IOS.↩︎
- Aby otworzyć terminal najprościej nacisnąć równocześnie trzy klawisze Ctrl-Alt-T albo znaleźć terminal na liście aplikacji.↩︎
- 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.↩︎
- 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.↩︎
- Ściągnięty plik należy gdzieś rozpakować, a następnie w tej kartotece uruchomić notatnik jupytera.↩︎
- Sugeruję zapoznanie się z odpowiednią instrukcją laboratoryjną. Same dane są tutaj.↩︎