Analysera toppkunders platser
Tack vare ditt goda arbete med e-handelsföretaget har du nu fått i uppdrag att hjälpa dem utöka en befintlig rapport om försäljning per land.
Försäljningschefen vill förstå var deras toppkunder befinner sig. De har just nu ingen tydlig bild av vad 'topp' innebär. Helst ska de enkelt kunna testa olika gränsvärden för vad som räknas som en toppkund och se hur grafen förändras med olika värden.
Din uppgift är att hjälpa försäljningschefen genom att använda ett intervallinmatningsfält som möjliggör en app med liveuppdatering, som filtrerar försäljning baserat på ett minsta OrderValue-belopp.
Den här övningen är en del av kursen
Bygg dashboards med Dash och Plotly
Övningsinstruktioner
- Lägg till en intervallinmatningskomponent med
dcc.Inputoch identifierarenmin_order_valnedanför rad34, som låter användare välja ett värde från50till550. - I återanropsfunktionen nedanför rad
53, kontrollera ominput_valhar ett värde och filtrera DataFrame:nsalesså attOrderValueär större än det valda värdet.
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
from datetime import datetime, date
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'
def make_break(num_breaks):
br_list = [html.Br()] * num_breaks
return br_list
def add_logo():
corp_logo = html.Img(
src=logo_link,
style={'width':'75px','margin':'20px 20px 5px 5px','border':'1px dashed lightblue','display':'inline-block'})
return corp_logo
def style_c():
layout_style={'display':'inline-block','margin':'0 auto','padding':'20px'}
return layout_style
app = Dash()
app.layout = [
add_logo(),
*make_break(2),
html.H1('Sales Dashboard'),
*make_break(3),
html.Div([
html.H2('Controls', style=style_c()),
html.H3('Set minimum OrderValue'),
*make_break(2),
dcc.Input(
# Add a range input
id='min_order_val', type='____',
____=____, ____=____, value=50,
debounce=False,
style={'width':'300px', 'height':'30px'})],
style={'width':'350px', 'height':'350px', 'vertical-align':'top', 'border':'1px solid black',
'display':'inline-block', 'margin':'0px 80px'}),
html.Div([
dcc.Graph(id='sales_country'),
html.H2('Sales Quantity by Country', style={ 'border':'2px solid black', 'width':'400px', 'margin':'0 auto'})],
style={'width':'500px','display':'inline-block'})
]
@callback(
Output(component_id='sales_country', component_property='figure'),
Input(component_id='min_order_val', component_property='value'))
def update_plot(input_val):
sales = ecom_sales.copy(deep=True)
# Check for input and filter sales
if ____:
input_val = round(float(input_val), 2)
sales = sales[sales['OrderValue'] > ____]
fig = px.scatter(data_frame=sales, y='OrderValue', height=400,
x='Quantity', color='Country',
title=f'Orders of Min Value ${input_val}')
return fig
if __name__ == '__main__':
app.run(debug=True)