Skjutreglage för försäljningsdata
Datumväljarna har gjort det betydligt enklare att analysera trender och mönster i det globala e-handelsföretagets data. Nu finns det ytterligare en önskemål: att se vilka kategorier som driver de stora beställningarna.
Företaget vill att du bygger ett verktyg där de kan ange ett valfritt värde, och ett diagram visar hur många försäljningar som hade ett ordervärde över det värdet, uppdelat per huvudkategori.
Detta passar utmärkt för ett skjutreglage som inmatningskomponent.
Den här övningen är en del av kursen
Bygg dashboards med Dash och Plotly
Övningsinstruktioner
- Lägg till en slider-komponent med
dcc.Slideroch identifierarenvalue_slidernedanför rad16för att välja ett minsta ordervärde. - Sätt
value-parametern för skjutreglaget till0nedanför rad20. - Sätt
step-parametern för skjutreglaget till50nedanför rad22.
Interaktiv övning med praktiskt arbete
Testa den här övningen genom att slutföra den här exempelkoden.
from dash import Dash, dcc, html, Input, Output, callback
import plotly.express as px
import pandas as pd
ecom_sales = pd.read_csv('/usr/local/share/datasets/ecom_sales.csv')
logo_link = 'https://assets.datacamp.com/production/repositories/5893/datasets/fdbe0accd2581a0c505dab4b29ebb66cf72a1803/e-comlogo.png'
app = Dash()
app.layout = [
html.Img(src=logo_link, style={'margin':'30px 0px 0px 0px'}),
html.H1('Sales breakdowns'),
html.Div([
html.H2('Controls'),
html.Br(),
html.H3('Minimum OrderValue Select'),
# Add a slider input
____(id='value_slider',
min=ecom_sales['OrderValue'].min(),
max=ecom_sales['OrderValue'].max(),
# Set the starting value of the slider
____=____,
# Set the step increment of the slider
____=____,
vertical=False)],
style={'width':'350px', 'height':'350px', 'display':'inline-block', 'vertical-align':'top', 'border':'1px solid black', 'padding':'20px'}),
html.Div([
dcc.Graph(id='sales_cat'),
html.H2('Sales by Major Category', style={ 'border':'2px solid black', 'width':'400px', 'margin':'0 auto'})],
style={'width':'700px','display':'inline-block'})
]
@callback(
Output(component_id='sales_cat', component_property='figure'),
Input(component_id='value_slider', component_property='value')
)
def update_plot(min_val):
sales = ecom_sales.copy(deep=True)
if min_val:
sales = sales[sales['OrderValue'] >= min_val]
ecom_bar_major_cat = sales.groupby('Major Category')['OrderValue'].size().reset_index(name='Total Sales Volume')
bar_fig_major_cat = px.bar(
title=f'Sales with order value: {min_val}',data_frame=ecom_bar_major_cat, orientation='h',
x='Total Sales Volume', y='Major Category')
return bar_fig_major_cat
if __name__ == '__main__':
app.run(debug=True)