Conocer los pares de productos que se venden juntos

Son1 -  
 Son1 -
[Pregunta de nivel experto]

Hola a todas y a todos,

Atención, esta pregunta me parece bastante compleja y requiere un muy buen nivel de Excel (o incluso de gestión de bases de datos)

Tengo una base de datos (Excel) de los artículos ordenados con el número de pedido en la línea, así como la cantidad, de la siguiente manera:

n° pedido | n° producto | cantidad

Busco identificar las combinaciones (de dos o más artículos) que se venden más juntas dentro de un mismo pedido.

Ejemplo:

n°pedido | n°producto | cantidad
-----------------------------
1 | A | 1
1 | B | 1
1 | C | 1
2 | C | 1
2 | A | 1
3 | A | 1
3 | C | 1

Resultados: Las combinaciones más vendidas juntas:

1 - Pareja AC: con 3 conteos
2 - Pareja ABC: con 1 conteo

Busco realizar este ejercicio a través de un automatismo (fórmula de Excel o macro) ya que tengo una base de datos de más de 100,000 filas.

¿Qué opinan? ¿Es posible con Excel? ¿Estoy obligado a tratarlo informáticamente a través de SQL inyectando los datos en una base de datos?

5 respuestas

  1. michel_m Mensajes publicados 18903 Fecha de registro   Estado Colaborador Última intervención   3 320
     
    Hola

    la dificultad viene de los artículos que no están en el orden para cada pedido--> intenta un ordenamiento por 2 claves clave1 pedido clave2 artículo en tus 100000 líneas y dime si no es demasiado largo...
    de lo contrario, debería funcionar sin demasiados problemas

    --
     Michel
    1
    1. Son1
       
      He hecho la ordenación, funcionó rápido: menos de 2 segundos... lo cual es sorprendente en 100k líneas, pero ¿por qué no...?

      La ordenación está bien, sin embargo, aclaro que tengo tanto referencias de productos en integer como en varchar (así que no ordeno los números en orden creciente, sino en orden alfabético).
      0
  2. michel_m Mensajes publicados 18903 Fecha de registro   Estado Colaborador Última intervención   3 320
     
    Hola Eric, JvDo

    Gracias Eric por esta información sobre el post-crossing salvaje

    Entonces, no voy a complicarme la vida escribiendo código para Son1

    Eso es lo que había previsto: tablas virtuales y 2 objetos diccionario

    Aquí está la idea;

    después de la clasificación
    en la primera tabla (memorización de la hoja), el diccionario1 recorre los pedidos y crea los items (separados por un espacio) de cada pedido que dará la lista de items ((diccionario.items) si es necesario teniendo en cuenta el número de parejas vendidas - por ejemplo, CA cantidad 3 daría: CA CA CA

    con el diccionario2: recorremos la lista de items con un split de cada línea lo que, al encontrar cada pareja, incrementa en item. La lista de claves obtenidas (pareja) al lado de la lista de items responde al censo del número de veces que la pareja ha sido vendida

    aparentemente, es un trabajo pero no tan complicado (no vi la utilidad de emplear SQL)

    por lo tanto, abandono esta discusión

    Para Son1
    En primer lugar creo que la solicitud no es realizable en Excel
    Entonces, ¿por qué hacer la pregunta en foros de Excel?
    Michel
    1
    1. Son1
       
      Hola michel_m,

      Gracias por tu respuesta sobre el tema, me reafirma aún más en mi decisión.

      No, claro, no pido ayuda con el código, soy capaz de hacerlo yo mismo.

      En cuanto a la pregunta sobre Excel, no sabía inicialmente que eso no era realizable en Excel, es el fruto de una reflexión y de una lluvia de ideas con personas que dominan Excel y que me llevaron a esta conclusión.

      Respecto al post-crossing salvaje, no tengo en absoluto la misma visión que tú: no es porque difunda la información en varios canales que desacredito cada uno de esos canales. Al contrario: es mucho mejor para los siguientes que tendrán más facilidad para encontrar la respuesta a este problema (y de hecho la "solución" llegó mucho más rápido gracias al post-crossing). Tienes una reacción epidérmica ante el post-crossing simplemente por un amor incondicional hacia tu canal de difusión preferido.
      0
  3. JvDo Mensajes publicados 1924 Fecha de registro   Estado Miembro Última intervención   859
     
    Hola,

    Deberías proporcionarnos una tabla más consistente (10 o 15,000 líneas) de tus datos (por supuesto, haciéndolos anónimos) y cercana a tu realidad.
    Tu ejemplo es demasiado simple para que puedas generalizar una solución sobre tus 100,000 líneas.

    ¿Cuántos números de productos diferentes tienes? ¿Cuántos números de productos diferentes como máximo hay en un pedido, las cantidades siempre son 1?
    Si tienes 5 A, 2 B y 7 C en un pedido, ¿consideras que tienes 2 tripletas (A, B, C), 5 pares (A, C), 2 (A, B) y 2 (B, C)?

    Atentamente
    0
    1. Son1
       
      No estoy de acuerdo, con este ejemplo podemos determinar un funcionamiento que funcionará en una infinidad de líneas.

      Después de reflexionar sobre el tema, la cantidad de artículos no es útil para el estudio.

      El número de líneas solo influirá en el rendimiento del cálculo y en la elección de la tecnología: tengo 1 millón de líneas y eso me hace pensar que no será realizable en Excel...!
      0
  4. eriiic Mensajes publicados 24581 Fecha de registro   Estado Colaborador Última intervención   7 281
     
    Hola,

    es un trabajo considerable lo que pides.
    Podrías señalar las otras solicitudes para no hacer buscar en vano si ya se ha encontrado en otro lugar.
    https://forum.excel-pratique.com/viewtopic.php?forum_uri=excel&t=101297&start=
    eric

    --
    Al intentar continuamente, se acaba por conseguir.
    Así que cuanto más falla, más probabilidades hay de que funcione. (los Shadoks)
    Además de las gracias (¡sí, sí, se hace!), piensa en marcar como resuelto. Gracias
    0
  5. Son1
     
    Pequeña respuesta a mi propia pregunta:

    - En primer lugar, creo que la solicitud no es realizable en Excel, ya que requeriría alrededor de 500,000 búsquedas en un millón de filas: eso haría que Excel se congelara (¿hay que verificar?).

    - La solución a la que ya había pensado y que me fue confirmada en otro foro es la siguiente: Hacer un algoritmo que ordene los pedidos e identifique los x pares de cada pedido (los insertamos en un diccionario clave-valor), y que para cada uno de estos x pares busque en el millón de filas de pedidos si hay presencia de este par y lo cuente. (en el caso de que un par ya existente se identifique en otro pedido: no reemplazamos el par, sino que lo incrementamos). Creo que lo haré en PL/SQL.

    Bueno, seguramente no es la solución ideal, especialmente porque no se hará en Excel... Si otras personas tienen una mejor solución, ¡por supuesto que la acepto!
    0