カテゴリ列を数値に変換するときにパフォーマンスを向上させる方法パラメータ値を結合してデータを返すデータベースから、データを抽出し、生産ラインに沿ってデータを処理します(値が欠落している可能性があります)。
テーブル分割を使用して、パラメータを列として持つデータを使用します(多くの列でより多くの欠落が予想されます)。
次に、必要に応じて文字を数値に変換するスクリプトを実行します。
問題は、列の数が非常に多くなる可能性があることです。私の例では、約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");
);
);スクリプティングRe:カテゴリ列を数値に変換するときにパフォーマンスを向上させる方法おそらくこれはより速く動作しますか?
これにより、行のループが回避され、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 );
Re:カテゴリ列を数値に変換するときにパフォーマンスを向上させる方法JSLデバッガーには、どのステートメントが最も時間を使用しているかを示すプロファイラーもあります。 60,000列×11行にこれほど時間がかかる理由は私にはわかりませんが、プロファイラーが何かを提案する可能性があります。 (推測した場合、すべてのループではなく、文字から数値への実際の変更を推測する可能性があります。)
デバッガーのプロファイラーを使用して、デバッグスクリプトを選択し、#clockアイコンを押してから、[移動]ボタンを押します。
最初に#clockアイコンを押します
結果
ヒートマップの色!
Re:カテゴリ列を数値に変換するときにパフォーマンスを向上させる方法とても賢い方法、ジョージ! 残念ながら、パフォーマンスは私が使用したものよりも悪いです。 その理由は、列の変更を2回適用するためです。
ステートメントのパフォーマンスを評価するためにCraigeの提案を適用することを確認したので、列タイプは最も時間のかかる操作を変更します。
テーブルを「匿名化」することで、別の分析を行いました(つまり、列と行の両方のデータの文字データのみを変更します)。
パフォーマンスが80秒から55秒に向上しました。 これは、文字列が大きな影響を与えることを示唆しています(8315文字の列と55729の数値)
2つの方法の比較と使用したデータテーブルを添付しました。