1. Faro

Nivel 10 · Desafío final: ingresos por canal, a mano

La solicitud

De Megan Collins, Directora de Ventas

“El panel está roto y tengo una reunión en una hora. Aquí tienes una exportación sin procesar de los pedidos de esta mañana. Necesito los ingresos por canal, solo de los pedidos completados.”

Tu objetivo

Paso 1 de 3. Asigna a result una lista con los valores de order_id de los pedidos cuyo estado es 'completed', en su orden original.

  • Guarda una lista de 4 en resultpendiente

Paso 1 · tu código

Python

Cargando el editor…

    ResultadoPresiona Ejecutar para ver el tuyo

    Mote revisa tu resultado

    Presiona Ejecutar. Cada fila que cumple el objetivo se vuelve una luciérnaga en tu linterna.

    Paso 2 · tu código

    Python

    Cargando el editor…

      ResultadoPresiona Ejecutar para ver el tuyo

      Mote revisa tu resultado

      Presiona Ejecutar. Cada fila que cumple el objetivo se vuelve una luciérnaga en tu linterna.

      Paso 3 · tu código

      Python

      Cargando el editor…

        ResultadoPresiona Ejecutar para ver el tuyo

        Mote revisa tu resultado

        Presiona Ejecutar. Cada fila que cumple el objetivo se vuelve una luciérnaga en tu linterna.

        La lección

        Datos anidados

        Las exportaciones reales rara vez son planas. Aquí cada pedido es un diccionario, y uno de sus valores, items, es a su vez una lista de pares (quantity, unit_price). Es un pedido con muchas líneas, la misma relación que tienen orders y order_items en la base de datos de Harbor & Pine.

        Para trabajar con datos anidados, pela una capa a la vez:

        order = orders[0]
        order["items"]            # [(2, 49.99), (1, 34.0)]
        order["items"][0]         # (2, 49.99)
        qty, price = order["items"][0]   # unpack the pair

        Una pareja entre paréntesis es una tupla: como una lista, pero fija una vez creada. Las tuplas son habituales para grupos pequeños de valores que van juntos.

        Paso 1: filtrar

        Esto lo hiciste en el nivel anterior. Una comprehension con una condición conserva los ID de los pedidos completados:

        [o["order_id"] for o in orders if o["status"] == "completed"]

        Los pedidos cancelados, reembolsados y pendientes no son ingresos. Decidir qué estados cuentan es una decisión de negocio; indícalo siempre en tu respuesta para que nadie compare tu número con uno que incluye reembolsos.

        Paso 2: calcular el total de cada pedido

        El total de un pedido es la suma de sus líneas. sum() acepta una expresión generadora, una comprehension sin los corchetes, así que no necesitas construir una lista temporal:

        sum(qty * price for qty, price in order["items"])

        Envuélvela en una comprehension de diccionario y obtienes una tabla de búsqueda del ID del pedido a su total, para todos los pedidos completados de una vez.

        Paso 3: agrupar y sumar

        Los ingresos por canal son el patrón de conteo de antes, salvo que sumas el total del pedido en lugar de 1:

        revenue = {}
        for o in orders:
            if o["status"] != "completed":
                continue
            total = sum(qty * price for qty, price in o["items"])
            revenue[o["channel"]] = revenue.get(o["channel"], 0) + total

        continue salta directamente al siguiente pedido. Es una forma ordenada de descartar filas pronto en lugar de anidar el resto del cuerpo dentro de un if.

        Redondea al final, una sola vez por canal. Luego comprueba: los totales de los canales deben sumar la suma de los totales de pedido del paso 2. Contrastar dos números calculados de maneras distintas es uno de los hábitos más baratos y eficaces que puede tener un analista.

        Lo que acabas de hacer

        Filtrar filas, calcular un valor por fila, agrupar por una categoría y sumar. Esa es la forma de una enorme parte de los informes de negocio. En el capítulo 6 harás lo mismo con 30,000 líneas de pedido en pandas en dos líneas de código, y sabrás exactamente qué hacen esas dos líneas.

        Errores comunes

        • Sumar los precios unitarios sin multiplicar por la cantidad.
        • Olvidar filtrar los pedidos cancelados y reembolsados en el paso 3.
        • Redondear cada pedido antes de sumarlo al canal, lo que puede desviar el total un centavo.

        Elige qué puede ejecutarse en este sitio. Puedes cambiarlo cuando quieras desde "Configurar cookies", al pie de cada página.