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 |
| 0 | A | 2018-01-07 | 1 |
|---|---|---|---|
| 1 | B | 2018-01-12 | 2 |
| 2 | A | 2018-01-13 | 5 |
| 3 | B | 2018-01-14 | 3 |
| 4 | A | 2018-01-20 | 7 |
| 5 | B | 2018-01-24 | 1 |
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)

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:


Ciao Andrea,
hai provato a fare il confronto con plotly? Io per certi casi lo trovo più intuitivo di Bokeh.
Ciao Roberto! Si, ma non per grafici interattivi, lo avevo utilizzato per creare un grafico statico di un funnel.
Avevo letto questo articolo Bokeh vs Dash — Which is the Best Dashboard Framework for Python? molto interessante.
Sicuramente col tempo testerò Dash per i grafici interattivi e ti farò sapere 🙂
Non mi visualizza il grafico!
Quale? Si tratta del codice qui d’esempio o del codice che hai provato a riprodurre?