在图形生成器中获取分组(面板)的计数以检查可视化是否合理所以我写了一些 JSL,它能够获取数据表并提出图表建议。 它检查唯一值的数量、列数据类型和列名称,以评估哪个图形最合适。
我遇到的一个问题是当它使用 Page、Group X、Group Y 和/或 Wrap 时,结果面板中的数据点不多。 下面是一个使用 Big Class 的愚蠢示例。显然 name 是一个糟糕的分组变量,因为图形的每个面板只包含一个点。

一旦我的代码选择了潜在的可视化,检查布局是否主要包含数据稀疏/空的面板的最佳方法是什么?
- 因为我知道我的变量是如何相关的,所以我可以使用制表法构建一个表,创建一个隐藏数据表,创建一个矩阵,然后检查矩阵的稀疏性。 这似乎是啰嗦。
- 我需要计数,我认为使用不创建表的 JSL summarise() 函数(在 JMP 12 中)不可能实现。
- 有没有一种优雅的方法来构建计数矩阵?
- 通常,代码会为数量最多的列表(X、Y 或图例)中的每个项目建议三个图表,因此我希望尽可能避免创建表格。
谢谢,
斯蒂芬
回复:获取图形生成器中分组(面板)的计数以检查可视化是否合理原来有一个 JMP 插件可以将所有字符列转换为数字. 感谢@M_Anderson指出来.
这使得使用 summarise() 变得非常容易。
回复:获取图形生成器中分组(面板)的计数以检查可视化是否合理如果您所有的分组变量都是数字,它会更快,因为 summarize 可以快速完成计数。 但这对数据和/或用户有很大的限制。 您可以将汇总函数调用转换为“汇总”平台,并创建可以处理数字和字符列的表。 您可以进行一些计时测试,看看是否可行。
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA\car physical data.jmp" );
dtsumm=dt << Summary(private,
Group( :type),
N( :type ),
Freq( "None" ),
Weight( "None" )
);
show(dtsumm:type<<GET values=""></GET>
回复:获取图形生成器中分组(面板)的计数以检查可视化是否合理谢谢你的例子。 如果我有一个 Y 组和一个 X 组(也可能是 X)都是字符,那么我需要嵌套三个 for 循环吗? 由于数据表的大小未知,这很快成为一种将 JMP 绑定在循环中的方法(用户可能会请求 30 个图表,所有这些图表都需要面板矩阵计算——我已将程序限制为仅显示前 30 个建议) .
也许这是使用汽车物理数据的更好示例,我希望得到的是 3x5 矩阵或 15 项列表。

为了充分利用 summarise(),我是否最好将字符列重新编码为数字? 可能比 for 循环更快/更整洁?
回复:获取图形生成器中分组(面板)的计数以检查可视化是否合理总结是要走的路。 它不能对字符列进行计数,但它可以获取分组值,您可以从中获取计数。 请参阅下面的脚本
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA\big class.jmp" );
// Numeric Column
dt = Open( "$SAMPLE_DATA\big class.jmp" );
Summarize( dt, bygroup = by( :age ), counts = Count( :age ) );
Show( "Numeric Column", bygroup, counts );
// Character Column
Summarize( dt, bygroup = by( :sex ) );
counts = {};
For( i = 1, i <= N Items( bygroup ), i++,
Insert Into( counts, N Rows( dt << get rows where( :sex == bygroup[i] ) ) )
);
Show( "Character Column", bygroup, counts );