Začněte nyníZačněte zdarma

Analýza lokalit nejlepších zákazníků

Na základě tvé dosavadní práce pro e-commerce společnost tě požádali o rozšíření existujícího reportu o prodejích podle zemí.

Obchodní manažer chce lépe pochopit, kde se nacházejí jejich nejlepší zákazníci. Zatím nemá jasnou představu o tom, co „nejlepší" znamená. Ideálně by chtěl snadno zkoušet různé hraniční hodnoty pro označení zákazníka jako top zákazníka a sledovat, jak se graf mění při různých nastaveních.

Tvým úkolem je pomoci obchodnímu manažerovi – použij vstup typu range k vytvoření aplikace s živou aktualizací, která filtruje prodeje podle minimální hodnoty OrderValue.

Toto cvičení je součástí kurzu

Tvorba dashboardů s Dash a Plotly

Zobrazit kurz

Pokyny k cvičení

  • Pod řádek 34 přidej vstupní komponentu dcc.Input s identifikátorem min_order_val a typem range, která umožňuje vybrat hodnotu v rozsahu od 50 do 550.
  • V callbacku pod řádkem 53 zkontroluj hodnotu input_val a filtruj DataFrame sales tak, aby OrderValue bylo větší než vybraná hodnota.

Interaktivní cvičení na vyzkoušení si v praxi

Vyzkoušejte si toto cvičení dokončením tohoto ukázkového kódu.

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)
Upravit a spustit kód