大家好,
我有一个包含 40 列和 300 多行的数据集。
对于每一列(= 事件名称),值都是二进制的,表示每行是否参加该事件。
我有兴趣了解不同活动/专栏之间的出席率是否存在相关性。
我设法用散点图矩阵将其可视化。
我调整了矩阵的轴,仅显示两个列/事件的值为 1 的值,因为我只对散点图矩阵的两个事件都由一行参与的情况感兴趣。
我的散点图矩阵如下图所示,但要大得多。
每个点都是一行,散点图矩阵的两个事件/列的值为 1。
但是,计算事件/列的许多不同可能组合中的点(=散点图矩阵的各个框/子图)是非常困难的。
我的问题是:是否可以将各个框中的点更改为每个单独框的实际计数?

散点图矩阵的语法如下所示
请注意,为了便于阅读,我没有列出所有事件名称,而仅列出了 2 列/事件的比例框合成器。
这以红色文本突出显示。
:
散点图矩阵(
Y(
:这是一个包含约 40 个列/事件名称的长列表,
矩阵格式(“下三角”),
发送至报告(
派遣(
{},
“140”,
秤盒,
{最小值( 0.5 )、最大值( 1.5 )、增量( 1 )、小刻度( 0 )}
),
派遣(
{},
“139”,
秤盒,
{格式(“最佳”,15),最小值(0.5),最大值(1.5),增量(1),
小刻度( 0 )}
),
接下来是其他 38 个列/事件的 38 个更相似的代码段。
这是一个使用计数创建新数据表的脚本

这将为您提供散点图计数,然后创建一个单元格图,为您提供值的颜色图。

Names Default to Here( 1 );
dt = Current Data Table();
dtCounts = New Table( "Counts", add rows( 40 ) );
dtCounts << delete columns( :column 1 );
For( i = 1, i <= 40, i++,
dtCounts << New Column( "c" || Char( i ), set each value( . ) )
);
For( i = 1, i <= 40, i++,
For( k = i, k <= 40, k++,
theCount = Length( dt << get rows where( As Column( dt, i ) == 1 & As Column( dt, k ) == 1 ) );
dtCounts[i, k] = theCount;
dtCounts[k, i] = theCount;
)
);
dtCounts << New Column( "The Columns", character, set each value( "c" || Char( Row() ) ) );
dtCounts << move selected columns( :The Columns, to first );
dtCounts << Cell Plot(
Scale Uniformly( 1 ),
Center at zero( 0 ),
Y(
:c1, :c2, :c3, :c4, :c5, :c6, :c7, :c8, :c9, :c10, :c11, :c12, :c13, :c14, :c15, :c16, :c17, :c18,
:c19, :c20, :c21, :c22, :c23, :c24, :c25, :c26, :c27, :c28, :c29, :c30, :c31, :c32, :c33, :c34, :c35,
:c36, :c37, :c38, :c39, :c40
),
Label( :The Columns ),
Legend( 1 ),
SendToReport(
Dispatch( {}, "Cell Plot Report", FrameBox, {Frame Size( 79, 23 )} ),
Dispatch( {}, "", Lineup Box( 2 ), {Spacing( 1 )} )
)
);
非常感谢!
当随机检查多个值时,带有计数的新数据表是有意义的。
但不知何故,表格和相应的数字在第 16 列之后停止,见下文。
我在我简单复制和粘贴的脚本中没有看到任何异常(即没有多余的逗号或我不小心放入其中的内容)。
有什么建议吗?为什么会这样?

可以附上您的数据副本吗?如有必要,您可以在附加数据之前对其进行匿名化。
此外,您的显示有 41 列,代码假设有 40 列。