Quando lavori su problemi di data science, potresti voler impostare un ambiente interattivo per lavorare e condividere il codice di un progetto con altri. Puoi farlo facilmente con un notebook.
In altri casi, vorrai semplicemente comunicare il flusso di lavoro e i risultati che hai raccolto nell’analisi del tuo problema di data science. Per un report trasparente e riproducibile, un notebook può tornare utile.
Esatto: i notebook sono perfetti quando vuoi combinare testo semplice con elementi ricchi come grafici, calcoli, ecc.
Questo tutorial coprirà i seguenti argomenti:
R e il Jupyter Notebook
Contrariamente a quanto potresti pensare, Jupyter non ti limita a lavorare solo con Python: l’applicazione notebook è indipendente dal linguaggio, il che significa che puoi lavorare anche con altri linguaggi.
Ci sono due modi generali per iniziare a usare R con Jupyter: usando un kernel oppure configurando un ambiente R che includa tutti gli strumenti essenziali per iniziare a fare data science.
Eseguire R in Jupyter con il kernel R
Come descritto sopra, il primo modo per eseguire R è usare un kernel. Se vuoi l’elenco completo di tutti i kernel disponibili in Jupyter, vai qui.
Per lavorare con R, dovrai caricare IRKernel e attivarlo per iniziare a usare R nell’ambiente notebook.
Per prima cosa, devi installare alcuni pacchetti. Assicurati di non farlo nella console di RStudio, ma in un normale terminale R, altrimenti otterrai un errore come questo:
Error in IRkernel::installspec() :
Jupyter or IPython 3.0 has to be installed but could neither run “jupyter” nor “ipython”, “ipython2” or “ipython3”.
(Note that “ipython2” is just IPython for Python 2, but still may be IPython 3.0)
$ R
> install.packages(c('repr', 'IRdisplay', 'evaluate', 'crayon', 'pbdZMQ', 'devtools', 'uuid', 'digest'))
Questo comando ti chiederà di digitare un numero per selezionare un mirror CRAN da cui installare i pacchetti necessari. Inserisci un numero e l’installazione proseguirà.
> devtools::install_github('IRkernel/IRkernel')
Poi, devi ancora rendere il kernel R visibile a Jupyter:
# Install IRKernel for the current user
> IRkernel::installspec()
# Or install IRKernel system-wide
> IRkernel::installspec(user = FALSE)
Ora avvia l’applicazione notebook con jupyter notebook. Vedrai R comparire nell’elenco dei kernel quando crei un nuovo notebook.
Usare un ambiente R Essentials in Jupyter
La seconda opzione per lavorare rapidamente con R è installare gli R essentials nel tuo ambiente corrente:
conda install -c r r-essentials
Questi "essentials" includono i pacchetti dplyr, shiny, ggplot2, tidyr, caret e nnet. Se non vuoi installare gli essentials nel tuo ambiente corrente, puoi usare il seguente comando per creare un nuovo ambiente solo per gli R essentials:
conda create -n my-r-env -c r r-essentials
Ora avvia l’applicazione notebook per iniziare a lavorare con R.
Potresti chiederti cosa fare se vuoi installare pacchetti aggiuntivi per sviluppare il tuo progetto di data science. Dopotutto, questi pacchetti possono bastare per iniziare, ma potresti aver bisogno di altri strumenti.
Puoi costruire un pacchetto R per Conda eseguendo, per esempio:
conda skeleton cran ldavis conda build r-ldavis/
Oppure puoi installare il pacchetto dall’interno di R tramite install.packages() o devtools::install_github (per installare pacchetti da GitHub). Devi solo assicurarti di aggiungere il nuovo pacchetto alla libreria R corretta usata da Jupyter:
install.packages("ldavis", "/home/user/anaconda3/lib/R/library")
Se vuoi saperne di più sui kernel o su come eseguire R in un ambiente Docker, consulta questa pagina.
Aggiungere un po’ di magia R a Jupyter
Un grande vantaggio di lavorare con i notebook è che ti offrono un ambiente interattivo. Questa interattività deriva soprattutto dalle cosiddette "magic commands".
Questi comandi ti consentono di passare da Python alla riga di comando o di scrivere codice in un altro linguaggio come R, Julia, Scala, …
Per passare da Python a R, devi prima scaricare il seguente pacchetto:
%load_ext rpy2.ipython
Dopo di che, puoi iniziare con R, oppure passare facilmente da Python a R nella tua analisi dei dati con la magic %R.
Vediamo come funziona la magic di R con un piccolo esempio:
# Hide warnings if there are any
import warnings
warnings.filterwarnings('ignore')
# Load in the r magic
%load_ext rpy2.ipython
# We need ggplot2
%R require(ggplot2)
# Load in the pandas library
import pandas as pd
# Make a pandas DataFrame
df = pd.DataFrame({'Alphabet': ['a', 'b', 'c', 'd','e', 'f', 'g', 'h','i'],
'A': [4, 3, 5, 2, 1, 7, 7, 5, 9],
'B': [0, 4, 3, 6, 7, 10,11, 9, 13],
'C': [1, 2, 3, 1, 2, 3, 1, 2, 3]})
# Take the name of input variable df and assign it to an R variable of the same name
%%R -i df
# Plot the DataFrame df
ggplot(data=df) + geom_point(aes(x=A, y=B, color=C))
Se vuoi più dettagli su Jupyter, su come impostare un notebook, dove scaricare l’applicazione, come eseguire il notebook (via Docker, pip install o con la distribuzione Anaconda) o altri dettagli, consulta la nostra Guida definitiva.
Il R Notebook
Fino a poco tempo fa, Jupyter sembrava essere una soluzione popolare per gli utenti R, accanto a notebook come Apache Zeppelin o Beaker.
Anche altre alternative per riportare i risultati delle analisi dei dati, come R Markdown, Knitr o Sweave, sono state molto popolari nella community R.
Tuttavia, questo potrebbe cambiare con il recente rilascio del R o R Markdown Notebook da parte di RStudio.
Come vedi, il contesto del R Markdown Notebook è complesso, e vale la pena guardare alla storia della ricerca riproducibile in R per capire cosa ha guidato la creazione e lo sviluppo di questo notebook. Alla fine, capirai anche che questo notebook è diverso dagli altri.
R e la storia della ricerca riproducibile
Nella sua talk, J.J Allaire conferma che gli sforzi in R stesso per la ricerca riproducibile, gli sforzi di Emacs per combinare testo, codice e input, i progetti Pandoc, Markdown e knitr, e i notebook computazionali si sono evoluti in parallelo influenzandosi a vicenda per molti anni. Conferma che tutti questi fattori hanno infine portato alla creazione e allo sviluppo di notebook per R.
Per cominciare, i notebook computazionali hanno una storia notevole: dalla fine degli anni ’80, quando fu rilasciata l’interfaccia di Mathematica, ci sono stati molti progressi. Nel 2001, Fernando Pérez iniziò a sviluppare IPython, ma solo nel 2011 fu rilasciata la versione 0.12 di IPython. Il progetto SageMath iniziò nel 2004. Dopo di ciò, ci sono stati molti notebook. I più rilevanti per la community data science sono Beaker (2013), Jupyter (2014) e Apache Zeppelin (2015).
Poi ci sono anche i linguaggi di markup e gli editor di testo che hanno influenzato la creazione dell’applicazione notebook di RStudio, ovvero Emacs, Markdown e Pandoc. Org-mode è stato rilasciato nel 2003. È una modalità di modifica e organizzazione per note, pianificazione e scrittura nell’editor di testo libero Emacs. Sei anni dopo, arrivò Emacs org-R per fornire supporto agli utenti R. Markdown, invece, è stato rilasciato nel 2004 come linguaggio di markup che consente di formattare testo semplice in modo che possa essere convertito in HTML o altri formati. Qualche anno dopo, fu rilasciato Pandoc. È uno strumento di scrittura e una base per flussi di pubblicazione.
Infine, anche gli sforzi della community R per garantire che la ricerca sia riproducibile e trasparente hanno contribuito all’ascesa di un notebook per R. Sweave è stato introdotto nel 2002 per consentire l’inclusione di codice R all’interno di documenti LaTeX per generare file PDF. Questi PDF combinavano narrazione e analisi, grafica, codice e risultati dei calcoli. Dieci anni dopo, fu sviluppato knitr per risolvere problemi di lunga data di Sweave e combinare in un unico pacchetto funzionalità presenti in altri pacchetti aggiuntivi. È un motore trasparente per la generazione dinamica di report in R. Knitr consente qualsiasi linguaggio di input e qualsiasi linguaggio di markup di output.
Sempre nel 2012, R Markdown è stato creato come variante di Markdown che può incorporare chunk di codice R e che può essere usata con knitr per creare report web riproducibili. Il grande vantaggio era ed è che non è più necessario usare LaTeX, che ha una curva di apprendimento per impararlo e usarlo. La sintassi di R Markdown è molto simile a quella di Markdown standard ma ha alcune variazioni, dato che puoi includere, per esempio, equazioni LaTeX.
R Markdown versus notebook computazionali
R Markdown è probabilmente una delle opzioni più popolari nella community R per riportare analisi dei dati. Non sorprende che sia ancora un componente centrale nel R Markdown Notebook.
E ci sono alcuni aspetti che R Markdown e i notebook condividono, come la fornitura di un flusso di lavoro riproducibile, l’intreccio di codice, output e testo in un unico documento, il supporto a widget interattivi e l’esportazione in più formati. Tuttavia, differiscono nell’enfasi: R Markdown si concentra sull’esecuzione batch riproducibile, sulla rappresentazione in testo semplice, sul controllo di versione, sull’output di produzione e offre lo stesso editor e gli stessi strumenti che usi per gli script R.
D’altra parte, i notebook computazionali tradizionali si concentrano sulla visualizzazione inline dell’output insieme al codice, sul caching dell’output tra le sessioni, sulla condivisione di codice e output in un unico file. I notebook enfatizzano un modello di esecuzione interattivo. Non usano una rappresentazione in testo semplice, ma una rappresentazione di dati strutturata, come JSON.
Tutto ciò spiega lo scopo dell’applicazione notebook di RStudio: combina tutti i vantaggi di R Markdown con i punti di forza offerti dai notebook computazionali.
Ecco perché R Markdown è un componente chiave del R Markdown Notebook: RStudio definisce il suo notebook come "un documento R Markdown con chunk che possono essere eseguiti in modo indipendente e interattivo, con l’output visibile immediatamente sotto l’input".
Come lavorare con i R Notebook
Se hai già lavorato con Jupyter o altri notebook computazionali, vedrai che il flusso di lavoro è molto simile. Una cosa che può sembrare diversa è che ora, di default, non lavori più con celle di codice: lavori piuttosto con una sorta di editor di testo in cui indichi i chunk di codice con R Markdown.
Come installare e usare il R Markdown Notebook
Il primo requisito per usare il notebook è avere la versione più recente di RStudio sul tuo PC. Poiché i notebook sono una nuova funzionalità di RStudio, sono disponibili solo dalla versione 1.0 in poi. Quindi è importante verificare di avere la versione corretta installata.
Se non hai la versione 1.0 o superiore di RStudio, puoi scaricare l’ultima versione qui.
Poi, per creare un nuovo notebook, vai alla scheda File, seleziona New File e vedrai l’opzione per creare un nuovo R Markdown Notebook. Se RStudio ti chiede di aggiornare alcuni pacchetti, accetta e alla fine apparirà un nuovo file.
Suggerimento: controlla due volte se stai lavorando con un notebook guardando in cima al documento. L’output dovrebbe essere html_notebook.
Vedrai che il testo predefinito che appare nel documento è in R Markdown. R Markdown dovrebbe risultarti piuttosto familiare, ma se non sei ancora molto pratico, puoi sempre consultare il nostro corso Reporting With R Markdown o passare attraverso il materiale fornito da RStudio.

Nota che puoi sempre usare l’icona dell’ingranaggio per regolare lo spazio di lavoro del notebook: hai l’opzione per espandere, comprimere e rimuovere l’output del tuo codice, cambiare le opzioni di anteprima e modificare le opzioni di output.
Quest’ultima opzione può essere utile se vuoi cambiare l’evidenziazione della sintassi, applicare un altro tema, regolare la larghezza e l’altezza predefinite delle figure presenti nell’output, ecc.
Da lì in poi, puoi iniziare a inserire chunk di codice e testo!
Puoi aggiungere chunk di codice in due modi: tramite la scorciatoia da tastiera Ctrl + Alt + I o Cmd + Option + I, oppure con il pulsante Insert che trovi nella toolbar.
Il bello di lavorare con questi R Markdown notebook è che puoi seguire l’esecuzione dei chunk di codice, grazie alla piccola barra verde che appare a sinistra quando stai eseguendo chunk di grandi dimensioni o più chunk contemporaneamente. Nota anche che c’è una barra di avanzamento in basso.
Puoi vedere la barra di avanzamento verde apparire nella gif qui sotto:

Parlando di esecuzione del codice: ci sono vari modi in cui puoi eseguire i tuoi chunk di codice R.
Puoi eseguire un chunk o il chunk successivo, eseguire tutti i chunk sotto e sopra; ma puoi anche scegliere di riavviare R ed eseguire tutti i chunk oppure di riavviare e pulire l’output.
Nota che quando esegui il codice del notebook, vedrai anche l’output comparire nella console! Questo potrebbe essere una differenza piuttosto grande per chi lavora di solito con altri notebook computazionali come Jupyter.
Se si verificano errori durante l’esecuzione dei chunk di codice del notebook, l’esecuzione si fermerà e apparirà una barra rossa accanto al pezzo di codice che produce l’errore.
Puoi evitare il blocco dell’esecuzione aggiungendo errors = TRUE nelle opzioni del chunk, proprio così:
```{r, error=TRUE}
iris <- read.csv(url("http://mlr.cs.umass.edu/ml/machine-leaning-databases"), header = FALSE)
names(iris) <- c("Sepal.Length", "Sepal.Width", "Petal.Length", "Petal.Width", "Species")
```
Nota che l’errore apparirà comunque, ma l’esecuzione del codice del notebook non verrà interrotta!
Come usare la "magia" del R Markdown Notebook
Proprio come con Jupyter, puoi lavorare in modo interattivo anche con i tuoi R Markdown notebook. Funziona in modo un po’ diverso da Jupyter, perché non ci sono vere magic commands; per lavorare con altri linguaggi, devi aggiungere al notebook chunk separati Bash, Stan, Python, SQL o Rcpp.
Queste opzioni possono sembrarti piuttosto limitate, ma è compensato dalla facilità con cui puoi aggiungere questi tipi di chunk tramite il pulsante Insert della toolbar.
Anche lavorare con questi chunk è semplice: puoi vedere un esempio di chunk SQL in questo documento, pubblicato da J.J Allaire. Per i comandi Bash, basta digitare il comando. Non servono caratteri extra come ‘!’ per segnalare che stai lavorando in Bash, come faresti in Jupyter.
Come esportare i tuoi R Markdown notebook
Prima di renderizzare la versione finale di un notebook, potresti voler avere un’anteprima di ciò che hai fatto. C’è una funzione pratica che te lo consente: la trovi nella toolbar.
Fai clic sul pulsante "Preview" e la versione provvisoria del tuo documento apparirà sulla destra, nella scheda "Viewer".
Aggiungendo alcune righe alla prima sezione in cima al notebook, puoi regolare le opzioni di output, così:
---
title: "Notebook with KNN Example"
output:
pdf_document:
highlight: tango
toc: yes
html_notebook:
toc: yes
---
Per vedere dove puoi ottenere quelle distribuzioni, puoi provare a fare knit e l’output della console ti darà i siti da cui scaricare i pacchetti necessari.
Nota che questa è solo una delle tante opzioni per esportare un notebook: c’è anche la possibilità di renderizzare documenti GitHub, documenti Word, presentazioni beamer, ecc. Queste sono le opzioni di output che avevi già con i normali file R Markdown. Puoi trovare maggiori informazioni qui.
Consigli e trucchi per lavorare con i R Notebook
Oltre alle pratiche di codifica generali da tenere a mente, come documentare il codice e applicare una convenzione di nomi coerente, raggruppamento del codice e lunghezza dei nomi, puoi anche usare i seguenti consigli per rendere un notebook ottimo da usare e leggere per gli altri:
- Come con i notebook computazionali, può essere utile dividere i chunk di codice grandi o quelli che generano più di un output in più chunk. In questo modo, migliorerai l’esperienza d’uso generale e aumenterai la trasparenza di un notebook.
- Sfrutta le scorciatoie da tastiera per velocizzare il lavoro. Le trovi per lo più nella toolbar, accanto ai comandi che vuoi eseguire.
- Usa il correttore ortografico nella toolbar per assicurarti che il lessico del tuo report sia corretto.
- Sfrutta l’opzione per nascondere il codice se un notebook è molto carico di codice. Puoi farlo tramite le opzioni dei chunk o direttamente nel file HTML del notebook!
Il R Notebook rispetto al Jupyter Notebook
Oltre alle differenze tra i notebook Jupyter e R Markdown che hai già letto sopra, ci sono altre considerazioni.
Confrontiamo Jupyter con il R Markdown Notebook!
Ci sono quattro aspetti che troverai interessanti da considerare: condivisione dei notebook, esecuzione del codice, controllo di versione e gestione dei progetti.
Condivisione dei notebook
Il codice sorgente di un R Markdown notebook è un file .Rmd. Ma quando salvi un notebook, viene creato anche un file .nb.html accanto ad esso. Questo file HTML è un file associato che include una copia del sorgente R Markdown e l’output generato.
Ciò significa che non serve alcun visualizzatore speciale per vedere il file, mentre potresti averne bisogno per visualizzare notebook creati con l’applicazione Jupyter, che sono semplici documenti JSON, o altri notebook computazionali che hanno output in formati strutturati. Puoi pubblicare il tuo R Markdown notebook su qualsiasi server web, su GitHub o come allegato email.
Esistono anche API per renderizzare e fare il parsing dei R Markdown notebook: questo dà ad altri strumenti frontend la possibilità di creare modalità di authoring di notebook per R Markdown. Oppure le API possono essere usate per creare utility di conversione da e verso diversi formati di notebook.
Per condividere i notebook creati nell’applicazione Jupyter, puoi esportarli come slideshow, blog, dashboard, ecc. Puoi trovare più informazioni in questo tutorial. Tuttavia, ci sono anche le opzioni predefinite per generare script Python, file HTML, file Markdown, file PDF o file reStructuredText.
Esecuzione del codice
I R Markdown Notebook hanno opzioni per eseguire un chunk o il chunk successivo, eseguire tutti i chunk sotto e sopra; in aggiunta, puoi anche scegliere di riavviare R ed eseguire tutti i chunk oppure di riavviare e pulire l’output.
Queste opzioni sono interessanti quando lavori con R perché il R Markdown Notebook consente a tutti i pezzi di codice R di condividere lo stesso ambiente. Tuttavia, questo può essere un grosso svantaggio se lavori con pezzi di codice non R, poiché questi non condividono ambienti.
Nel complesso, queste opzioni di esecuzione aggiungono una notevole flessibilità per chi ha avuto difficoltà con le opzioni di esecuzione offerte da Jupyter, anche se non sono poi così diverse: nell’applicazione Jupyter, hai l’opzione di eseguire una singola cella, eseguire più celle ed eseguire tutte le celle. Puoi anche scegliere di pulire l’output corrente o tutti gli output. L’ambiente di codice è condiviso tra le celle.
Controllo di versione
Ci sono state affermazioni secondo cui Jupyter complica il controllo di versione dei notebook o che è difficile usare git con questi notebook. Le soluzioni a questo problema sono esportare il notebook come script oppure impostare un filtro per correggere parti dei metadati che non dovrebbero cambiare quando fai commit o per rimuovere il conteggio delle esecuzioni e l’output.
I R Markdown notebook sembrano rendere questo aspetto un po’ più facile da gestire, dato che hanno file HTML associati che salvano l’output del tuo codice e il fatto che i file del notebook sono essenzialmente file di testo semplice: il controllo di versione sarà molto più semplice. Puoi scegliere di mettere solo il tuo file .Rmd su GitHub o sul tuo altro sistema di versionamento, oppure puoi includere anche il file .nb.html .
Gestione dei progetti
Poiché il R Markdown Notebook è nativo del kit di sviluppo RStudio, i notebook si integreranno perfettamente con i tuoi progetti R. Inoltre, questi notebook supportano altri linguaggi, inclusi Python, C e SQL.
D’altro canto, il progetto Jupyter non è nativo di alcun kit di sviluppo: in questo senso, servirà un po’ di lavoro per integrare perfettamente questo notebook con i tuoi progetti. Ma questo notebook supporta comunque più linguaggi e sarà un compagno più adatto se stai cercando di usare Scala, Apache Toree, Julia o un altro linguaggio.
Alternative ai Jupyter o R Markdown Notebook
Oltre ai notebook che puoi usare come ambienti interattivi di data science che rendono semplice condividere il tuo codice con colleghi, pari e amici, ci sono anche altre alternative da considerare.
Perché a volte non ti serve un notebook, ma un dashboard, una piattaforma di apprendimento interattiva o un libro, per esempio.
Hai già letto di opzioni come Sweave e Knitr nella seconda sezione. Altre opzioni disponibili sono:
- Anche se questo post ha trattato R Markdown fino a un certo punto, sappi che puoi farci molto di più. Per esempio, puoi creare dashboard con flexdashboard.
- Oppure puoi usare Bookdown per pubblicare rapidamente libri HTML, PDF, ePub e Kindle con R Markdown.
- Shiny è uno strumento che puoi usare anche per creare dashboard. Per iniziare con Shiny, vai a questa pagina.
- In ambito educativo, DataCamp Light può essere utile per creare tutorial interattivi sul tuo blog o sito. Se vuoi vedere DataCamp Light in azione, vai per esempio a questo tutorial.

