Conocer los pares de productos que se venden juntos
Son1
-
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?
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?
Enlaces relacionados:
- ¿Cómo desplazar curvas que se superponen/chegan?
- ¿Cómo saber qué producto ha sido el más vendido?
- error producida al enviar un comando al programa
- Cálculo de ventas mensuales de un producto
- conocer el porcentaje de llenado de un texto en una tabla de Excel
- fórmula de: producto constaté por adelantado en Excel
5 respuestas
-
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-
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).
-
-
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-
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.
-
-
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-
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...!
-
-
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 -
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!