ÎncepețiÎncepe gratuit

Analiza locațiilor celor mai valoroși clienți

Pe baza muncii tale bune cu compania de e-commerce, ai fost rugat să ajuți la extinderea unui raport existent privind vânzările pe țări.

Managerul de vânzări vrea să înțeleagă unde se află cei mai valoroși clienți ai lor. Deocamdată, nu au o idee clară despre ce înseamnă „valoros". Ideal ar fi să poată testa cu ușurință diverse valori-prag pentru a decide cine se califică drept client de top și să observe cum se modifică graficul în funcție de aceste valori.

Sarcina ta este să îl ajuți pe managerul de vânzări folosind un input de tip range pentru a crea o aplicație cu actualizare în timp real, care filtrează vânzările după o valoare minimă OrderValue.

Acest exercițiu face parte din cursul

Crearea dashboardurilor cu Dash și Plotly

Vezi cursul

Instrucțiuni pentru exercițiu

  • Adaugă o componentă de tip range input numită dcc.Input cu identificatorul min_order_val sub linia 34, care să permită utilizatorilor să selecteze o valoare între 50 și 550.
  • În callback-ul de sub linia 53, verifică valoarea input_val și filtrează DataFrame-ul sales păstrând doar înregistrările cu OrderValue mai mare decât valoarea selectată.

Exercițiu interactiv practic

Încearcă acest exercițiu completând acest cod de exemplu.

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)
Editează și rulează codul