JMP 11에서 100억 개 이상의 항목이 있는 열의 이동 평균을 계산하는 방법은 무엇입니까?이동 평균을 계산하기 위해 1억 행이 있는 열에서 아래 공식을 실행하려고 합니다. JMP11 대안을 제안해 주시겠습니까? 콜 이동 평균
Col 이동 평균( :x, 1, 9999999, 0 )은 JMP11에서 지원되지 않습니다.</CODE></P><P><CODE class=" language-jsl">내가 시도한 코드 아래에서 찾으십시오.
NamesDefaultToHere(1);
// Use a function to open a .CSV file: Given the path to such a file, returns a reference to the resulting table
openMyCSV =
function({path2File}, {Default Local},
dt = Open(
path2File,
columns(
New Column( "column 1", Numeric, "Continuous", Format( "Best", 12 ) ),
New Column( "items", Numeric, "Continuous", Format( "Best", 12 ) )
),
Import Settings(
End Of Line( CRLF, CR, LF ),
End Of Field( Comma, CSV( 0 ) ),
Strip Quotes( 1 ),
Use Apostrophe as Quotation Mark( 0 ),
Use Regional Settings( 0 ),
Scan Whole File( 1 ),
Treat empty columns as numeric( 0 ),
CompressNumericColumns( 0 ),
CompressCharacterColumns( 0 ),
CompressAllowListCheck( 0 ),
Labels( 0 ),
Column Names Start( 1 ),
Data Starts( 1 ),
Lines To Read( "All" ),
Year Rule( "20xx" )
)
)
);
dt = New Table( "My data file");
dt << New Column( "cc", Character, width( 40 ) );
dt << New Column( "MovAvgMean", Numeric );
dt << New Column( "MovAvgMax", Numeric );
// Put all the .csv files to process into a list
dir = Pick Directory(
"Directory containing your csv files",
"C:\Users\xxx\Documents\test\"
);
files = Files In Directory( dir );
For( f = N Items( files ), f >= 1, f--,
If( !Ends With( Uppercase( files[f] ), ".CSV" ),
Remove From( files, f )
)
);
// Process each file - Incomplete!
For( f = 1, f <= N Items( files ), f++,
thisTable = openMyCSV( dir || files[f] );
thisTable << New Column( "x",
Numeric,
Continuous,
Formula( (87 *:items)-(0.03998113) ));
thisTable << New Column( "av", Numeric, Continuous, Formula( Col Moving Average( :x, 1, 9999999, 0 ) ) );
// This will insure that all formula processing is complet before the next statement is run
thisTable << run formulas;
FileName = files[f];
// Add the summary statistics to the summary table
dt << Add Rows( 1 );
dt:cc[N Rows( dt )] = FileName;
dt:MovAvgMean[N Rows( dt )] = Col Mean( thisTable:x );
dt:MovAvgMax[N Rows( dt )] = Col Max( thisTable:x );
Close( thisTable, nosave );
);
9
Re: JMP 11에서 1억 항목이 있는 열의 이동 평균을 계산하는 방법은 무엇입니까?@jojmp ,
테이블을 저장하지 않고 생성되지 않은 열을 참조하는 원본 스크립트가 주어지고 많은 수의 값의 평균이 한 행을 삭제하고 다른 행을 추가함으로써 매우 작은 변화를 가진다는 점을 감안할 때 귀하의 질문은 매우 이상한.
아래는 nr = nrow(dt)인 파일을 읽는 것과 비교하여 nr 행이 있는 테이블을 생성하는 스크립트입니다. 1억 개의 행이 있는 경우 메모리 관리가 매우 중요하며 계산은 O(n*rng)가 아닌 n, O(n) 순서가 되어야 합니다.
내장된 로그를 표시하면 계산을 수행한 시간이 인쇄됩니다.또한 데이터 업데이트 시작() 그리고 데이터 업데이트 종료() IO(렌더링) 시간을 절약하는 데 사용됩니다.내 PC의 결과는 다음과 같습니다.
| nr |
nrg |
초 |
| 100,000 |
100 |
0.34 |
| 10,000,000 |
1,000,000 |
10.66 |
| 100,000,000 |
100,000,000 |
85.74 |
| 100,000,000 |
10,000,000 |
104.50 |
참고로 이 스크립트는 다음을 가정합니다. 누락된 값 없음 .스크립트를 수정해야 하며 누락된 값을 수용하기 위해 성능이 크게 저하됩니다. nr 및 nrg 값을 변경하여 PC 성능을 테스트하십시오.
Names Default to Here(1);
nr = 100000;
dt = new table("test", new column("x"), Add rows(nr));
dt:x << set each value(Random Integer(100,200));
nrg = 100;
dt << begin data update();
t0 = hp time();
mvcol = dt << new column("MV");
mvcol[1] = :x[1];
for(j=2, j<=nrg, j++,
mvcol[j] = (:x[j] + (j-1)*mvcol[j-1])/j; //assumes no missing values
);
if(nrg < nr,
for(j=nrg+1, j<=nr, j++,
mvcol[j] = (:x[j] + (nrg)*mvcol[j-1] - :x[j - nrg])/ (nrg)
);
); //end if,
wait(0);
dt << end data update();
t1= hp time();
show((t1-t0)*1e-6);
이 모든 것을 감안할 때 나는 여전히 당신이 설명한 것이 당신에게 필요한 것이 아니라는 느낌을 받습니다.
Re: JMP 11에서 1억 항목이 있는 열의 이동 평균을 계산하는 방법은 무엇입니까?명확하지 않은 점에 대해 죄송합니다. 질문을 10000000000000000 이상의 항목으로 변경했으며 항목 수가 고정되어 있지 않아 임의의 수로 증가할 수 있습니다. 항목 수에 관계없이 이동 평균을 계산하는 일반 공식을 찾고 있습니다.Re: JMP 11에서 1억 항목이 있는 열의 이동 평균을 계산하는 방법은 무엇입니까?@jojmp ,
귀하의 요청을 이해하지 못하거나 Col Moving Avg()를 이해하지 못합니다.1억 개의 행이 있고 스크립트에서 지정한 범위가 99,999,999라고 말했습니다. 따라서 마지막 마지막 행은 전체 열의 평균이 되고 이전 행은 현재 행까지의 모든 값이 됩니다. 아래는 Big Class와 Span이 5인 컬럼 이동 평균의 사진입니다(n 이전).6보다 작은 행은 모든 행을 사용하며 6보다 작은 값을 기반으로 하는 평균이 됩니다.6행 이상부터는 현재 행과 이전 5개 행을 사용하여 평균이 계산됩니다.
따라서 자세한 내용을 제공하십시오. 이제 파일에 1억 개 이상의 행이 있는 경우 사용자 지정 수식을 수정해야 합니다.

Re: JMP 11에서 1억 항목이 있는 열의 이동 평균을 계산하는 방법은 무엇입니까?이 사용자 정의 공식에서 9999개 항목의 이동 평균인지 어떻게 알 수 있습니까?
Re: JMP 11에서 1억 항목이 있는 열의 이동 평균을 계산하는 방법은 무엇입니까?@jojmp , 이동 평균에 대한 공식이 약간 이상합니다.
thisTable << New Column( "av", Numeric, Continuous, Formula( Col Moving Average( :x, 1, 9999999, 0 ) ) );
세 번째 인수인 99999999는 시퀀스(행)에 의해 어떤 유형의 (역사적) 평균을 생성하는 것입니다.세 번째 인수는 평균의 범위입니다. 더 일반적인 것은 5 또는 10 또는 ?? 전체 기록을 포함하지 않는 시간에 가까운 값에 대한 평균을 제공합니다.
그것이 당신이 원하는 것이라고 가정하면 대체 공식이 같은 일을 할 수 있습니다
If( Row() == 1,
:x,
(:x + (Row() - 1) * Lag( :av, 1 )) / Row()
)
수식이 있는 두 개의 열이 있는 샘플 데이터 Big Class.jmp 버전이 첨부되어 있습니다.
Col Moving Average( :weight, 1, 9999, 0 )
및 비교 가능한 사용자 정의 공식
If( Row() == 1,
:weight,
(:weight + (Row() - 1) * Lag( :Custom Formula, 1 )) / Row()
)