Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

IPython e notebook Jupyter

In questa lezione iniziamo ad utilizzare due degli strumenti più utili in assoluto per la Data Science: IPython e Jupyter Notebook.
In questa lezione iniziamo ad utilizzare due degli strumenti più utili in assoluto per la Data Science: IPython e Jupyter Notebook.
Link copiato negli appunti

In questa lezione, iniziamo ad utilizzare due degli strumenti più utili in assoluto per la Data Science:

  • IPython: si tratta, in primo luogo, di una console Python particolarmente potente e flessibile, ricca di funzioni, che compensa ampiamente
    l'essenzialità della console standard a disposizione del programmatore. In secondo luogo, si tratta di un kernel, un motore per i notebook Jupyter anch'essi oggetto di questa lezione;
  • Jupyter notebook: un notebook è un ambiente operativo da usare in locale ma eseguito in una pagina web, costituito da una sequenza di celle
    in cui digitare codice o scrivere documentazione. La duttilità di questi strumenti e la facilità di integrazione in servizi web hanno portato alla realizzazione di loro versioni in Cloud connotate da grande praticità come, per citarne uno, Google Colab.

Entrambe queste tipologie di strumenti sono comodamente messe a disposizione del programmatore utilizzando Anaconda come detto in una lezione precedente
tuttavia anche i consueti package manager del mondo Python permettono la loro singola installazione come vedremo a breve.

IPython

IPython può essere installato con pip

pip install ipython

o con conda

conda install -c conda-forge ipython

Quando lo si attiva - da terminale con il comando ipython o passando da Anaconda - ci si trova di fronte ad una normale console dove ogni riga è introdotta da un numero progressivo tra
parentesi quadre anticipate dalle dicitura In per indicare l'immissione di un comando o Out per sottolineare l'emissione di output. La prima prova che possiamo fare è utilizzare
IPython come sostituto della console standard immettendo espressioni e direttive:

In [1]: 2*5
Out[1]: 10
In [2]: lista=[12, 21, 56, 65, 78, 87]
In [3]:  lista[1:-2]
Out[3]: [21, 56, 65]

Notiamo che, nelle operazioni svolte nello stralcio di esecuzione riportato, la riga [2] non ha restituito alcun output.

Tra le varie comodità di IPython abbiamo l'autoindentazione ovvero la possibilità di scrivere codice su più righe senza inserire manualmente l'indentazione che in Python
riveste una così grande importanza:

In [1]: def moltiplica(op1, op2):
   ...:     return op1*op2
   ...:
In [2]: moltiplica(3,4)
Out[2]: 12

Abbiamo così scritto una funzione, subito invocata, disposta su più righe dove gli spazi prima del return sono stati aggiunti direttamente da IPython. Altro
aspetto molto utile di IPython sono le cosiddette magic function, funzioni in grado di attivare direttamente al suo interno un gran numero di funzionalità. Si dividono in due
categorie principali:

  • line magic: si estendono per una sola riga e vengono introdotte da un simbolo di percentuale (%). Il loro risultato può essere applicato ad una variabile;
  • cell magic: possono occupare più di una riga ed iniziano con un doppio simbolo di percentuale (%%).

Con la funzione %lsmagic possiamo avere un elenco completo delle magic function del nostro ambiente:

Available line magics:
%alias  %alias_magic  %autoawait  %autocall  %autoindent  %automagic  %bookmark  %cd  %cls  %colors  %conda  %config  %copy  %cpaste  %ddir  %debug  %dhist  %dirs  %doctest_mode
%echo  %ed  %edit  %env  %gui  %hist  %history  %killbgscripts  %ldir  %load  %load_ext  %loadpy  %logoff  %logon  %logstart  %logstate  %logstop  %ls  %lsmagic  %macro  %magic
%matplotlib  %mkdir  %notebook  %page  %paste  %pastebin  %pdb  %pdef  %pdoc  %pfile  %pinfo  %pinfo2  %pip  %popd  %pprint  %precision  %prun  %psearch  %psource  %pushd  %pwd
%pycat  %pylab  %quickref  %recall  %rehashx  %reload_ext  %ren  %rep  %rerun  %reset  %reset_selective  %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  %%cmd  %%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.

Sperimentiamo subito qualcuna di esse con un esempio. Grazie ad alcune di queste funzioni possiamo misurare le prestazioni di operazioni Python:

In [1]: %time risultato=[i**500 for i in range(1,1000)]
Wall time: 6.98 ms
In [2]: %timeit risultato=[i**500 for i in range(1,1000)]
6.03 ms ± 53.8 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

Possiamo altrimenti attivare uno script direttamente dall'interno di IPython con %run o addirittura avviarne la redazione con %ed che interpella l'editor di testo del nostro
sistema operativo. Proviamo queste ultime due insieme.

Per prima cosa, avviamo un editor di testo (per noi che siamo su Windows sarà notepad) per la creazione di uno script fornendone il percorso con %ed D:\labpython\script_prova.py.
Il suo risultato sarà la stampa della tabellina del 5:

for i in range(1,11):
    print(f'5 X {i} = {5*i}')

per poi eseguirlo con:

In [1]: %run D:\labpython\script_prova.py
5 X 1 = 5
5 X 2 = 10
5 X 3 = 15
5 X 4 = 20
5 X 5 = 25
5 X 6 = 30
5 X 7 = 35
5 X 8 = 40
5 X 9 = 45
5 X 10 = 50

Jupyter notebook

I notebook Jupyter possono essere utilizzati in diverse modalità tra cui quella classica installabile con pip

pip install notebook

o con conda

conda install -c conda-forge notebook

oppure racchiusi in un ambiente più completo, simile ad un IDE chiamato Jupyter Lab anche questo installabile con pip:

pip install jupyterlab

o con conda:

conda install -c conda-forge jupyterlab

L'utilizzo di notebook Jupyter è di approccio piuttosto immediato in quanto si esplicita in uno strumento visuale dall'uso interattivo. L'immagine seguente mostra alcune celle di codice
attivate in un notebook dove si vede come l'output venga restituito immediatamente:

Figura 1. Alcune celle di codice in un notebook

Alcune celle di codice in un notebook

Figura 1. Alcune celle di codice in un notebook (click per ingrandire)Alcune celle di codice in un notebook

Ogni singola cella è distinta da un numero tra parentesi quadre che ricorda proprio la notazione appena vista per IPython che, come detto, costituisce il kernel di un notebook,
Al momento di creare una nuova cella, si può scegliere dal menu a tendina in alto se la si vuole dedicare al codice o alla scrittura di testo divulgativo in formato
Markdown:

Figura 2. Destinazione di una cella (click per ingrandire)Destinazione di una cella

Nel prosieguo della guida, conosceremo molti framework e librerie per la Data Science e la nostra produttività risulterà fortemente avvantaggiata dall'adozione di Jupyter notebook e IPython.

Ti consigliamo anche