Creación y comparación de grupos - ¿Matrices asociativas?¡¡Buenos días!! Me he estado golpeando la cabeza contra la pared durante un par de semanas para tratar de resolver esto, pero me he quedado sin ideas.
Me gustaría agrupar todos los principales/alternativos en una lista de compilación en grupos que luego podría comparar con todos los demás principales/alternativos en otras listas de compilación y hacer una recomendación para agregar alternativos a otros números de pieza según el principal que se utiliza.
Se adjunta un archivo de muestra. Para simplificar, hice que todos los grupos principales/alternativos comiencen con el mismo número (es decir, 20 o 40), pero los últimos dígitos son diferentes. Los grupos iniciales de números de pieza se pueden formar observando el ensamblaje y la ubicación, y luego agregar grupos a otros si tienen algo en común. Estaba tratando de usar matrices asociativas, pero no estoy seguro de si ese es el enfoque correcto.
¡Gracias a todos de antemano por cualquier ayuda que puedan ofrecer!
Re: Creando y Comparando Grupos - Matrices Asociativas?¡Gracias por su aportación a todos ustedes!Compartí el problema con un colega y se le ocurrió un enfoque alternativo: más un enfoque de fuerza bruta.
Adjunto está el script que hace lo que estoy buscando.Básicamente, unimos la tabla sobre sí misma para obtener los números de pieza en grupos y luego nos unimos nuevamente en la ubicación_ensamblaje para obtener todos sus números de pieza.
Después de resumir y transponer de un lado a otro, el resultado es una lista que tiene todos los grupos alternativos/principales en una sola columna etiquetados por un valor de agrupación.
¡Gracias de nuevo!
Brian
Re: Creando y Comparando Grupos - Matrices Asociativas?@SirBWhite usted plantea un problema interesante, y espero que haya métodos elegantes para hacerlo. Jim's, @txnelson 's, la sugerencia me hizo pensar en tipos de burbuja y análisis de tipo de similitud.Espero que haya algunas soluciones de minería de texto y métricas de distancia de texto que hagan que esta sea una tarea fácil.
Según su conversación con Jim, reorganizaría los datos:
- Partir la mesa, y
- Ordénalo
La tabla resultante (una parte que se muestra a continuación) reduciría drásticamente la selección de ensamblajes comparables.

Aquí hay una imagen gráfica de esta tabla.

El script para hacer esto adjunto.Yo lo que haría es lo siguiente:
- Agregue una columna en la columna original denominada Código de tipo que sea 2 cuando Tipo = PRM y 1 cuando Tipo = ALT.
- Luego divida la tabla (temp) y vuelva a codificar con cero
- Todavía ordenaría la mesa, pero esto es innecesario.
Esta tabla con las columnas de partes que ahora son columnas numéricas se puede usar en algoritmos de clúster y algoritmos de vecinos más cercanos.
Re: Creando y Comparando Grupos - Matrices Asociativas?Gracias @txnelson !Me gusta este enfoque, pero no todos mis ensamblajes se pueden construir con los mismos números de pieza y sería difícil ver miles de ensamblajes y piezas.Probablemente simplifiqué demasiado mi ejemplo y agregué una explicación muy compleja encima.
Hice algunos progresos en un enfoque que creo que funcionará.Pude descubrir cómo crear dinámicamente matrices asociativas para cada ubicación de ensamblaje y los números de pieza que lo acompañan.Aquí está el guión:
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;
Ahora quiero comparar cada matriz con las demás y ver si hay alguna superposición.Si lo hay, quiero combinar las matrices. Por ejemplo, mirando 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). El resultado sería: (20-0002, 20-0003, 20-0004, 20-0005, 20-0007).
Pensé que podría usar la operación de intersección, pero eso reemplaza la primera matriz con los resultados de la intersección:
//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"));Pero esto solo me da la intersección de aa1 y aa3 más aa3 o {"20-0002", "20-0003", "20-0005", "20-0007"} He excluido "20-0004" que originalmente era parte de aa1.
Mi pregunta tiene dos partes:
1. ¿Hay alguna manera de comparar arreglos y luego combinar ambos arreglos para incluir todas las claves?
2. ¿Cómo compararía todas las matrices con todas las demás matrices? Supongo que algún tipo de For Loop.
Re: Creando y Comparando Grupos - Matrices Asociativas?¿Quiere algo como esto, donde pueda ver qué ensamblajes no se han utilizado para números de pieza específicos?

Re: Creando y Comparando Grupos - Matrices Asociativas?Perdón por la explicación confusa. Espero que esto lo aclare un poco: Al final, me gustaría ver el siguiente grupo {"20-0002", "20-0003", "20-0004", "20-0005", "20- 0007”} que puedo comparar con todos los demás ensamblajes. Por ejemplo, el número de pieza 20-0007 no se menciona en KBR175, TRT330 o KNW995 y desea recomendarlo como alternativa.
Re: Creando y Comparando Grupos - Matrices Asociativas?Me confunde tu explicación.¿Sería posible proporcionar una pequeña muestra de lo que espera que sea el resultado?