jStat은 자바스크립트 언어로 쓰여된 통계 라이브러리로, 전용 통계 언어 (예 : MATLAB 또는 R) 없이도 고급 통계 작업을 수행 할 수 있습니다.
계산은 정적 메소드에 의해 수행되며, 숫자 그룹에 대한 작업은 인스턴스 메소드에 의해 처리됩니다. 다음은 core.js에서 일어나는 일의 의사적인(Pseudo) 예입니다 :
jStat.min = function( arr ) {
return Math.min.apply( null, arr );
}
jStat.prototype.min = function() {
var i = 0,
newval = [];
while( newval.push( jStat.min( this[i] )), ++i < this.length );
return newval;
}
jStat.min
은 주어진 배열에 대한 실제 계산을 수행하는 반면
jStat.prototype.min
은 jStat 객체를 사용하는데 도움이 되는
래퍼(wrapper)입니다. 이 접근법의 이유는 jStat를 확장하고자 하는 다른
개발자에게 최대한의 융통성을 허용하면서 래퍼를 쉽게 만들 수 있게 하기
위해서입니다. 이렇게 jStat를 확장하면 최소한의 성능 오버 헤드만을 필요로 하며,
고유한 래퍼를 만들 수 있습니다.
주의 : '정적' 메소드는 거의 항상 기본 자바스크립트 유형을 반환합니다. '인스턴스' 메소드는 항상 jStat 객체를 반환합니다.
다음은 정적 메소드와 인스턴스 메소드 간의 사용법의 차이에 대한 간단한 예입니다:
var myVect = [2,6,4,7,2,7,4],
jObj = jStat( myVect );
// calculate the sum of the the vector
jStat.sum( myVect ) === 32;
jObj.sum() === 32;
이번에는 벡터에 여러가지 연산들(예: 합계, 최소, 최대 및 표준 편차)을 수행하려고 한다고 가정 해보겠습니다. 이는 정적 메소드를 사용하여 수행 할 수 있지만 각 메소드는 별도로 호출해야합니다. jStat 객체를 사용하여 콜백 함수를 전달하고 각 연산 실행에 함수를 연결할 수 있습니다 :
jObj.sum( function( val ) {
// val === sum
}).min( function( val ) {
// val === min
}).max( function( val ) {
// val === max
}).stdev( function( val ) {
// val === st. dev.
});
이 메서드는 비동기 큐에서 실행될 각 계산을 설정합니다. 큰 데이터 셋트을 가지고 연산을 할때 블로킹을 방지하는 매우 유용한 방법입니다.
약식으로 표현될 수 있는 예제들과 연결(Chaining) 예제들 입니다:
jStat( 0, 1, 11 ) === jStat( jStat.seq( 0, 1, 11 )); // 오른쪽 코드는 왼쪽 코드와 같이 표현될 수 있습니다.
jStat().rand( 4, 4 ) === jStat( jStat.rand( 4, 4 ));
jStat().create( 5, function( x, y ) {
return ( x + Math.random()) / ( y + Math.random());
}).min( true, function( x ) {
// 최소값 x를 이용해서 어떤 일을 합니다.
}).beta( 0.5, 0.5 ).pdf(); // 0.5 알파값과 0.5 베타값을 Beta 분포의 pdf 함수에 대입합니다.