Reducción de 80 valores únicos a 10 valores únicosTengo una columna en mi tabla de datos que tiene más de 80 valores de texto únicos (nominales). Me gustaría tomar estos 80 valores nominales y reducirlos a 10 en JSL combinando los valores que no están en los diez primeros (por la cantidad de ocurrencias) en un grupo llamado "otro". ¿Cuál es la forma más sencilla de lograr esto en JSL? ¡Gracias por tu ayuda!
Re: Reducir 80 valores únicos a 10 valores únicos @twillkickers , la respuesta a su pregunta es "sí", con JSL puede manipular el Generador de gráficos o el Diagrama de Pareto para proporcionar la pantalla que está buscando. Sin embargo, la opción Barra empaquetada en Graph Builder le brinda casi todo lo que desea (excepto la etiqueta para el total combinado de sus causas finales). Para mostrar este total se requerirá alguna manipulación como se mencionó anteriormente. Algo para considerar antes de decidir si las manipulaciones adicionales merecen la pena, es que este total es en realidad información redundante: la altura relativa de la barra y el eje y transmiten visualmente esta información.
Dicho esto, si aún necesita que se muestre el total de las "otras" columnas, aquí tiene un enfoque que podría tomar (aún utilizando Nicardipine.jmp como ejemplo):
Use el script de la plataforma de distribución proporcionado anteriormente para crear una columna para los niveles de causa (1-9 y 10+)
Cree una columna de fórmula para sus nuevas categorías, es decir:
If( :Level Investigator Name < 10, :Investigator Name, "Other")
Use Graph Builder para crear un gráfico de barras para las nuevas categorías ordenadas por la columna Niveles (suponiendo que desea que la categoría “Otro” esté a la derecha; de lo contrario, haga clic con el botón derecho en el eje y seleccione orden por conteo para ver dónde encaja “Otro” dentro de sus 9 causas principales):
Graph Builder(
Size( 869, 318 ),
Show Control Panel( 0 ),
Variables(
X(
:New Investigator Name,
Order By(
:Level Investigator Name,
Ascending,
Order Statistic( "Sum" )
)
)
),
Elements( Bar( X, Legend( 3 ), Label( "Label by Value" ) ) )
);
Todas estas acciones se pueden pegar juntas para crear un script. Si necesita ayuda con esto, le sugeriría que consulte la Ayuda-> Libros-> Guía de secuencias de comandos y la Ayuda-> Índice de secuencias de comandos y busque “Nueva columna” para obtener la sintaxis para crear una nueva columna de fórmula en su tabla de datos.
Re: Reducir 80 valores únicos a 10 valores únicos @jerry_cooper gracias. Tengo una pregunta sobre la parcela de Pareto. ¿Puede JSL tomar automáticamente todo lo que no sea las diez causas principales y agruparlas en una barra "Otra", en lugar de que yo tenga que especificar las causas que quiero agrupar individualmente? Cuando le digo al generador de gráficos que agrupe todo lo que no sea los primeros 10 valores, el código JSL termina pareciéndose a esto:
Pareto Plot(
Cause( :Cause ),
Show **bleep** Percent Curve( 0 ),
Combine Causes(
{"Cause1","Cause2","Cause3","Cause4","Cause5","Cause6"}
),
SendToReport(
Dispatch( {"Plots"}, "102", ScaleBox, {Max( 4512.67559361611 )} ),
Dispatch( {"Plots"}, "106", ScaleBox, {Max( 100.059325800801 )} ),
Dispatch( {"Plots"}, "Pareto Report", FrameBox, {Frame Size( 1061, 702 )} )
)
);Para mi aplicación, las causas pueden cambiar de prioridad de vez en cuando. Me gustaría que JSL recalcule automáticamente las diez causas principales cada vez que se genere el diagrama de Pareto.
Re: Reducir 80 valores únicos a 10 valores únicos @twillkickers Si está en lo correcto, el gráfico Barras empaquetadas solo mostrará los valores de las barras primarias. Si debe mostrar los valores, el método más simple puede ser utilizar la opción Pareto Parcela (tenga en cuenta que he desactivado la curva de porcentaje acumulativo y escogí etiquetas y un color uniforme del menú del triángulo rojo Causas):
Re: Reducir 80 valores únicos a 10 valores únicos @jerry_cooper , ¡gracias por tu ayuda! Cuando se utiliza el estilo de barra "Empacado", ¿hay alguna forma de etiquetar la barra con las otras categorías? Mis etiquetas de cantidad para cada barra solo aparecen en las barras no empaquetadas. Gracias por tu ayuda.
Re: Reducir 80 valores únicos a 10 valores únicosHola @twillkickers ,
No estoy seguro de cuál es el objetivo final de su solicitud, pero si se trata de crear un gráfico de estilo Pareto, puede lograrlo sin necesidad de crear secuencias de comandos o crear una nueva columna.
Si tiene la versión 14, el nuevo elemento "Barras empaquetadas" en Graph Builder hará lo que usted describe. Usando la tabla de datos de Nicardipine.jmp desde el directorio de Datos de muestra, arrastre la columna Nombre del investigador a la función Y, luego seleccione "Empaquetado" como el Estilo de barra, escriba 9 en las Primarias empaquetadas, y finalmente, seleccione "Pila separada" de la lista desplegable Emplazamiento de paquete:

Otra opción, en particular para las versiones anteriores a la v14, puede seleccionar el gráfico de Pareto en el menú Calidad y proceso. Desde el menú Triángulo rojo en el gráfico, seleccione Causas => Combinar causas en el elemento del menú, elija el botón de opción "Causas pasadas" e ingrese 71 en el cuadro de número:

Si realmente desea que una secuencia de comandos cree una nueva columna con los niveles 1-10, lo siguiente (mediante la plataforma de distribución) es una forma. Simplemente sustituya su tabla de datos y nombres de columnas cuando sea apropiado:
Names Default to Here( 1 );
dt = Open("$Sample_Data/Nicardipine.jmp");
dist = Distribution( Nominal Distribution( Column( :Investigator Name ) ) );
dist << Order By( Count Descending );
dist << Save( Level Numbers );
dist << Close Window;
therows = dt << Get Rows Where( :Level Investigator Name >= 10 );
dt:Level Investigator Name[ therows ] = 10;
Espero que esto ayude.
Re: Reducir 80 valores únicos a 10 valores únicos @twillkickers ,
Hay muchas formas de hacer lo que quieras. Como tabular, distribución o resumen. Le mostraré cómo implementar utilizando el enfoque de resumen
// Open Sample Data Table
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
// Get frequency
dt1 = dt << Summary(
Group( :name ),
Freq( "None" ),
Weight( "None" )
);
// Let us assume weight column in this data table represents the frequency in your case
dt2 = dt1 << Sort(By(:N Rows),Order(descending));
// Select only top 10
dt2 << Select Rows(Index(1,10));
// If you want to hide and exclude the remaining
dt2 << Invert Row Selection << hide and exclude ;
// OR
// If you want to delete the rows
dt2 << Delete Rows; Re: Reducir 80 valores únicos a 10 valores únicos¿Cómo creo una columna que enumera la frecuencia de los valores de texto únicos?
Re: Reducir 80 valores únicos a 10 valores únicos @twillkickers ,
¿También tiene una columna que enumera la frecuencia o el número de ocurrencias de cada uno de los valores de texto únicos? Si no lo hace, el primer paso es obtener esos datos en su tabla de datos. Una vez que esté disponible, puede ordenar la columna en orden descendente y seleccionar las 10 filas principales. Así es como lo haría:
// Open Sample Data Table
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
// Let us assume weight column in this data table represents the frequency in your case
dt1 = dt << Sort(By(:weight),Order(descending));
// Select only top 10
dt1 << Select Rows(Index(1,10));
// If you want to hide and exclude the remaining
dt1 << Invert Row Selection << hide and exclude ;
// OR
// If you want to delete the rows
dt1 << Delete Rows;