Top-Kundenstandorte analysieren
Auf Basis deiner guten Arbeit mit dem E-Commerce-Unternehmen wurdest du gebeten, einen bestehenden Bericht über die Umsätze nach Ländern zu erweitern.
Die Vertriebsleitung möchte verstehen, wo sich ihre Top-Kundinnen und -Kunden befinden. Momentan ist nicht klar definiert, was „Top“ genau bedeutet. Idealerweise können sie verschiedene Grenzwerte ausprobieren, ab wann jemand als Top-Kundschaft gilt, und sehen, wie sich das Diagramm mit unterschiedlichen Grenzwerten verändert.
Deine Aufgabe ist es, die Vertriebsleitung zu unterstützen, indem du eine Range-Eingabe nutzt, um eine Live-Update-App zu ermöglichen, die Umsätze nach einem minimalen OrderValue-Betrag filtert.
Diese Übung ist Teil des Kurses
<Kurs>Dashboards mit Dash und Plotly erstellen</Kurs>Übungsanweisungen
- Füge unter Zeile
34eine Range-Input-Komponentedcc.Inputmit der Kennungmin_order_valhinzu, mit der Nutzerinnen und Nutzer einen Wert von50bis550auswählen können. - Prüfe im Callback unter Zeile
53aufinput_valund filtere dassales-DataFrame mitOrderValuegrößer als der ausgewählte Wert.
Interaktive praktische Übung
Versuche dich an dieser Übung, indem du diesen Beispielcode vervollständigst.
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)