將分類列轉換為數值時如何提高性能我從數據庫中提取數據,即沿著生產線的過程數據,該數據庫以一對參數-值(可能會丟失值)的形式返回數據。
我使用表拆分將具有參數的數據作為列(許多列中可能會缺少更多內容)。
然後,我運行一個腳本以在適當的時候將字符轉換為數字。
問題在於列數可能非常高,在我的示例中約為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圖標
結果
熱圖顏色!
回复:將分類列轉換為數值時如何提高性能非常聰明的方法,喬治! 不幸的是,性能比我以前使用的要差。 原因是它兩次應用了列更改,即
列類型更改是最耗時的操作,因為我證實了應用Craige的建議來評估語句性能。
我通過“匿名化”表進行了另一項分析(這意味著僅更改字符數據,包括列和行數據)。
性能從80秒提高到55秒。 這表明字符串具有重大影響(8315個字符列與55729個數字列)
我附上了兩種方法與我使用的數據表之間的比較。
回复:將分類列轉換為數值時如何提高性能這是另一個嘗試的選擇。 從生產機中初步讀取數據後,將jmp文件作為csv文件保存到臨時位置。 然後轉回並重新讀回。 您可以設置讀取的行數來確定文件是數字還是字符,然後讀取文件。 由於這是使用C ++代碼,因此可能會節省大量時間。