Užitečný nástroj, který vědcům a datovým analytikům ulehčuje práci, se jmenuje Jupyter Notebook. Je to webová verze pythonní konzole, kde můžeme psát příkazy a kontrolovat výstup.
Na rozdíl od klasické konzole se v Notebooku příkazy (a jejich výstup) ukládají, a je tedy jednoduché se k nim vracet, upravovat je a přidávat komentáře. Mezi příkazy se pak dá psát text ve značkovacím jazyce Markdown, a plynule tak přecházet od pokusů a poznámek přes kód, který se dá sdílet, až po slajdy k prezentaci nebo dokonce publikovatelnou vědeckou práci (na což už jsou ale potřeba další nástroje). V Jupyter Notebooku jsou psány i tyto materiály.
Samotný Jupyter je napsaný v Pythonu, ale podporuje i jiné jazyky. Název pochází z JUlia, PYThon, R; kromě nich existují kernely pro desítky dalších jazyků.
Pro pythonní verzi stačí z PyPI nainstalovat balíček notebook
(nebo jupyter
, který „přitáhne” víc funkcionality).
Před instalací ale doporučuji aktualizovat samotný pip. (Virtuální prostředí bývají občas vytvářena s verzí pipu, která neumí pracovat s wheels – binárním formátem, ze kterého se instaluje mnohem rychleji než ze zdrojového kódu.)
$ python -m pip install --upgrade pip wheel
$ python -m pip install notebook
Tato instalace v některých případech vyžaduje nainstalované překladače jazyků jako C. Na školních systémech by měly být nainstalovány; v Linuxových distribucích jsou potřeba balíčky jako gcc
a python3-devel
. Kdyby se instalace nepovedla, potřebná závislost lze většinou dohledat pomocí chybových hlášek.
Nainstalovaný Notebook pusťte pomocí:
$ python -m notebook
V prohlížeči se otevře stránka se seznamem souborů v aktuálním adresáři; nový notebook se dá vytvořit přes tlačítko New
→Python 3
.
Nově vytvořený notebook má jednu buňku (cell), do které zapište kód a stiskněte Shift+Enter. Tím se kód vykoná, zobrazí se výstup a vytvoří se nová buňka, kam se dá psát další kód.
Kód se spouští pomocí Shift+Enter (a podobných příkazů); nezáleží na pořadí buněk v dokumentu. Je ale dobré psát buňky tak, aby při postupném spouštění (nebo Run All z menu Cell) kód fungoval – např. dávat importy na začátek.
Notebook je založený na konzoli IPython, která přidává některé vychytávky: doplňování pomocí tab, spouštění shellových příkazů pomocí !
nebo zobrazení nápovědy pomocí zadání ?
za výrazem. Vyzkoušejte např.:
str.l<TAB>
! ls -a<SHIFT+ENTER>
str.lower?<SHIFT+ENTER>
Kód v buňce může být víceřádkový. Je-li poslední příkaz v buňce výrazem, jeho hodnota se vypíše jako výsledek buňky:
1+1 # Nevypíše se (není poslední příkaz)
2+2 # Vypíše se
seznam = [5, 6, 3, 2]
print(seznam) # print() funguje
seznam.sort()
seznam # Poslední výraz se vypíše
Další možnosti, jako např. změna typu buňky na Markdown, jsou dostupné z menu nebo klávesovými zkratkami.
{ "data": { "sessionMaterial": { "id": "session-material:2017/mipyt-zima:pandas:0", "title": "Notebook", "html": "\n \n \n\n <div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\n</div><div class=\"inner_cell\">\n<div class=\"text_cell_render border-box-sizing rendered_html\">\n<h1>Jupyter Notebook</h1>\n<p>Užitečný nástroj, který vědcům a datovým analytikům ulehčuje práci, se jmenuje Jupyter Notebook. Je to webová verze pythonní konzole, kde můžeme psát příkazy a kontrolovat výstup.</p>\n<p>Na rozdíl od klasické konzole se v Notebooku příkazy (a jejich výstup) ukládají, a je tedy jednoduché se k nim vracet, upravovat je a přidávat komentáře. Mezi příkazy se pak dá psát text ve značkovacím jazyce Markdown, a plynule tak přecházet od pokusů a poznámek přes kód, který se dá sdílet, až po slajdy k prezentaci nebo dokonce publikovatelnou vědeckou práci (na což už jsou ale potřeba další nástroje).\nV Jupyter Notebooku jsou psány i tyto materiály.</p>\n<p>Samotný Jupyter je napsaný v Pythonu, ale podporuje i jiné jazyky. Název pochází z JUlia, PYThon, R; kromě nich existují <em>kernely</em> pro <a href=\"https://github.com/ipython/ipython/wiki/IPython-kernels-for-other-languages\">desítky dalších jazyků</a>.\nPro pythonní verzi stačí z PyPI nainstalovat balíček <code>notebook</code> (nebo <code>jupyter</code>, který „přitáhne” víc funkcionality).</p>\n<p>Před instalací ale doporučuji aktualizovat samotný pip. (Virtuální prostředí bývají občas vytvářena s verzí pipu, která neumí pracovat s wheels – binárním formátem, ze kterého se instaluje mnohem rychleji než ze zdrojového kódu.)</p>\n<div class=\"highlight\"><pre><span></span><span class=\"gp\">$ </span>python -m pip install --upgrade pip wheel\n<span class=\"gp\">$ </span>python -m pip install notebook\n</pre></div><p>Tato instalace v některých případech vyžaduje nainstalované překladače jazyků jako C. Na školních systémech by měly být nainstalovány; v Linuxových distribucích jsou potřeba balíčky jako <code>gcc</code> a <code>python3-devel</code>. Kdyby se instalace nepovedla, potřebná závislost lze většinou dohledat pomocí chybových hlášek.</p>\n<p>Nainstalovaný Notebook pusťte pomocí:</p>\n<div class=\"highlight\"><pre><span></span><span class=\"gp\">$ </span>python -m notebook\n</pre></div><p>V prohlížeči se otevře stránka se seznamem souborů v aktuálním adresáři; nový notebook se dá vytvořit přes tlačítko <code>New</code>→<code>Python 3</code>.</p>\n<h2>Jak na Notebook</h2>\n<p>Nově vytvořený notebook má jednu buňku (<em>cell</em>), do které zapište kód a stiskněte <kbd>Shift</kbd>+<kbd>Enter</kbd>. Tím se kód vykoná, zobrazí se výstup a vytvoří se nová buňka, kam se dá psát další kód.</p>\n<p>Kód se spouští pomocí <kbd>Shift</kbd>+<kbd>Enter</kbd> (a podobných příkazů); nezáleží na pořadí buněk v dokumentu. Je ale dobré psát buňky tak, aby při postupném spouštění (nebo Run All z menu Cell) kód fungoval – např. dávat importy na začátek.</p>\n<p>Notebook je založený na konzoli IPython, která přidává některé vychytávky: doplňování pomocí <kbd>tab</kbd>, spouštění shellových příkazů pomocí <code>!</code> nebo zobrazení nápovědy pomocí zadání <code>?</code> za výrazem. Vyzkoušejte např.:</p>\n<div class=\"highlight\"><pre><code>str.l<TAB>\n! ls -a<SHIFT+ENTER>\nstr.lower?<SHIFT+ENTER></code></pre></div><p>Kód v buňce může být víceřádkový. Je-li poslední příkaz v buňce výrazem, jeho hodnota se vypíše jako výsledek buňky:</p>\n</div>\n</div>\n</div>\n<div class=\"cell border-box-sizing code_cell rendered\">\n<div class=\"input\">\n<div class=\"prompt input_prompt\">In [2]:</div>\n<div class=\"inner_cell\">\n <div class=\"input_area\">\n<div class=\" highlight hl-ipython3\"><pre><span></span><span class=\"mi\">1</span><span class=\"o\">+</span><span class=\"mi\">1</span> <span class=\"c1\"># Nevypíše se (není poslední příkaz)</span>\n<span class=\"mi\">2</span><span class=\"o\">+</span><span class=\"mi\">2</span> <span class=\"c1\"># Vypíše se</span>\n</pre></div>\n\n </div>\n</div>\n</div>\n\n<div class=\"output_wrapper\">\n<div class=\"output\">\n\n\n<div class=\"output_area\">\n\n <div class=\"prompt output_prompt\">Out[2]:</div>\n\n\n\n\n<div class=\"output_text output_subarea output_execute_result\">\n<pre>4</pre>\n</div>\n\n</div>\n\n</div>\n</div>\n\n</div>\n<div class=\"cell border-box-sizing code_cell rendered\">\n<div class=\"input\">\n<div class=\"prompt input_prompt\">In [3]:</div>\n<div class=\"inner_cell\">\n <div class=\"input_area\">\n<div class=\" highlight hl-ipython3\"><pre><span></span><span class=\"n\">seznam</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"mi\">5</span><span class=\"p\">,</span> <span class=\"mi\">6</span><span class=\"p\">,</span> <span class=\"mi\">3</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">]</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">seznam</span><span class=\"p\">)</span> <span class=\"c1\"># print() funguje</span>\n<span class=\"n\">seznam</span><span class=\"o\">.</span><span class=\"n\">sort</span><span class=\"p\">()</span>\n<span class=\"n\">seznam</span> <span class=\"c1\"># Poslední výraz se vypíše</span>\n</pre></div>\n\n </div>\n</div>\n</div>\n\n<div class=\"output_wrapper\">\n<div class=\"output\">\n\n\n<div class=\"output_area\">\n\n <div class=\"prompt\"></div>\n\n\n<div class=\"output_subarea output_stream output_stdout output_text\">\n<pre>[5, 6, 3, 2]\n</pre>\n</div>\n</div>\n\n<div class=\"output_area\">\n\n <div class=\"prompt output_prompt\">Out[3]:</div>\n\n\n\n\n<div class=\"output_text output_subarea output_execute_result\">\n<pre>[2, 3, 5, 6]</pre>\n</div>\n\n</div>\n\n</div>\n</div>\n\n</div>\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\n</div><div class=\"inner_cell\">\n<div class=\"text_cell_render border-box-sizing rendered_html\">\n<p>Další možnosti, jako např. změna typu buňky na Markdown, jsou dostupné z menu nebo klávesovými zkratkami.</p>\n</div>\n</div>\n</div>\n \n\n\n\n\n " } } }