將分類列轉換為數值時如何提高性能我從數據庫中提取數據,即沿著生產線的過程數據,該數據庫以一對參數-值(可能會丟失值)的形式返回數據。
我使用表拆分將具有參數的數據作為列(許多列中可能會缺少更多內容)。
然後,我運行一個腳本以在適當的時候將字符轉換為數字。
問題在於列數可能非常高,在我的示例中約為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圖標
結果
熱圖顏色!