Come iniziare con Jupyter Python

Un breve post per familiarizzare con l’ambiente di sviluppo Jupyter Python e le librerie matematiche di Python.

I notebook di Jupyter sono a mio parere il miglior modo per conoscere le librerie Machine Learning di python perchè propongono una interfaccia consistente e un modo semplice d’installare i pacchetti. Se ad esempio ti serve installare il pacchetto boto3 ti basterà aggiungere questa riga all’inizio del notebook senza smanettare con il sistema operativo:

!pip install boto

Per conoscere meglio Jupyter ti propongo questo esempio molto breve che ti svelerà alcuni segreti dello sport del tennis…

Supponiamo che tu voglia controllare il tempo che passa tra la fine di un punto e il successivo in una partita di tennis, detto in soldoni quanto tempo perde in media un tennista prima di andare alla battuta. Possiamo acquisire i dati da una fonte pubblica come questa che ho trovato su githubusercontent. Dopo avere importato i dati con il notebook proviamo a disegnare un istogramma della variabile:

import pandas as pd
import matplotlib.pyplot as plt

url = 'https://raw.githubusercontent.com/fivethirtyeight'
url += '/data/master/tennis-time/serve_times.csv'
event = pd.read_csv(url)

plt.hist(event.seconds_before_next_point, bins=10)
plt.xlabel('Secondi prima del prossimo servizio')
plt.show()

Puoi fare copia e incolla su Google Colab per iniziare ma in seguito ti fornirò le istruzioni per installare Jupyter sul tuo computer Windows o Linux. Per il momento proviamo a generare un istogramma con i dati presi da githubusercontent:

L’istogramma svela alcune abitudini curiose dello sport del tennis: con un poco di occhio puoi vedere che i dati sono parzialmente inclinati su un lato e che in genere il servizio richiede 20 secondi. Comunque sia, non siamo stati in grado di dire il numero di volte in cui i servizi impiegano meno di 10 secondi o più di 35. Ovviamente si potrebbero espandere i limiti dell’istogramma ma questo ci darebbe un grafico esteso che nasconderebbe altre sottigliezze. Per studiare al meglio i valori estremi invece creiamo un altro tipo di grafico:

import pandas as pd
import matplotlib.pyplot as plt

url = 'https://raw.githubusercontent.com/fivethirtyeight'
url += '/data/master/tennis-time/serve_times.csv'
event = pd.read_csv(url)

plt.hist(event.seconds_before_next_point, bins=10)
plt.xlabel('Seconds before next serve')
plt.show()

url = 'https://raw.githubusercontent.com/fivethirtyeight'
url += '/data/master/tennis-time/serve_times.csv'
event = pd.read_csv(url)

plt.figure(figsize=(7, 11))
title = 'Time in seconds between'
title += '\nend of marked point and next serve'
title += '\nat 2015 French Open'
plt.title(title, loc='left', fontsize=18, color='gray')
py = distribution_scatter(event.seconds_before_next_point, cmap='cool');

cut_h = np.percentile(event.seconds_before_next_point, 98)
outliers = event.seconds_before_next_point> cut_h

ha = {True: 'right', False: 'left'}
for x, y, c in zip(event[outliers].seconds_before_next_point,
py[outliers],
event[outliers].server):
plt.text(x, y+.0005, c,
ha=ha[x<0], va='bottom', fontsize=12)

plt.xlabel('Seconds before next serve', fontsize=15)
plt.gca().spines['left'].set_visible(False)
plt.gca().spines['right'].set_visible(False)
plt.gca().spines['top'].set_visible(False)
plt.yticks([])
plt.xticks(np.arange(5, 41, 5))
plt.xlim([5, 40])
plt.show()

In questo grafico scatter vengono rappresentati i punti e la variabilità dei punti nella direzione dell’asse y. Possiamo vedere facilmente  quali sono gli outliers con 4 servizi che hanno richiesto meno di 10 secondi e 3 invece più di 35. Questo breve esempio serviva solo a farti apprezzare la semplicità di utilizzo di Jupyter: basta fare copia e incolla e il grado di introspezione ottenuta è davvero notevole. Useremo questa semplicità e le ricche librerie di librerie Machine Learning di Python per sviluppare dei progetti di automazione del marketing e per definire delle strategie data driven per gestire le delle risorse aziendali.