Creazione e confronto di gruppi: array associativi?Buongiorno!! Sono ormai un paio di settimane che sbatto la testa contro il muro per cercare di capirlo, ma sono a corto di idee.
Vorrei raggruppare tutti i Prime/Alternati su un elenco di build in gruppi che potrei poi confrontare con tutti gli altri Prime/Alternati su altri elenchi di build e formulare una raccomandazione per aggiungere alternative ad altri numeri di parte in base al Prime utilizzato.
In allegato è riportato un file di esempio. Per semplicità, ho fatto in modo che tutti i gruppi Prime/Alternativi inizino con lo stesso numero (cioè 20 o 40), ma le ultime cifre sono diverse. È possibile formare gruppi iniziali di numeri di parte esaminando assemblaggio e posizione, quindi aggiungere gruppi ad altri se hanno elementi in comune. Stavo cercando di utilizzare gli array associativi, ma non sono sicuro che sia l'approccio giusto.
Grazie a tutti in anticipo per qualsiasi aiuto possiate offrire!
Ri: Creazione e confronto di gruppi - Array associativi?Grazie a tutti per il vostro contributo!Ho condiviso il problema con un collega e lui ha trovato un approccio alternativo: più un approccio di forza bruta.
In allegato c'è lo script che fa quello che sto cercando.Fondamentalmente, uniamo la tabella su se stessa per ottenere i numeri di parte in gruppi e poi ci uniamo nuovamente su assembly_location per ottenere tutti i relativi numeri di parte.
Dopo un po' di riepilogo e trasposizione avanti e indietro, il risultato è un elenco che ha tutti i gruppi Alternate/Prime in una singola colonna etichettata da un valore di raggruppamento.
Grazie ancora!
Brian
Ri: Creazione e confronto di gruppi - Array associativi?@SirBWhite poni un problema interessante e mi aspetto che ci siano metodi eleganti per farlo. quello di Jim, @txnelson 's, il suggerimento mi ha fatto pensare ai tipi di bolle e alle analisi dei tipi di somiglianza.Mi aspetto che ci siano alcune soluzioni di text mining e metriche sulla distanza del testo che renderebbero questo compito facile.
Sulla base della tua discussione con Jim, riorganizzerei i dati:
- Dividi il tavolo e
- Ordinalo
La tabella risultante (una parte mostrata di seguito) ridurrebbe drasticamente la selezione di gruppi comparabili.

Ecco un'immagine grafica di questa tabella

Lo script per farlo è allegato.Quello che farei è il seguente:
- Aggiungere una colonna nella colonna originale denominata Codice tipo che sia 2 quando Tipo = PRM e 1 quando Tipo = ALT.
- Quindi dividere la tabella (temp) e ricodificare i dati mancanti con zero
- Vorrei comunque ordinare la tabella, ma questo non è necessario.
Questa tabella con le colonne delle parti che ora sono colonne numeriche può essere utilizzata negli algoritmi cluster e negli algoritmi dei vicini più vicini.
Ri: Creazione e confronto di gruppi - Array associativi?Grazie @txnelson !Questo approccio mi piace, ma non tutti i miei assiemi possono essere costruiti con gli stessi numeri di parte e sarebbe difficile esaminare migliaia di assiemi e parti.Probabilmente ho semplificato troppo il mio esempio e vi ho aggiunto sopra una spiegazione molto complessa.
Ho fatto alcuni progressi su un approccio che penso funzionerà.Sono stato in grado di capire come creare dinamicamente array associativi per ogni posizione di assieme e i numeri di parte che lo accompagnano.Ecco la sceneggiatura:
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;
Ora voglio confrontare ciascun array con gli altri e vedere se c'è qualche sovrapposizione.Se c'è, voglio combinare gli array. Ad esempio, guardando 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). Il risultato sarebbe: (20-0002, 20-0003, 20-0004, 20-0005, 20-0007).
Pensavo di poter utilizzare l'operazione di intersezione, ma questa sostituisce il primo array con i risultati dell'intersezione:
//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"));Ma questo mi dà solo l'intersezione di aa1 e aa3 più aa3 o {"20-0002", "20-0003", "20-0005", "20-0007"} Ho escluso "20-0004" che era originariamente parte di aa1.
La mia domanda è composta da due parti:
1. Esiste un modo per confrontare gli array e quindi combinare entrambi gli array per includere tutte le chiavi?
2. Come confronterei tutti gli array con tutti gli altri array? Presumo una sorta di For Loop.
Ri: Creazione e confronto di gruppi - Array associativi?Vuoi qualcosa di simile, in cui puoi vedere quali assiemi non sono stati utilizzati per codici articolo specifici?

Ri: Creazione e confronto di gruppi - Array associativi?Ci scusiamo per la spiegazione confusa. Spero che questo lo chiarisca un po': alla fine, vorrei vedere il seguente gruppo {"20-0002", "20-0003", "20-0004", "20-0005", "20- 0007”} che posso paragonare a tutti gli altri Assemblee. Ad esempio, il codice prodotto 20-0007 non viene richiamato su KBR175, TRT330 o KNW995 e lo consigliamo come alternativa.
Ri: Creazione e confronto di gruppi - Array associativi?La tua spiegazione mi confonde.Sarebbe possibile fornire un piccolo esempio di quello che ti aspetti che sia il risultato?