Control deslizante para datos de ventas
El análisis de tendencias y patrones en los datos de la empresa global de e-commerce ha mejorado mucho con tus selectores de fecha. Ahora quieren ver qué categorías impulsan los pedidos de "alto importe".
La empresa te ha pedido que crees una herramienta con la que puedan seleccionar un valor (¡cualquiera!) y un gráfico muestre cuántas ventas tuvieron un valor de pedido mayor que ese valor, desglosadas por categoría principal.
Sabes que esto se facilita muy bien con una entrada de rango.
Este ejercicio forma parte del curso
Creación de paneles con Dash y Plotly
Instrucciones del ejercicio
- Añade un componente deslizante llamado
dcc.Slidercon el identificadorvalue_sliderdebajo de la línea16para seleccionar un valor mínimo de pedido. - Establece el parámetro
valuedel control deslizante a0debajo de la línea20. - Establece el parámetro
stepdel control deslizante a50debajo de la línea22.
ejercicio interactivo práctico
Prueba este ejercicio completando este código de ejemplo.
from dash import Dash, dcc, html, Input, Output, callback
import plotly.express as px
import pandas as pd
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'
app = Dash()
app.layout = [
html.Img(src=logo_link, style={'margin':'30px 0px 0px 0px'}),
html.H1('Sales breakdowns'),
html.Div([
html.H2('Controls'),
html.Br(),
html.H3('Minimum OrderValue Select'),
# Add a slider input
____(id='value_slider',
min=ecom_sales['OrderValue'].min(),
max=ecom_sales['OrderValue'].max(),
# Set the starting value of the slider
____=____,
# Set the step increment of the slider
____=____,
vertical=False)],
style={'width':'350px', 'height':'350px', 'display':'inline-block', 'vertical-align':'top', 'border':'1px solid black', 'padding':'20px'}),
html.Div([
dcc.Graph(id='sales_cat'),
html.H2('Sales by Major Category', style={ 'border':'2px solid black', 'width':'400px', 'margin':'0 auto'})],
style={'width':'700px','display':'inline-block'})
]
@callback(
Output(component_id='sales_cat', component_property='figure'),
Input(component_id='value_slider', component_property='value')
)
def update_plot(min_val):
sales = ecom_sales.copy(deep=True)
if min_val:
sales = sales[sales['OrderValue'] >= min_val]
ecom_bar_major_cat = sales.groupby('Major Category')['OrderValue'].size().reset_index(name='Total Sales Volume')
bar_fig_major_cat = px.bar(
title=f'Sales with order value: {min_val}',data_frame=ecom_bar_major_cat, orientation='h',
x='Total Sales Volume', y='Major Category')
return bar_fig_major_cat
if __name__ == '__main__':
app.run(debug=True)