Add d3.sum and d3.stats.median.

This commit is contained in:
Jason Davies 2011-05-11 08:35:12 +01:00
Родитель d6d6578c88
Коммит 728fff5ba5
8 изменённых файлов: 50 добавлений и 13 удалений

Просмотреть файл

@ -39,6 +39,7 @@ d3.core.js: \
src/core/descending.js \
src/core/min.js \
src/core/max.js \
src/core/sum.js \
src/core/nest.js \
src/core/keys.js \
src/core/values.js \
@ -101,6 +102,7 @@ d3.stats.js: \
src/stats/kde.js \
src/stats/iqr.js \
src/stats/mean.js \
src/stats/median.js \
src/stats/quantiles.js \
src/stats/variance.js \
src/end.js
@ -179,6 +181,7 @@ tests: \
tests/test-scale-log.test \
tests/test-scale-sqrt.test \
tests/test-scale-pow.test \
tests/test-stats-median.test \
tests/test-svg-arc.test \
tests/test-svg-area.test \
tests/test-svg-line.test \

7
d3.js поставляемый
Просмотреть файл

@ -66,6 +66,13 @@ d3.max = function(array, f) {
}
return a;
};
d3.sum = function(x) {
var s = 0,
n = x.length,
i = -1;
while (++i < n) s += x[i];
return s;
};
d3.nest = function() {
var nest = {},
keys = [],

4
d3.min.js поставляемый

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Просмотреть файл

@ -100,12 +100,13 @@ d3.stats.iqr = function(x) {
return quartiles[1] - quartiles[0];
};
d3.stats.mean = function(x) {
var s = 0,
n = x.length,
i = -1;
while (++i < n) s += x[i];
return s / n;
return d3.sum(x) / x.length;
}
d3.stats.median = function(x) {
var i = x.length / 2,
j = Math.floor(i);
return i === j ? (x[j - 1] + x[j]) / 2 : x[j];
};
d3.stats.quantiles = function(d, quantiles) {
d = d.slice().sort(d3.ascending);
var n = d.length;

2
d3.stats.min.js поставляемый
Просмотреть файл

@ -1 +1 @@
(function(){d3.stats={},d3.stats.bandwidth={nrd0:function(a){var b=Math.sqrt(d3.stats.variance(a));(lo=Math.min(b,d3.stats.iqr(a)/1.34))||(lo=b)||(lo=Math.abs(a[1]))||(lo=1);return.9*lo*Math.pow(a.length,-0.2)},nrd:function(a){var b=d3.stats.quantiles(a,[.25,.75]),c=(b[1]-b[0])/1.34;return 1.06*Math.min(Math.sqrt(d3.stats.variance(a)),c)*Math.pow(a.length,-0.2)}},d3.stats.kernel={uniform:function(a){if(a<=1&&a>=-1)return.5;return 0},triangular:function(a){if(a<=1&&a>=-1)return 1-Math.abs(a);return 0},epanechnikov:function(a){if(a<=1&&a>=-1)return.75*(1-a*a);return 0},quartic:function(a){if(a<=1&&a>=-1){var b=1-a*a;return.9375*b*b}return 0},triweight:function(a){if(a<=1&&a>=-1){var b=1-a*a;return 35/32*b*b*b}return 0},gaussian:function(a){return 1/Math.sqrt(2*Math.PI)*Math.exp(-0.5*a*a)},cosine:function(a){if(a<=1&&a>=-1)return Math.PI/4*Math.cos(Math.PI/2*a);return 0}},d3.stats.kde=function(){function d(d,e){var f=c.call(this,b);return d.map(function(c){var d=-1,e=0,g=b.length;while(++d<g)e+=a((c-b[d])/f);return[c,e/f/g]})}var a=d3.stats.kernel.gaussian,b=[],c=d3.stats.bandwidth.nrd;d.kernel=function(b){if(!arguments.length)return a;a=b;return d},d.sample=function(a){if(!arguments.length)return b;b=a;return d},d.bandwidth=function(a){if(!arguments.length)return c;c=d3.functor(a);return d};return d},d3.stats.iqr=function(a){var b=d3.stats.quantiles(a,[.25,.75]);return b[1]-b[0]},d3.stats.mean=function(a){var b=0,c=a.length,d=-1;while(++d<c)b+=a[d];return b/c},d3.stats.quantiles=function(a,b){a=a.slice().sort(d3.ascending);var c=a.length;return b.map(function(b){b*=c;return~~b===b?(a[b]+a[b+1])/2:a[Math.round(b)]})},d3.stats.variance=function(a){var b=d3.stats.mean(a),c=a.length,d=-1,e=0;while(++d<c){var f=a[d]-b;e+=f*f}return e/(c-1)}})()
(function(){d3.stats={},d3.stats.bandwidth={nrd0:function(a){var b=Math.sqrt(d3.stats.variance(a));(lo=Math.min(b,d3.stats.iqr(a)/1.34))||(lo=b)||(lo=Math.abs(a[1]))||(lo=1);return.9*lo*Math.pow(a.length,-0.2)},nrd:function(a){var b=d3.stats.quantiles(a,[.25,.75]),c=(b[1]-b[0])/1.34;return 1.06*Math.min(Math.sqrt(d3.stats.variance(a)),c)*Math.pow(a.length,-0.2)}},d3.stats.kernel={uniform:function(a){if(a<=1&&a>=-1)return.5;return 0},triangular:function(a){if(a<=1&&a>=-1)return 1-Math.abs(a);return 0},epanechnikov:function(a){if(a<=1&&a>=-1)return.75*(1-a*a);return 0},quartic:function(a){if(a<=1&&a>=-1){var b=1-a*a;return.9375*b*b}return 0},triweight:function(a){if(a<=1&&a>=-1){var b=1-a*a;return 35/32*b*b*b}return 0},gaussian:function(a){return 1/Math.sqrt(2*Math.PI)*Math.exp(-0.5*a*a)},cosine:function(a){if(a<=1&&a>=-1)return Math.PI/4*Math.cos(Math.PI/2*a);return 0}},d3.stats.kde=function(){function d(d,e){var f=c.call(this,b);return d.map(function(c){var d=-1,e=0,g=b.length;while(++d<g)e+=a((c-b[d])/f);return[c,e/f/g]})}var a=d3.stats.kernel.gaussian,b=[],c=d3.stats.bandwidth.nrd;d.kernel=function(b){if(!arguments.length)return a;a=b;return d},d.sample=function(a){if(!arguments.length)return b;b=a;return d},d.bandwidth=function(a){if(!arguments.length)return c;c=d3.functor(a);return d};return d},d3.stats.iqr=function(a){var b=d3.stats.quantiles(a,[.25,.75]);return b[1]-b[0]},d3.stats.mean=function(a){return d3.sum(a)/a.length},d3.stats.median=function(a){var b=a.length/2,c=Math.floor(b);return b===c?(a[c-1]+a[c])/2:a[c]},d3.stats.quantiles=function(a,b){a=a.slice().sort(d3.ascending);var c=a.length;return b.map(function(b){b*=c;return~~b===b?(a[b]+a[b+1])/2:a[Math.round(b)]})},d3.stats.variance=function(a){var b=d3.stats.mean(a),c=a.length,d=-1,e=0;while(++d<c){var f=a[d]-b;e+=f*f}return e/(c-1)}})()

Просмотреть файл

@ -1,7 +1,3 @@
d3.stats.mean = function(x) {
var s = 0,
n = x.length,
i = -1;
while (++i < n) s += x[i];
return s / n;
return d3.sum(x) / x.length;
}

Просмотреть файл

@ -0,0 +1,12 @@
require("./../lib/env-js/envjs/node");
require("./../d3");
require("./../d3.stats");
var data = [1, 2, 3, 4, 5];
for (var i = 0; i <= data.length; i++) {
var tmp = data.slice(0, i);
console.log("median [" + tmp.join(",") + "]:");
console.log(" ", d3.stats.median(tmp));
console.log("");
}

Просмотреть файл

@ -0,0 +1,18 @@
median []:
NaN
median [1]:
1
median [1,2]:
1.5
median [1,2,3]:
2
median [1,2,3,4]:
2.5
median [1,2,3,4,5]:
3