Connaître les couples de produits qui se vendent ensemble

Fermé
Son1 - 16 nov. 2017 à 13:34
 Son1 - 17 nov. 2017 à 10:45
[Question niveau Expert]

Bonjour à toutes et à tous,

Attention cette question me semble assez complexe et nécessite un très bon niveau d'excel (voir de gestion de bdd)

J'ai une base de données (excel) des articles commandés avec le n° de commande sur la ligne, ainsi que la quantité, comme ceci :

n° cmd | n° produit | qte

Je cherche à identifier les couples (de deux ou plus de 2 articles) qui se vendent le plus ensemble au sein d'une même commande.

Exemple :

n°cmd | n°produit | qte
-----------------------------
1 | A | 1
1 | B | 1
1 | C | 1
2 | C | 1
2 | A | 1
3 | A | 1
3 | C | 1

Résultats : Les couples les plus vendues ensemble :

1 - Couple AC : avec 3 counts
2 - Couple ABC : avec 1 count


Je cherche à effectuer cet exercice via un automatisme (formule excel ou macro) car j'ai une base de données de plus de 100.000 lignes.

Qu'en pensez-vous ? Est-ce possible avec Excel ? Suis-je obligé de le traité informatiquement via du SQL en injectant les données dans une BDD ?

5 réponses

michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
16 nov. 2017 à 14:29
Bobnjour

la difficulté vient des articles qui ne sont pas dans l'ordre pour chaque commande--> essaie un tri sur 2 clé clé1 commande clé2 article sur tes 100000 lignes et dis nous si ce n'est pas trop long...
autrement, ca devrait peut-^tre aller sans trop de problèmes
1
J'ai fait le tri, cela a fonctionné rapidement : moins de 2 secondes... ce qui est etonnant sur 100k ligne mais pourquoi pas... !

Le tri est ok, par contre je précise que j'ai à la fois des ref de Produits en integer et d'autres en varchar (donc je ne tri pas les numéros par ordre croissant mais par ordre alphabétique).
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
Modifié le 17 nov. 2017 à 10:39
Bonjour Eric, JvDo

Merci Eric de cette info de post-crossing sauvage

Dons, je ,e vais pas me casser la tête à écrire du code pour Son1

ca que j'avais prévu: tableaux virtuels et 2 objets dictionary

voici l'idée;

après le tri
dans le 1e tableau (mémorisation de la feuille), le dico1 parcours les commandes et fait les items (séparés par un espace ) de chaque commande qui donnera la liste de items ((dico.items) au besoin en tenant compte du nombre de couple vendus - par ex CA quantité 3 donnerait : CA CA CA

avec le dico2: on parcours la liste-items avec un split de chaque ligne ce qui, à chaque couple rencontré, on incrémente en item . la liste des clés obtenues (couple) à coté de la liste des items répond au recensement du nombre de fais ou le couple est vendu

apparemment, c'est du boulot mais pas si compliqué (je n'ai pas vu l'utilité d'employer du SQL)

je quitte donc cette discussion

Pour Son1
Tout d'abord je pense la demande n'est pas réalisable dans Excel
Alors pourquoi poser la question su r des forums Excel ?
 Michel
1
Bonjour michel_m,

Merci pour votre réponse sur le sujet, elle me conforte encore dans ma décision.

Non bien sûr, je ne demande pas de l'aide sur du code, j'en suis moi-même capable.

Pour la question sur Excel, non je savais pas initialement que cela n'était pas réalisable sur Excel, c'est le fruit d'une réflexion et d'un brainstorming avec des personnes maîtrisant excel qui m'ont amené à cette conclusion.

Pour le post-crossing sauvage, je n'ai pas du tout la même vision que vous : ce n'est pas parce que je répand l'information sur plusieurs canaux que je décrédibilise chacuns de ces canaux. Au contraire : c'est bien mieux pour les suivants qui auront plus de facilité à trouver la réponse à ce problème (et d'ailleurs la "solution" est venue beaucoup plus rapidement grâce au post-crossing). Vous faites une réaction épidermique au post-crossing simplement pour un amour inconditionnel envers votre canal de diffusion préféré.
0
JvDo Messages postés 1978 Date d'inscription mercredi 27 juillet 2005 Statut Membre Dernière intervention 28 septembre 2020 856
17 nov. 2017 à 02:55
Bonsoir,

Tu devrais nous fournir un tableau plus consistant (10 ou 15 000 lignes) de tes données (tu les rends anonymes bien sûr), et proche de ta réalité.
Ton exemple est trop simple pour que tu puisses généraliser une solution sur tes 100 000 lignes.

Combien as-tu de no de produits différents, combien de no de produits différents au maximum dans une commande, les quantités sont toujours à 1?
Si tu as 5 A, 2 B et 7 C dans une commande, tu considères que tu as 2 triplets (A, B, C), 5 couples (A, C), 2 (A, B) et 2 (B, C) ?

Cordialement
0
Je ne suis pas d'accord, avec cet exemple on peut déterminer un fonctionnement qui fonctionnera sur une infinité de ligne.

Après réflexion sur le sujet, la quantité des articles n'est pas utile pour l'étude.

Le nombre de ligne influera seulement sur la performance du calcul et sur le choix de la technologie : j'ai 1 million de ligne et cela me fait penser que cela ne sera pas réalisable dans Excel... !
0
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 213
17 nov. 2017 à 09:24
Bonjour,

c'est un travail conséquent que tu demandes.
Tu pourrais signaler les autres demandes pour ne pas faire chercher pour rien si c'est déjà trouvé ailleurs.
https://forum.excel-pratique.com/viewtopic.php?forum_uri=excel&t=101297&start=
eric
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Petite réponse à ma propre question :

- Tout d'abord je pense la demande n'est pas réalisable dans Excel, car cela demanderait environ 500.000 recherche dans un million de ligne : cela ferait planter Excel (à vérifier ?).

- La solution à laquelle j'avais déjà pensé et qui m'a été confirmé sur un autre forum est la suivante : Faire un algo qui tri les commandes et qui identifie les x couples de chaque commandes (on les insères dans un dictionnaire clé-valeur), et qui pour chacun de ces x couples recherche dans les 1 million de ligne commande s'il a une présence de ce couple et qui le compte. (dans le cas où un couple déjà existant est identifié dans une autre commande : on écrase pas le couple mais on incrémente). Je pense le faire en PL/SQL.


Voilà ce n'est surement pas la solution idéal, d'autant plus qu'elle ne sera pas fait sur Excel... Si d'autres personnes ont une meilleur solution je suis bien sûr preneur !
0