BaşlayınÜcretsiz Başlayın

En iyi müşteri konumlarını analiz etme

E-ticaret şirketiyle yaptığın başarılı çalışmaya dayanarak, ülkeler bazında satışlarıyla ilgili mevcut bir raporu genişletmelerine yardımcı olman istendi.

Satış müdürü, en iyi müşterilerinin nerede konumlandığını anlamak istiyor. Şu anda 'en iyi' ifadesinin tam olarak ne anlama geldiğine dair net bir fikirleri yok. İdealde, birini en iyi müşteri saymak için farklı eşik değerlerini kolayca deneyebilmeli ve farklı eşiklerle grafiğin nasıl değiştiğini görebilmeli.

Görevin, minimum OrderValue tutarına göre satışları filtreleyen canlı güncellenen bir uygulamayı kolaylaştırmak için bir aralık girişi kullanarak satış müdürüne yardımcı olmak.

Bu egzersiz

Dash ve Plotly ile Paneller Oluşturma

kursunun bir parçasıdır
Kursu Görüntüle

Egzersiz talimatları

  • Satır 34'ün altına, kullanıcıların 50 ile 550 arasında bir değer seçmesine izin veren, min_order_val tanımlayıcılı dcc.Input adlı bir aralık girdi bileşeni ekle.
  • Satır 53'ün altındaki geri çağırımda, input_val için kontrol yap ve sales DataFrame'ini seçilen değerden büyük OrderValue ile filtrele.

Uygulamalı interaktif egzersiz

Bu örnek kodu tamamlayarak bu egzersizi bitirin.

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)
Kodu Düzenle ve Çalıştır