CommencezCommencez gratuitement

Analyser l'emplacement des meilleurs clients

Grâce à l'excellent travail que vous avez réalisé avec l'entreprise de commerce électronique, on vous a demandé de contribuer à bonifier un rapport existant sur les ventes par pays.

La ou le responsable des ventes veut comprendre où se trouvent ses meilleurs clients. Pour l'instant, la notion de « meilleurs » n'est pas clairement définie. L'idéal serait de pouvoir essayer facilement différentes valeurs seuils pour déterminer qui est un meilleur client et observer comment le graphique change selon le seuil choisi.

Votre tâche est d'aider la gestion des ventes en utilisant une entrée de plage pour créer une application à mise à jour en temps réel qui filtre les ventes selon un montant minimal de OrderValue.

Cette activité fait partie du cours

Créer des tableaux de bord avec Dash et Plotly

Voir le cours

Instructions de l’exercice

  • Ajoutez un composant d'entrée de plage dcc.Input avec l'identifiant min_order_val sous la ligne 34, permettant aux personnes utilisatrices de choisir une valeur de 50 à 550.
  • Dans le rappel (callback) sous la ligne 53, vérifiez input_val et filtrez le DataFrame sales avec OrderValue supérieur à la valeur sélectionnée.

Exercice interactif pratique

Essayez cet exercice en complétant ce code d’exemple.

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)
Modifier et exécuter le code