将分类列转换为数值时如何提高性能我从数据库中提取数据,即沿着生产线的过程数据,该数据库以一对参数-值(可能会丢失值)的形式返回数据。
我使用表拆分将具有参数的数据作为列(许多列中可能会缺少更多内容)。
然后,我运行一个脚本以在适当的时候将字符转换为数字。
问题在于列数可能非常高,在我的示例中约为60000(示例中为11行)
因此,在我的示例中,我有8秒钟的时间从数据库取回数据,
18秒也适用于检查变成80秒的所有列的算法来转换列的算法。
谁能建议一种更有效的方法来获得最终结果?
这是我使用的算法:
names = <FONT face="Courier New" size="3">current data table()</FONT> << Get Column Names( Character, String );
for(I = 1, I <=N items(names), I++,
values= column( names[I]) << get values;
numerical=1;
for(j=1, j<=N items(values),j++,
if(!Is Missing(values[j]) & Is Missing( Num(values[j]) ),
numerical=0;
break();
);
);
if(numerical,
column( names[I]) << data Type("Numeric") << set Modeling Type ("Continuous");
);
);脚本编写回复:将分类列转换为数值时如何提高性能也许这工作更快?
它可以避免遍历行的循环,并且可以使JMP的表算法更有效地工作。
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
// set all columns to character
For( i = 1, i <= N Cols( dt ), i++,
Column( i ) << set data type( character )
);
wait(3);
// copy data table
dt_copy = dt << Subset( All rows, Selected columns only( 0 ) );
// Convert only numerics, use copied table for testing
For( i = 1, i <= N Cols( dt ), i++,
Column( dt_copy, i ) << set data type( numeric );
If( Col N Missing( Column( dt_copy, i ) ) == Col N Missing( Column( dt, i ) ),
Column( dt, i ) << set data type( numeric ) << set modeling type( continuous )
);
);
Close(dt_copy, nosave );
回复:将分类列转换为数值时如何提高性能JSL调试器还具有一个探查器,该探查器将显示使用最多时间的语句。 对我而言,为什么60,000列乘11行花这么长的时间并不明显,但探查器可能会提出一些建议。 (如果我在猜测,我可能会猜测从字符到数字而不是所有循环的实际变化。)
使用调试器的探查器-选择调试脚本,然后按#clock图标,然后按go按钮。
首先按#clock图标
结果
热图颜色!