La solicitud

De Laura Bennett, Directora de Finanzas
Tu objetivo
Usando las líneas de pedido con quantity > 0 de pedidos con status 'completed' hechos en 2025, calcula el valor de cada pedido (suma de quantity * unit_price * (1 - discount_pct / 100)). Asigna a result un dict con las claves q1, q3 (los percentiles 25 y 75 del valor del pedido), upper_fence (q3 + 1.5 * (q3 - q1)), todas redondeadas a 2, y n_outliers (el número de pedidos con un valor por encima de upper_fence, un int).
- Usa el DataFrame
orderspendiente - Usa el DataFrame
order_itemspendiente - Guarda un dict en
resultpendiente
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 Laura, 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
Una regla en lugar de una impresión
“Inusualmente grande” necesita una definición que puedas escribir y repetir. La habitual es la regla de 1,5 × IQR, la misma regla que usa un boxplot para sus bigotes:
- calcula Q1 y Q3, los percentiles 25 y 75;
- el IQR es Q3 - Q1, la dispersión de la mitad central;
- el límite superior es Q3 + 1,5 × IQR, el límite inferior Q1 - 1,5 × IQR;
- los valores más allá de un límite son valores atípicos.
Funciona con datos sesgados como los valores de pedidos porque los cuartiles, a diferencia de la media y la desviación típica, no se ven arrastrados por los extremos que intentan detectar.
En pandas
quantile acepta una lista y devuelve un valor por fracción, que se desempaqueta cómodamente:
q1, q3 = order_value.quantile([0.25, 0.75]) # 87.94, 650.48
iqr = q3 - q1 # 562.53
upper = q3 + 1.5 * iqr # 1494.27
lower = q1 - 1.5 * iqr # negative: no low outliers possible
outliers = order_value[order_value > upper]
len(outliers) # 370
De los 4.295 pedidos completados de 2025, 370 están por encima de $1,494.27, un 8,6 % aproximadamente. Es más de lo que verías en una distribución simétrica, que es otra vez la cola larga a la derecha.
Un boxplot de seaborn de una sola Series muestra lo mismo: sns.boxplot(x=order_value). Cada punto a
la derecha del bigote es uno de esos 370 pedidos, y un axvline en el límite hace visible la regla.
Atípico no es lo mismo que erróneo
El siguiente paso es mirar quiénes son los valores atípicos, nunca eliminarlos a primera vista. Unir el segmento muestra que 256 de los 370 vienen de cuentas business, que son aproximadamente una cuarta parte de todos los pedidos. Son inusuales, y son algunos de los pedidos más valiosos de la tienda. Descartarlos recortaría una gran parte de los ingresos de todos los totales.
Lo que hagas depende de la pregunta. Para “¿cómo es un pedido típico?”, informa la mediana, que de todos modos ellos no mueven. Para los ingresos, consérvalos. Para un modelo que ellos desajustarían, límítalos o segméntalos, y anota esa decisión y por qué. Un valor atípico que es un error real, como una cantidad negativa, es un problema de limpieza con su propia regla.
Errores comunes
- Usar
quantile(25): quantile recibe fracciones, 0.25 y 0.75. - Calcular los límites sobre líneas de pedido en lugar de pedidos.
- Descartar valores atípicos sin comprobar qué son.
- Olvidar que el límite inferior existe. Aquí es negativo, así que no marca nada, pero dilo.
¡Linterna encendida!
Practicaste: outliersiqrquantileboxplotfences
- Resuelto
- Sin pistas
- Al primer intento
