Zacznij terazZacznij za darmo

Analiza lokalizacji najlepszych klientów

Dzięki dobrej pracy dla firmy e-commerce poproszono cię o rozbudowanie istniejącego raportu dotyczącego sprzedaży według krajów.

Kierownik sprzedaży chce wiedzieć, gdzie znajdują się jego najlepsi klienci. Na razie nie ma jasno określonego kryterium, co oznacza „najlepszy". Ideałem byłoby łatwe testowanie różnych wartości progowych – pozwalających uznać kogoś za najlepszego klienta – i obserwowanie, jak zmienia się wykres przy różnych wartościach odcięcia.

Twoim zadaniem jest pomóc kierownikowi sprzedaży: użyj kontrolki zakresu (range input), aby zbudować aplikację aktualizującą się na żywo, która filtruje sprzedaż według minimalnej wartości OrderValue.

To ćwiczenie jest częścią kursu

Tworzenie dashboardów z Dash i Plotly

Zobacz kurs

Instrukcje do ćwiczenia

  • Dodaj komponent dcc.Input z identyfikatorem min_order_val poniżej linii 34, ustawiając type='range' i umożliwiając wybór wartości od 50 do 550.
  • W funkcji callback poniżej linii 53 sprawdź wartość input_val i przefiltruj ramkę danych sales tak, aby uwzględniała tylko wiersze, w których OrderValue jest większe od wybranej wartości.

Interaktywne ćwiczenie praktyczne

Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.

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)
Edytuj i uruchom kod