La solicitud

De Kevin Brooks, Gerente de Operaciones
Tu objetivo
daily tiene una fila por día del 2023-01-01 al 2025-12-31 y una columna por canal, con los ingresos completados de ese día (0 en los días sin venta). Asigna a result un DataFrame con una fila por canal (ordenado de la A a la Z) y las columnas channel, mean y std de los ingresos diarios (valores predeterminados de pandas, redondeados a 2), y cv: la desviación estándar dividida entre la media, redondeada a 3.
- Usa el DataFrame
orderspendiente - Usa el DataFrame
order_itemspendiente - Muestra exactamente
channelmeanstdcvpendiente
Each box holds the middle half of the 1,096 days; the line inside is the median day. Dots are unusually big days. A few days above $10,000 are not drawn.
Ver los números
| Group | Values | Lower whisker | Q1 | Median | Q3 | Upper whisker | Beyond whiskers |
|---|---|---|---|---|---|---|---|
| app | 1,096 | $0 | $383.78 | $1,219 | $2,611 | $5,943 | 56 |
| marketplace | 1,096 | $0 | $0 | $307.44 | $983.58 | $2,452 | 84 |
| web | 1,096 | $0 | $997.11 | $2,092 | $3,825 | $8,033 | 45 |
Tu código
Cargando el editor…
Solución de referencia
| order_id | customer_id | order_date | status | channel |
|---|---|---|---|---|
| 1001 | 125 | 2023-01-01 20:51:19 | completed | web |
| 1002 | 156 | 2023-01-02 07:58:46 | completed | web |
| 1003 | 22 | 2023-01-02 10:25:27 | completed | marketplace |
| 1004 | 48 | 2023-01-02 11:21:51 | completed | marketplace |
Mote revisa tu resultado
Presiona Ejecutar. Cada fila que cumple el objetivo se vuelve una luciérnaga en tu linterna.
Lo que recibe Kevin, y por qué
DataFrames
Cargados como DataFrames de pandas, junto con pd y np.
orders12,000 filas · 7 columnas
order_idintegercustomer_idintegerorder_datetimestampstatusvarcharchannelvarcharshipping_feedecimalcoupon_codevarchar
| order_id | customer_id | order_date | status | channel | shipping_fee | coupon_code |
|---|---|---|---|---|---|---|
| 1001 | 125 | 2023-01-01 20:51:19 | completed | web | 0.00 | NaN |
| 1002 | 156 | 2023-01-02 07:58:46 | completed | web | 0.00 | NaN |
| 1003 | 22 | 2023-01-02 10:25:27 | completed | marketplace | 4.99 | WELCOME10 |
| 1004 | 48 | 2023-01-02 11:21:51 | completed | marketplace | 4.99 | WELCOME10 |
| 1005 | 82 | 2023-01-02 11:43:36 | completed | web | 0.00 | WELCOME10 |
order_items30,338 filas · 6 columnas
order_item_idintegerorder_idintegerproduct_idintegerquantityintegerunit_pricedecimaldiscount_pctdecimal
| order_item_id | order_id | product_id | quantity | unit_price | discount_pct |
|---|---|---|---|---|---|
| 1 | 1001 | 121 | 9 | 31.99 | 0.00 |
| 2 | 1001 | 154 | 3 | 11.99 | 0.00 |
| 3 | 1002 | 154 | 4 | 11.99 | 0.00 |
| 4 | 1002 | 194 | 1 | 149.00 | 0.00 |
| 5 | 1002 | 193 | 2 | 19.99 | 0.00 |
customers2,018 filas · 9 columnas
customer_idintegerfirst_namevarcharlast_namevarcharemailvarcharcityvarcharstatevarcharsignup_datedatesegmentvarcharreferral_sourcevarchar
| customer_id | first_name | last_name | city | state | signup_date | segment | referral_source | |
|---|---|---|---|---|---|---|---|---|
| 1 | Owen | Hudson | owen.hudson@icloud.com | San Francisco | CA | 2022-06-02 | consumer | search |
| 2 | Douglas | Mendoza | dmendoza69@gmail.com | Atlanta | GA | 2022-06-02 | consumer | NaN |
| 3 | Henry | Brooks | hbrooks@lakesidecafe.com | Los Angeles | CA | 2022-06-04 | business | NaN |
| 4 | Brian | Graham | bgraham@bluecedarhomes.com | Seattle | WA | 2022-06-06 | business | |
| 5 | Kyle | Jimenez | kjimenez27@yahoo.com | Indianapolis | IN | 2022-06-07 | consumer | NaN |
products120 filas · 8 columnas
product_idintegernamevarcharcategoryvarcharsubcategoryvarcharunit_pricedecimalunit_costdecimallaunched_ondateis_activeboolean
| product_id | name | category | subcategory | unit_price | unit_cost | launched_on | is_active |
|---|---|---|---|---|---|---|---|
| 101 | Vale Velvet Loveseat | Furniture | Sofas | 1659.00 | NaN | 2023-09-11 | true |
| 102 | Alder Oak Coffee Table | Furniture | Tables | 919.00 | 503.50 | 2024-05-16 | true |
| 103 | Orchard Rattan Dining Chair | Furniture | Chairs | 789.00 | 429.87 | 2023-05-27 | true |
| 104 | Upland Oak Bookcase | Furniture | Storage | 429.00 | 214.70 | 2022-12-20 | true |
| 105 | Avery Leather Bed Frame | Furniture | Beds | 449.00 | 232.70 | 2021-08-31 | true |
returns1,673 filas · 5 columnas
return_idintegerorder_item_idintegerreturned_ondatereasonvarcharrefund_amountdecimal
| return_id | order_item_id | returned_on | reason | refund_amount |
|---|---|---|---|---|
| 1 | 14 | 2023-01-10 | damaged | 83.69 |
| 2 | 42 | 2023-01-10 | wrong_item | 19.99 |
| 3 | 105 | 2023-01-14 | wrong_item | 10.99 |
| 4 | 24 | 2023-01-16 | changed_mind | 26.99 |
| 5 | 126 | 2023-01-16 | late | 20.99 |
employees60 filas · 8 columnas
employee_idintegerfirst_namevarcharlast_namevarchardepartmentvarchartitlevarcharmanager_idintegerhire_datedatesalaryinteger
| employee_id | first_name | last_name | department | title | manager_id | hire_date | salary |
|---|---|---|---|---|---|---|---|
| 1 | Catherine | Hale | Executive | Chief Executive Officer | NaN | 2016-03-01 | 285000 |
| 2 | Robert | Kim | Executive | Chief Operating Officer | 1 | 2017-01-09 | 235000 |
| 3 | Megan | Collins | Sales | Head of Sales | 1 | 2018-04-16 | 172000 |
| 4 | Chloe | Gutierrez | Sales | Account Executive | 3 | 2020-01-21 | 72000 |
| 5 | Frank | Bell | Sales | Account Executive | 3 | 2023-05-21 | 73000 |
web_sessions40,000 filas · 7 columnas
session_idintegercustomer_idintegerstarted_attimestampdevicevarcharsourcevarcharpages_viewedintegerconvertedboolean
| session_id | customer_id | started_at | device | source | pages_viewed | converted |
|---|---|---|---|---|---|---|
| 1 | NaN | 2023-01-01 23:02:24 | mobile | paid | 1 | false |
| 2 | 18 | 2023-01-01 15:07:49 | desktop | paid | 1 | false |
| 3 | NaN | 2023-01-01 16:55:46 | desktop | direct | 7 | false |
| 4 | NaN | 2023-01-01 12:43:28 | mobile | organic | 3 | false |
| 5 | NaN | 2023-01-01 13:06:21 | mobile | social | 2 | false |
marketing_spend3,276 filas · 3 columnas
spend_datedatechannelvarcharamountdecimal
| spend_date | channel | amount |
|---|---|---|
| 2023-01-01 | paid | 492.99 |
| 2023-01-01 | 37.38 | |
| 2023-01-01 | social | 200.53 |
| 2023-01-02 | paid | 709.13 |
| 2023-01-02 | 64.13 |
La lección
Mismo promedio, distinto riesgo
Imagina dos tiendas que venden en promedio $1,000 al día. En la primera, casi todos los días caen entre $950 y $1,050. En la segunda, un día trae $400 y el siguiente $1,800. Los promedios son iguales; los negocios no. La primera se puede dotar de personal y de inventario a partir del promedio; la segunda necesita un margen de seguridad, porque el “promedio” rara vez es lo que ocurre.
La desviación estándar del nivel 4 mide justo eso: la distancia típica de un día al día promedio. Pequeña significa predecible, grande significa volátil.
Ingresos diarios por canal
El código inicial arma daily: una fila por día calendario, una columna por canal. Sacar la
desviación estándar de cada columna responde la pregunta de Kevin:
daily.mean() # app 1847.38, marketplace 764.13, web 2766.49
daily.std() # app 2039.60, marketplace 1190.90, web 2502.56
En todos los canales la desviación estándar es casi tan grande como la media, o más. Los ingresos diarios aquí dependen de unos pocos pedidos grandes de empresas y de los picos de noviembre y diciembre, así que es difícil definir un “día normal”. El diagrama de caja lo muestra: las cajas son cortas y los puntos por encima llegan muy lejos.
El coeficiente de variación
La desviación estándar de web ($2,503) es la mayor, pero web también es el canal que más vende. Para comparar la dispersión entre grupos de distinto tamaño, divide la desviación estándar entre la media. Esa razón es el coeficiente de variación (CV):
cv = daily.std() / daily.mean() # web 0.905, app 1.104, marketplace 1.559
Un CV de 0.9 significa que un día típico se aleja de la media cerca del 90% de ella. Web es el canal más estable en relación con su tamaño; marketplace es el menos predecible, con una oscilación típica de más de una vez y media su día promedio.
Cuenta los días vacíos
Marketplace no tuvo ninguna venta completada en 295 de los 1,096 días. Si agrupas los pedidos por
día sin rellenar esos días, desaparecen: la media sube a $1,046 y el CV baja a 1.23, lo que hace que
el canal parezca más estable de lo que es. Un día sin ventas es un día real con ingresos de 0. El
reindex(...).fillna(0) del código inicial los devuelve.
Errores comunes
- Comparar desviaciones estándar de grupos con medias distintas. Usa el CV, o compara la dispersión de cada grupo con su propio promedio.
- Descartar los días en cero. Agrupar pedidos por día solo crea los días que tuvieron pedidos. Arma primero el calendario completo.
- Usar el CV con datos que pueden ser negativos o tener un promedio cercano a cero. Dividir entre una media cercana a 0 hace que la razón se dispare; está pensado para cantidades positivas como los ingresos.
- Leer la volatilidad como algo malo. Un canal con grandes oscilaciones puede simplemente vender artículos caros. Aun así necesita más margen en el plan.
¡Linterna encendida!
Practicaste: standard deviationcoefficient of variationvolatilitygroupby
- Resuelto
- Sin pistas
- Al primer intento
