Créer et comparer des groupes - Tableaux associatifs ?Bonjour!! Cela fait quelques semaines que je me cogne la tête contre le mur pour essayer de comprendre ce problème, mais je suis à court d'idées.
Je voudrais regrouper tous les Prime/Alternates sur une liste de construction en groupes que je pourrais ensuite comparer à tous les autres Prime/Alternates sur d'autres listes de construction et faire une recommandation pour ajouter des Alternatives à d'autres numéros de pièce en fonction du Prime utilisé.
Ci-joint un exemple de fichier. Pour plus de simplicité, j'ai fait en sorte que tous les groupes Prime/Alternate commencent par le même numéro (c'est-à-dire 20 ou 40), mais les derniers chiffres sont différents. Des groupes initiaux de numéros de pièces peuvent être formés en examinant l'assemblage et l'emplacement, puis en ajoutant des groupes à d'autres s'ils ont des points communs. J'essayais d'utiliser des tableaux associatifs, mais je ne sais pas si c'est la bonne approche.
Merci à tous d'avance pour toute aide que vous pouvez offrir !
Re : Création et comparaison de groupes – Tableaux associatifs ?Merci à tous pour votre participation!J'ai partagé le problème avec un collègue et il a proposé une approche alternative : une approche plus proche de la force brute.
Ci-joint le script qui fait ce que je recherche.Fondamentalement, nous rejoignons la table sur elle-même pour obtenir les numéros de pièce en groupes, puis nous rejoignons à nouveau sur assembly_location pour obtenir tous leurs numéros de pièce.
Après quelques résumés et transpositions, le résultat est une liste contenant tous les groupes Alternate/Prime dans une seule colonne étiquetée par une valeur de regroupement.
Merci encore!
Brian
Re : Création et comparaison de groupes – Tableaux associatifs ?@SirBWhite vous posez un problème intéressant, et j'espère qu'il existe des méthodes élégantes pour y parvenir. Celui de Jim, @txnelson Cette suggestion m'a fait réfléchir aux tris de bulles et aux analyses de types de similarité.Je pense qu'il existe des solutions d'exploration de texte et des mesures de distance de texte qui rendraient cette tâche facile.
Sur la base de votre discussion avec Jim, je réorganiserais les données :
- Divisez la table, et
- Trier
Le tableau résultant (une partie est présentée ci-dessous) réduirait considérablement la sélection d'assemblages comparables.

Voici une image graphique de ce tableau

Le script pour ce faire est joint.Ce que je ferais est le suivant :
- Ajoutez une colonne dans la colonne d'origine appelée Type Code qui vaut 2 lorsque Type = PRM et 1 lorsque Type = ALT.
- Puis divisez la table (temp) et recodez ce qui manque avec zéro
- Je trierais quand même le tableau, mais ce n'est pas nécessaire.
Ce tableau avec les colonnes de pièces étant désormais des colonnes numériques peut être utilisé dans les algorithmes de cluster et les algorithmes du voisin le plus proche.
Re : Création et comparaison de groupes – Tableaux associatifs ?Merci @txnelson !J'aime cette approche, mais tous mes assemblages ne peuvent pas être construits avec les mêmes numéros de pièces et il serait difficile d'examiner des milliers d'assemblages et de pièces.J'ai probablement trop simplifié mon exemple et ajouté une explication très complexe par-dessus.
J'ai fait quelques progrès sur une approche qui, je pense, fonctionnera.J'ai pu comprendre comment créer dynamiquement des tableaux associatifs pour chaque emplacement d'assemblage et les numéros de pièces qui l'accompagnent.Voici le scénario :
dt=Data Table( "Example" );
//Combine columns to get a single unique identifer for each row
dt << Combine Columns(
delimiter( "_" ),
Columns( :Assembly, :Location ),
Selected Columns are Indicator Columns( 0 ),
Column Name( "Assembly_Location" )
);
//Creates columns for each Assembly_Location - Grouping Like Part numbers together
dt1=dt << Split(
Split By( :Assembly_Location ),
Split( :Part Number ),
Remaining Columns( Drop All ),
Sort by Column Property, <BR /> Table Name ("Transposed Example")
);
//Get all column names as a list
allnames=dt1<<GET column="" names=""></GET>//Create an associative array for every column with the column name used as the array name
for (i = 1, i <= nitems(allnames), i++,
<BR />// If it's a string column then create the column name and an array name for use as a dynamic input
if (is string(allnames[i]),
col_name = "dt1:Name(\!"" || allnames[i]||"\!")" ;
array_name = "aa" || allnames[i];
// Build associative array string dynamically and then execute it.
str = evalinsert(
"\[^array_name^=Associative Array (^col_name^) ;]\");
eval(parse(str));
);
);
aaKBR175_001;<BR />aaKBR175_002;<BR />aaKBR175_003;
Maintenant, je veux comparer chaque tableau aux autres et voir s'il y a un chevauchement.Si tel est le cas, je souhaite combiner les tableaux. Par exemple, en regardant KBR175-001 (20-0002, 20-0003, 20-0004, 20-0005), TRT330-003 (20-0002, 20-0003, 20-0004), NTE484-001 (20-0002, 20-0003, 20-0005 , 20-0007), KNW995-002 (20-0002, 20-0003, 20-0004, 20-0005). Le résultat serait : (20-0002, 20-0003, 20-0004, 20-0005, 20-0007).
Je pensais pouvoir utiliser l'opération d'intersection, mais cela remplace le premier tableau par les résultats de l'intersection :
//Creates an Associative Array for each two columns
aa1=Associative Array (dt1:Name("KBR175_001") );
aa3=Associative Array (dt1:Name("NTE484_001") );
//Looks for overlap<BR />aa1 << intersect ( aa3 );
Show(N Items(aa1));
//If there is overlap, it combines the two Arrays into one, otherwise it returns "no"
if (N Items (aa1)>0, aa1<< Insert( aa3 ), Show("no"));Mais cela me donne seulement l'intersection de aa1 et aa3 plus aa3 ou {"20-0002", "20-0003", "20-0005", "20-0007"} J'ai exclu "20-0004" qui était à l'origine partie de aa1.
Ma question est en deux parties :
1. Existe-t-il un moyen de comparer les tableaux, puis de combiner les deux tableaux pour inclure toutes les clés ?
2. Comment puis-je comparer tous les tableaux à tous les autres tableaux ? Je suppose une sorte de boucle For.
Re : Création et comparaison de groupes – Tableaux associatifs ?Voulez-vous quelque chose comme ceci, où vous pouvez voir quels assemblages n'ont pas été utilisés pour des numéros de pièce spécifiques ?

Re : Création et comparaison de groupes – Tableaux associatifs ?Désolé pour l'explication confuse. J'espère que cela clarifie un peu les choses : à la toute fin, j'aimerais voir le groupe suivant {"20-0002", "20-0003", "20-0004", "20-0005", "20- 0007”} que je peux comparer à toutes les autres Assemblées. Par exemple, le numéro de pièce 20-0007 n'est pas indiqué sur KBR175, TRT330 ou KNW995 et nous souhaitons le recommander comme alternative.
Re : Création et comparaison de groupes – Tableaux associatifs ?Votre explication me prête à confusion.Serait-il possible de fournir un petit échantillon de ce que vous attendez du résultat ?