범주 형 열을 숫자로 변환 할 때 성능을 향상시키는 방법데이터를 매개 변수-값으로 반환하는 데이터베이스에서 생산 라인을 따라 데이터를 추출하고 데이터를 처리합니다 (값이 누락 될 수 있음).
나는 테이블 분할을 사용하여 매개 변수가있는 데이터를 열로 사용합니다 (많은 열에서 더 많은 누락이 예상됩니다).
그런 다음 적절한 경우 문자를 숫자로 변환하는 스크립트를 실행합니다.
문제는 열 수가 매우 높을 수 있다는 것입니다. 내 예에서는 약 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 열 x 11 행이 왜 그렇게 오래 걸리는지 분명하지 않지만 프로파일 러가 무언가를 제안 할 수 있습니다. (내가 추측했다면 모든 루핑이 아니라 문자에서 숫자로의 실제 변화를 추측 할 수 있습니다.)
디버거의 프로파일 러 사용-디버그 스크립트를 선택한 다음 #clock 아이콘을 누른 다음 이동 버튼을 누릅니다.
먼저 #clock 아이콘을 누릅니다.
결과
히트 맵 색상!
Re : 범주 열을 숫자로 변환 할 때 성능을 향상시키는 방법아주 영리한 방법, 조지! 불행히도 성능은 내가 사용한 것보다 나쁩니다. 그 이유는 열 변경을 두 번 적용하기 때문입니다.
열 유형은 성명 성능을 평가하기 위해 Craige의 제안을 적용한 것을 확인 했으므로 가장 시간이 많이 걸리는 작업을 변경합니다.
테이블을 "익명화"하여 다른 분석을 수행했습니다 (즉, 열 및 행 데이터 모두 문자 데이터 만 변경 함을 의미 함).
성능이 80 초에서 55 초로 향상되었습니다. 이는 문자열이 상당한 영향을 미친다는 것을 의미합니다 (8315 자 열 대 55729 숫자)
두 가지 방법과 내가 사용한 데이터 테이블의 비교를 첨부했습니다.
Re : 범주 열을 숫자로 변환 할 때 성능을 향상시키는 방법시도 할 수있는 또 다른 옵션이 있습니다. 프로덕션 시스템에서 데이터를 처음 읽은 후 jmp 파일을 csv 파일로 임시 위치에 저장합니다. 그런 다음 돌아 서서 다시 읽으십시오. 읽은 행 수를 설정하여 파일이 숫자인지 문자인지 확인한 다음 파일을 읽을 수 있습니다. 이것은 C ++ 코드를 사용하기 때문에 상당한 시간 절약이있을 수 있습니다.