Privacy Policy

Realizzare un Grafico Interattivo in Python attraverso Bokeh ed il Widget Select

Bokeh è una gran bella libreria di Python per la realizzazione di grafici interattivi e dashboard.

Avevo seguito un corso introduttivo su DataCamp, ma ci lavoro con più impegno da Gennaio, perchè volevo sfruttarne le potenzialità per una analisi che pubblicherò a breve.

Bokeh per chi ha un background non Informatico ma da Data Analyst richiede un po’ più di tempo, molte dinamiche relative allo scambio di Input/Output possono risultare un argomento nuovo e non intuitivo.

In questo post vi farò vedere come è possibile creare sul proprio Jupyter Notebook un grafico a barre che viene visualizzato sulla base di una categoria che viene selezionata attraverso una apposita casella di selezione.

Non entrerò adesso nel merito del problema dei Bokeh Server, magari nei prossimi post, questo è semplicemente un grezzo post “Plug-n-Play”

Su GitHub ho già creato una repository, che verrà migliorata nelle prossime settimane e popolata con diversi esempi.

import pandas as pd 
dct={'Date' : ["2018-01-07", "2018-01-12", "2018-01-13", "2018-01-14", "2018-01-20", "2018-01-24"],'Attività' : ['A','B','A','B','A','B'],'Ore Dedicate' : [1, 2, 5, 3, 7, 1]} 
df=pd.DataFrame(dct) 
df

Out[18]:

Index
Attività

Date
Ore Dedicate
0A2018-01-071
1B2018-01-122
2A2018-01-135
3B2018-01-143
4A2018-01-207
5B2018-01-241

In [19]:

from bokeh.layouts import column 
from bokeh.models import ColumnDataSource, Plot, Select,LinearAxis, Grid
from bokeh.models.glyphs import VBar
from bokeh.plotting import figure,curdoc
from bokeh.io import show,push_notebook, output_notebook,output_file

#Output_notebook() è necessario per visualizzare
#i grafici all'interno di jupyter notebook

output_notebook()

Loading BokehJS … In [20]:

df_r=df.copy() 
source = ColumnDataSource(data=df_r)

In [21]:

#Creiamo una lista di attività 
#Servirà a popolare il menu a tendina
#dal quale potremo selezionare la nostra attività

activity_list=df['Attività'].unique().tolist().copy()

#Selezioniamo una prima attività
activity_selected='A'

#Creiamo il cuore della nostra applicazione
#Questa funzione permetterà di realizzare il grafico
def modify_doc(doc):

df_r=df.copy()

source = ColumnDataSource(data=df_r)

plot=figure(title='Ore Giornaliere Dedicate') plot.vbar(x="index", top="Ore

Dedicate",source=source, width=1)
#La funzione update_plot permette l'aggironamento del grafico
def update_plot(attr, old, new):
activity = select.value
data = df_r[df_r['Attività'] == activity]
source.data = ColumnDataSource(data=data).data

select = Select(title='Select Activity', value=activity_selected, options=activity_list)
select.on_change('value', update_plot)


layout=column(select, plot)
doc.add_root(layout)

show(modify_d)
Creazione Di Grafici Interattivi attraverso Bokeh

Questo è il grafico che si ottiene di default e comprende entrambe le variabili “A” e “B”.

Successivamente è possibile cliccare sul menù “Select Activity”, che abbiamo creato attraverso il widget ‘Select’, e scegliere tra le due opzioni.

I due screenshoot che vedete è quello che si può ottenere:

Esempio della selezione della categoria A e il grafico visualizzato in python con la libreria bokeh
Esempio della selezione della categoria B e il grafico risultante restituito da Bokeh

2 commenti su “Realizzare un Grafico Interattivo in Python attraverso Bokeh ed il Widget Select”

Lascia un commento