Callback in Dash

Creare dashboard con Dash e Plotly

Alex Scriven

Data Scientist

Cosa sono i callback?

 

  • Funzionalità attivata da un'interazione
    • Un/una user interagisce con un elemento
      • -> Si attiva una funzione Python
        • --> Qualcosa cambia

$$

$$

$$

  • Perché? Aumenta l'interattività ✨
Creare dashboard con Dash e Plotly

Callback in Dash

  • Si parte dalla funzione decorator
    • Usa from dash import Input, Output
  • Output: dove inviare il valore di ritorno
    • component_id: identifica il componente
    • component_property: cosa verrà cambiato
  • Input: cosa attiva il callback
    • component_property: cosa usare nella funzione attivata

 

@callback(

Output(component_id='my_plot', component_property='figure'),
Input(component_id='my_input', component_property='value')
)
def some_function(data): # Subset Data # Recreate Figure return fig
Creare dashboard con Dash e Plotly

Dropdown in Dash

 

dcc.Dropdown(id='title_dd',
             options=['Title 1', 'Title 2'])
  • Elenco di valori
Creare dashboard con Dash e Plotly

Un callback per il dropdown

app.layout =[

dcc.Dropdown(id='title_dd', options=['Title 1', 'Title 2']),
dcc.Graph(id='my_graph')])
@callback( Output(component_id='my_graph', component_property='figure'),
Input(component_id='title_dd', component_property='value') )
# @callback()
def update_plot(selection):
    title = "None Selected"
    if selection:
        title = selection

bar_fig = px.bar( data_frame=ecom_sales, title=f'{title}', x='Total Sales ($)', y='Country')
return bar_fig
Creare dashboard con Dash e Plotly

Il nostro primo dropdown

Una gif di un browser Chrome con un grafico a barre delle vendite totali (asse x) per paese (asse y) e un dropdown sopra con opzioni Title 1 e Title 2. Il mouse seleziona ciascuna opzione e il titolo del grafico cambia con il valore scelto nel dropdown

Creare dashboard con Dash e Plotly

Dropdown come filtro

  • Caso d'uso tipico: il dropdown filtra il DataFrame del grafico
# @callback()
def update_plot(input_country):
    country = 'All Countries'

sales = ecom_sales.copy(deep=True)
if input_country: country = input_country sales = sales[sales['Country'] == country]
bar_fig = px.bar( data_frame=sales, title=f"Sales in {country}", x='Total Sales ($)', y='Country') return bar_fig
Creare dashboard con Dash e Plotly

Il filtro in azione

 

Una gif di un browser Chrome con un grafico a barre delle vendite totali (asse x) per paese (asse y) e un dropdown sopra con opzioni di nomi di paesi. Il mouse seleziona varie opzioni: il titolo cambia col valore del dropdown e il grafico si filtra a una sola barra

Creare dashboard con Dash e Plotly

Esercitiamoci!

Creare dashboard con Dash e Plotly

Preparing Video For Download...