Add test for nest.
This commit is contained in:
Родитель
0cd0ede546
Коммит
03253fcff6
122
test/barley.json
122
test/barley.json
|
@ -1,122 +0,0 @@
|
|||
[
|
||||
{"yield":27.00000,"variety":"Manchuria","year":1931,"site":"University Farm"},
|
||||
{"yield":48.86667,"variety":"Manchuria","year":1931,"site":"Waseca"},
|
||||
{"yield":27.43334,"variety":"Manchuria","year":1931,"site":"Morris"},
|
||||
{"yield":39.93333,"variety":"Manchuria","year":1931,"site":"Crookston"},
|
||||
{"yield":32.96667,"variety":"Manchuria","year":1931,"site":"Grand Rapids"},
|
||||
{"yield":28.96667,"variety":"Manchuria","year":1931,"site":"Duluth"},
|
||||
{"yield":43.06666,"variety":"Glabron","year":1931,"site":"University Farm"},
|
||||
{"yield":55.20000,"variety":"Glabron","year":1931,"site":"Waseca"},
|
||||
{"yield":28.76667,"variety":"Glabron","year":1931,"site":"Morris"},
|
||||
{"yield":38.13333,"variety":"Glabron","year":1931,"site":"Crookston"},
|
||||
{"yield":29.13333,"variety":"Glabron","year":1931,"site":"Grand Rapids"},
|
||||
{"yield":29.66667,"variety":"Glabron","year":1931,"site":"Duluth"},
|
||||
{"yield":35.13333,"variety":"Svansota","year":1931,"site":"University Farm"},
|
||||
{"yield":47.33333,"variety":"Svansota","year":1931,"site":"Waseca"},
|
||||
{"yield":25.76667,"variety":"Svansota","year":1931,"site":"Morris"},
|
||||
{"yield":40.46667,"variety":"Svansota","year":1931,"site":"Crookston"},
|
||||
{"yield":29.66667,"variety":"Svansota","year":1931,"site":"Grand Rapids"},
|
||||
{"yield":25.70000,"variety":"Svansota","year":1931,"site":"Duluth"},
|
||||
{"yield":39.90000,"variety":"Velvet","year":1931,"site":"University Farm"},
|
||||
{"yield":50.23333,"variety":"Velvet","year":1931,"site":"Waseca"},
|
||||
{"yield":26.13333,"variety":"Velvet","year":1931,"site":"Morris"},
|
||||
{"yield":41.33333,"variety":"Velvet","year":1931,"site":"Crookston"},
|
||||
{"yield":23.03333,"variety":"Velvet","year":1931,"site":"Grand Rapids"},
|
||||
{"yield":26.30000,"variety":"Velvet","year":1931,"site":"Duluth"},
|
||||
{"yield":36.56666,"variety":"Trebi","year":1931,"site":"University Farm"},
|
||||
{"yield":63.83330,"variety":"Trebi","year":1931,"site":"Waseca"},
|
||||
{"yield":43.76667,"variety":"Trebi","year":1931,"site":"Morris"},
|
||||
{"yield":46.93333,"variety":"Trebi","year":1931,"site":"Crookston"},
|
||||
{"yield":29.76667,"variety":"Trebi","year":1931,"site":"Grand Rapids"},
|
||||
{"yield":33.93333,"variety":"Trebi","year":1931,"site":"Duluth"},
|
||||
{"yield":43.26667,"variety":"No. 457","year":1931,"site":"University Farm"},
|
||||
{"yield":58.10000,"variety":"No. 457","year":1931,"site":"Waseca"},
|
||||
{"yield":28.70000,"variety":"No. 457","year":1931,"site":"Morris"},
|
||||
{"yield":45.66667,"variety":"No. 457","year":1931,"site":"Crookston"},
|
||||
{"yield":32.16667,"variety":"No. 457","year":1931,"site":"Grand Rapids"},
|
||||
{"yield":33.60000,"variety":"No. 457","year":1931,"site":"Duluth"},
|
||||
{"yield":36.60000,"variety":"No. 462","year":1931,"site":"University Farm"},
|
||||
{"yield":65.76670,"variety":"No. 462","year":1931,"site":"Waseca"},
|
||||
{"yield":30.36667,"variety":"No. 462","year":1931,"site":"Morris"},
|
||||
{"yield":48.56666,"variety":"No. 462","year":1931,"site":"Crookston"},
|
||||
{"yield":24.93334,"variety":"No. 462","year":1931,"site":"Grand Rapids"},
|
||||
{"yield":28.10000,"variety":"No. 462","year":1931,"site":"Duluth"},
|
||||
{"yield":32.76667,"variety":"Peatland","year":1931,"site":"University Farm"},
|
||||
{"yield":48.56666,"variety":"Peatland","year":1931,"site":"Waseca"},
|
||||
{"yield":29.86667,"variety":"Peatland","year":1931,"site":"Morris"},
|
||||
{"yield":41.60000,"variety":"Peatland","year":1931,"site":"Crookston"},
|
||||
{"yield":34.70000,"variety":"Peatland","year":1931,"site":"Grand Rapids"},
|
||||
{"yield":32.00000,"variety":"Peatland","year":1931,"site":"Duluth"},
|
||||
{"yield":24.66667,"variety":"No. 475","year":1931,"site":"University Farm"},
|
||||
{"yield":46.76667,"variety":"No. 475","year":1931,"site":"Waseca"},
|
||||
{"yield":22.60000,"variety":"No. 475","year":1931,"site":"Morris"},
|
||||
{"yield":44.10000,"variety":"No. 475","year":1931,"site":"Crookston"},
|
||||
{"yield":19.70000,"variety":"No. 475","year":1931,"site":"Grand Rapids"},
|
||||
{"yield":33.06666,"variety":"No. 475","year":1931,"site":"Duluth"},
|
||||
{"yield":39.30000,"variety":"Wisconsin No. 38","year":1931,"site":"University Farm"},
|
||||
{"yield":58.80000,"variety":"Wisconsin No. 38","year":1931,"site":"Waseca"},
|
||||
{"yield":29.46667,"variety":"Wisconsin No. 38","year":1931,"site":"Morris"},
|
||||
{"yield":49.86667,"variety":"Wisconsin No. 38","year":1931,"site":"Crookston"},
|
||||
{"yield":34.46667,"variety":"Wisconsin No. 38","year":1931,"site":"Grand Rapids"},
|
||||
{"yield":31.60000,"variety":"Wisconsin No. 38","year":1931,"site":"Duluth"},
|
||||
{"yield":26.90000,"variety":"Manchuria","year":1932,"site":"University Farm"},
|
||||
{"yield":33.46667,"variety":"Manchuria","year":1932,"site":"Waseca"},
|
||||
{"yield":34.36666,"variety":"Manchuria","year":1932,"site":"Morris"},
|
||||
{"yield":32.96667,"variety":"Manchuria","year":1932,"site":"Crookston"},
|
||||
{"yield":22.13333,"variety":"Manchuria","year":1932,"site":"Grand Rapids"},
|
||||
{"yield":22.56667,"variety":"Manchuria","year":1932,"site":"Duluth"},
|
||||
{"yield":36.80000,"variety":"Glabron","year":1932,"site":"University Farm"},
|
||||
{"yield":37.73333,"variety":"Glabron","year":1932,"site":"Waseca"},
|
||||
{"yield":35.13333,"variety":"Glabron","year":1932,"site":"Morris"},
|
||||
{"yield":26.16667,"variety":"Glabron","year":1932,"site":"Crookston"},
|
||||
{"yield":14.43333,"variety":"Glabron","year":1932,"site":"Grand Rapids"},
|
||||
{"yield":25.86667,"variety":"Glabron","year":1932,"site":"Duluth"},
|
||||
{"yield":27.43334,"variety":"Svansota","year":1932,"site":"University Farm"},
|
||||
{"yield":38.50000,"variety":"Svansota","year":1932,"site":"Waseca"},
|
||||
{"yield":35.03333,"variety":"Svansota","year":1932,"site":"Morris"},
|
||||
{"yield":20.63333,"variety":"Svansota","year":1932,"site":"Crookston"},
|
||||
{"yield":16.63333,"variety":"Svansota","year":1932,"site":"Grand Rapids"},
|
||||
{"yield":22.23333,"variety":"Svansota","year":1932,"site":"Duluth"},
|
||||
{"yield":26.80000,"variety":"Velvet","year":1932,"site":"University Farm"},
|
||||
{"yield":37.40000,"variety":"Velvet","year":1932,"site":"Waseca"},
|
||||
{"yield":38.83333,"variety":"Velvet","year":1932,"site":"Morris"},
|
||||
{"yield":32.06666,"variety":"Velvet","year":1932,"site":"Crookston"},
|
||||
{"yield":32.23333,"variety":"Velvet","year":1932,"site":"Grand Rapids"},
|
||||
{"yield":22.46667,"variety":"Velvet","year":1932,"site":"Duluth"},
|
||||
{"yield":29.06667,"variety":"Trebi","year":1932,"site":"University Farm"},
|
||||
{"yield":49.23330,"variety":"Trebi","year":1932,"site":"Waseca"},
|
||||
{"yield":46.63333,"variety":"Trebi","year":1932,"site":"Morris"},
|
||||
{"yield":41.83333,"variety":"Trebi","year":1932,"site":"Crookston"},
|
||||
{"yield":20.63333,"variety":"Trebi","year":1932,"site":"Grand Rapids"},
|
||||
{"yield":30.60000,"variety":"Trebi","year":1932,"site":"Duluth"},
|
||||
{"yield":26.43334,"variety":"No. 457","year":1932,"site":"University Farm"},
|
||||
{"yield":42.20000,"variety":"No. 457","year":1932,"site":"Waseca"},
|
||||
{"yield":43.53334,"variety":"No. 457","year":1932,"site":"Morris"},
|
||||
{"yield":34.33333,"variety":"No. 457","year":1932,"site":"Crookston"},
|
||||
{"yield":19.46667,"variety":"No. 457","year":1932,"site":"Grand Rapids"},
|
||||
{"yield":22.70000,"variety":"No. 457","year":1932,"site":"Duluth"},
|
||||
{"yield":25.56667,"variety":"No. 462","year":1932,"site":"University Farm"},
|
||||
{"yield":44.70000,"variety":"No. 462","year":1932,"site":"Waseca"},
|
||||
{"yield":47.00000,"variety":"No. 462","year":1932,"site":"Morris"},
|
||||
{"yield":30.53333,"variety":"No. 462","year":1932,"site":"Crookston"},
|
||||
{"yield":19.90000,"variety":"No. 462","year":1932,"site":"Grand Rapids"},
|
||||
{"yield":22.50000,"variety":"No. 462","year":1932,"site":"Duluth"},
|
||||
{"yield":28.06667,"variety":"Peatland","year":1932,"site":"University Farm"},
|
||||
{"yield":36.03333,"variety":"Peatland","year":1932,"site":"Waseca"},
|
||||
{"yield":43.20000,"variety":"Peatland","year":1932,"site":"Morris"},
|
||||
{"yield":25.23333,"variety":"Peatland","year":1932,"site":"Crookston"},
|
||||
{"yield":26.76667,"variety":"Peatland","year":1932,"site":"Grand Rapids"},
|
||||
{"yield":31.36667,"variety":"Peatland","year":1932,"site":"Duluth"},
|
||||
{"yield":30.00000,"variety":"No. 475","year":1932,"site":"University Farm"},
|
||||
{"yield":41.26667,"variety":"No. 475","year":1932,"site":"Waseca"},
|
||||
{"yield":44.23333,"variety":"No. 475","year":1932,"site":"Morris"},
|
||||
{"yield":32.13333,"variety":"No. 475","year":1932,"site":"Crookston"},
|
||||
{"yield":15.23333,"variety":"No. 475","year":1932,"site":"Grand Rapids"},
|
||||
{"yield":27.36667,"variety":"No. 475","year":1932,"site":"Duluth"},
|
||||
{"yield":38.00000,"variety":"Wisconsin No. 38","year":1932,"site":"University Farm"},
|
||||
{"yield":58.16667,"variety":"Wisconsin No. 38","year":1932,"site":"Waseca"},
|
||||
{"yield":47.16667,"variety":"Wisconsin No. 38","year":1932,"site":"Morris"},
|
||||
{"yield":35.90000,"variety":"Wisconsin No. 38","year":1932,"site":"Crookston"},
|
||||
{"yield":20.66667,"variety":"Wisconsin No. 38","year":1932,"site":"Grand Rapids"},
|
||||
{"yield":29.33333,"variety":"Wisconsin No. 38","year":1932,"site":"Duluth"}
|
||||
]
|
|
@ -0,0 +1,236 @@
|
|||
require("../env");
|
||||
require("../../d3");
|
||||
|
||||
var vows = require("vows"),
|
||||
assert = require("assert");
|
||||
|
||||
var suite = vows.describe("d3.nest");
|
||||
|
||||
suite.addBatch({
|
||||
"entries": {
|
||||
topic: function() {
|
||||
return d3.nest;
|
||||
},
|
||||
"returns an array of each distinct key in arbitrary order": function(nest) {
|
||||
var keys = nest()
|
||||
.key(function(d) { return d.foo; })
|
||||
.entries([{foo: 1}, {foo: 1}, {foo: 2}])
|
||||
.map(function(d) { return d.key; })
|
||||
.sort(d3.ascending);
|
||||
assert.deepEqual(keys, ["1", "2"]);
|
||||
},
|
||||
"each entry is a key-values object, with values in input order": function(nest) {
|
||||
var entries = nest()
|
||||
.key(function(d) { return d.foo; })
|
||||
.entries([{foo: 1, bar: 0}, {foo: 2}, {foo: 1, bar: 1}]);
|
||||
assert.deepEqual(entries, [
|
||||
{key: "1", values: [{foo: 1, bar: 0}, {foo: 1, bar: 1}]},
|
||||
{key: "2", values: [{foo: 2}]}
|
||||
]);
|
||||
},
|
||||
"keys can be sorted using an optional comparator": function(nest) {
|
||||
var keys = nest()
|
||||
.key(function(d) { return d.foo; }).sortKeys(d3.descending)
|
||||
.entries([{foo: 1}, {foo: 1}, {foo: 2}])
|
||||
.map(function(d) { return d.key; });
|
||||
assert.deepEqual(keys, ["2", "1"]);
|
||||
},
|
||||
"values can be sorted using an optional comparator": function(nest) {
|
||||
var entries = nest()
|
||||
.key(function(d) { return d.foo; })
|
||||
.sortValues(function(a, b) { return a.bar - b.bar; })
|
||||
.entries([{foo: 1, bar: 2}, {foo: 1, bar: 0}, {foo: 1, bar: 1}, {foo: 2}]);
|
||||
assert.deepEqual(entries, [
|
||||
{key: "1", values: [{foo: 1, bar: 0}, {foo: 1, bar: 1}, {foo: 1, bar: 2}]},
|
||||
{key: "2", values: [{foo: 2}]}
|
||||
]);
|
||||
},
|
||||
"values can be aggregated using an optional rollup": function(nest) {
|
||||
var entries = nest()
|
||||
.key(function(d) { return d.foo; })
|
||||
.rollup(function(values) { return d3.sum(values, function(d) { return d.bar; }); })
|
||||
.entries([{foo: 1, bar: 2}, {foo: 1, bar: 0}, {foo: 1, bar: 1}, {foo: 2}]);
|
||||
assert.deepEqual(entries, [
|
||||
{key: "1", values: 3},
|
||||
{key: "2", values: 0}
|
||||
]);
|
||||
},
|
||||
"multiple key functions can be specified": function(nest) {
|
||||
var entries = nest()
|
||||
.key(function(d) { return d[0]; }).sortKeys(d3.ascending)
|
||||
.key(function(d) { return d[1]; }).sortKeys(d3.ascending)
|
||||
.entries([[0, 1], [0, 2], [1, 1], [1, 2], [0, 2]]);
|
||||
assert.deepEqual(entries, [
|
||||
{key: "0", values: [
|
||||
{key: "1", values: [[0, 1]]},
|
||||
{key: "2", values: [[0, 2], [0, 2]]}
|
||||
]},
|
||||
{key: "1", values: [
|
||||
{key: "1", values: [[1, 1]]},
|
||||
{key: "2", values: [[1, 2]]}
|
||||
]}
|
||||
]);
|
||||
},
|
||||
"the rollup function only applies to leaf values": function(nest) {
|
||||
var entries = nest()
|
||||
.key(function(d) { return d[0]; }).sortKeys(d3.ascending)
|
||||
.key(function(d) { return d[1]; }).sortKeys(d3.ascending)
|
||||
.rollup(function(values) { return values.length; })
|
||||
.entries([[0, 1], [0, 2], [1, 1], [1, 2], [0, 2]]);
|
||||
assert.deepEqual(entries, [
|
||||
{key: "0", values: [
|
||||
{key: "1", values: 1},
|
||||
{key: "2", values: 2}
|
||||
]},
|
||||
{key: "1", values: [
|
||||
{key: "1", values: 1},
|
||||
{key: "2", values: 1}
|
||||
]}
|
||||
]);
|
||||
},
|
||||
"the value comparator only applies to leaf values": function(nest) {
|
||||
var entries = nest()
|
||||
.key(function(d) { return d[0]; }).sortKeys(d3.ascending)
|
||||
.key(function(d) { return d[1]; }).sortKeys(d3.ascending)
|
||||
.sortValues(function(a, b) { return a[2] - b[2]; })
|
||||
.entries([[0, 1], [0, 2, 1], [1, 1], [1, 2], [0, 2, 0]]);
|
||||
assert.deepEqual(entries, [
|
||||
{key: "0", values: [
|
||||
{key: "1", values: [[0, 1]]},
|
||||
{key: "2", values: [[0, 2, 0], [0, 2, 1]]}
|
||||
]},
|
||||
{key: "1", values: [
|
||||
{key: "1", values: [[1, 1]]},
|
||||
{key: "2", values: [[1, 2]]}
|
||||
]}
|
||||
]);
|
||||
},
|
||||
"the key comparator only applies to the last-specified key": function(nest) {
|
||||
var entries = nest()
|
||||
.key(function(d) { return d[0]; }).sortKeys(d3.ascending)
|
||||
.key(function(d) { return d[1]; }).sortKeys(d3.descending)
|
||||
.entries([[0, 1], [0, 2], [1, 1], [1, 2], [0, 2]]);
|
||||
assert.deepEqual(entries, [
|
||||
{key: "0", values: [
|
||||
{key: "2", values: [[0, 2], [0, 2]]},
|
||||
{key: "1", values: [[0, 1]]}
|
||||
]},
|
||||
{key: "1", values: [
|
||||
{key: "2", values: [[1, 2]]},
|
||||
{key: "1", values: [[1, 1]]}
|
||||
]}
|
||||
]);
|
||||
var entries = nest()
|
||||
.key(function(d) { return d[0]; }).sortKeys(d3.descending)
|
||||
.key(function(d) { return d[1]; }).sortKeys(d3.ascending)
|
||||
.entries([[0, 1], [0, 2], [1, 1], [1, 2], [0, 2]]);
|
||||
assert.deepEqual(entries, [
|
||||
{key: "1", values: [
|
||||
{key: "1", values: [[1, 1]]},
|
||||
{key: "2", values: [[1, 2]]}
|
||||
]},
|
||||
{key: "0", values: [
|
||||
{key: "1", values: [[0, 1]]},
|
||||
{key: "2", values: [[0, 2], [0, 2]]}
|
||||
]}
|
||||
]);
|
||||
},
|
||||
"if no keys are specified, the input array is returned": function(nest) {
|
||||
var array = [new Object()];
|
||||
assert.strictEqual(nest().entries(array), array);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
suite.addBatch({
|
||||
"map": {
|
||||
topic: function() {
|
||||
return d3.nest;
|
||||
},
|
||||
"returns a map of each distinct key": function(nest) {
|
||||
var map = nest()
|
||||
.key(function(d) { return d.foo; })
|
||||
.map([{foo: 1, bar: 0}, {foo: 2}, {foo: 1, bar: 1}]);
|
||||
assert.deepEqual(map, {
|
||||
"1": [{foo: 1, bar: 0}, {foo: 1, bar: 1}],
|
||||
"2": [{foo: 2}]
|
||||
});
|
||||
},
|
||||
"values can be sorted using an optional comparator": function(nest) {
|
||||
var map = nest()
|
||||
.key(function(d) { return d.foo; })
|
||||
.sortValues(function(a, b) { return a.bar - b.bar; })
|
||||
.map([{foo: 1, bar: 2}, {foo: 1, bar: 0}, {foo: 1, bar: 1}, {foo: 2}]);
|
||||
assert.deepEqual(map, {
|
||||
"1": [{foo: 1, bar: 0}, {foo: 1, bar: 1}, {foo: 1, bar: 2}],
|
||||
"2": [{foo: 2}]
|
||||
});
|
||||
},
|
||||
"values can be aggregated using an optional rollup": function(nest) {
|
||||
var map = nest()
|
||||
.key(function(d) { return d.foo; })
|
||||
.rollup(function(values) { return d3.sum(values, function(d) { return d.bar; }); })
|
||||
.map([{foo: 1, bar: 2}, {foo: 1, bar: 0}, {foo: 1, bar: 1}, {foo: 2}]);
|
||||
assert.deepEqual(map, {
|
||||
"1": 3,
|
||||
"2": 0
|
||||
});
|
||||
},
|
||||
"multiple key functions can be specified": function(nest) {
|
||||
var map = nest()
|
||||
.key(function(d) { return d[0]; }).sortKeys(d3.ascending)
|
||||
.key(function(d) { return d[1]; }).sortKeys(d3.ascending)
|
||||
.map([[0, 1], [0, 2], [1, 1], [1, 2], [0, 2]]);
|
||||
assert.deepEqual(map, {
|
||||
"0": {
|
||||
"1": [[0, 1]],
|
||||
"2": [[0, 2], [0, 2]]
|
||||
},
|
||||
"1": {
|
||||
"1": [[1, 1]],
|
||||
"2": [[1, 2]]
|
||||
}
|
||||
});
|
||||
},
|
||||
"the rollup function only applies to leaf values": function(nest) {
|
||||
var map = nest()
|
||||
.key(function(d) { return d[0]; }).sortKeys(d3.ascending)
|
||||
.key(function(d) { return d[1]; }).sortKeys(d3.ascending)
|
||||
.rollup(function(values) { return values.length; })
|
||||
.map([[0, 1], [0, 2], [1, 1], [1, 2], [0, 2]]);
|
||||
assert.deepEqual(map, {
|
||||
"0": {
|
||||
"1": 1,
|
||||
"2": 2
|
||||
},
|
||||
"1": {
|
||||
"1": 1,
|
||||
"2": 1
|
||||
}
|
||||
});
|
||||
},
|
||||
"the value comparator only applies to leaf values": function(nest) {
|
||||
var map = nest()
|
||||
.key(function(d) { return d[0]; }).sortKeys(d3.ascending)
|
||||
.key(function(d) { return d[1]; }).sortKeys(d3.ascending)
|
||||
.sortValues(function(a, b) { return a[2] - b[2]; })
|
||||
.map([[0, 1], [0, 2, 1], [1, 1], [1, 2], [0, 2, 0]]);
|
||||
assert.deepEqual(map, {
|
||||
"0": {
|
||||
"1": [[0, 1]],
|
||||
"2": [[0, 2, 0], [0, 2, 1]]
|
||||
},
|
||||
"1": {
|
||||
"1": [[1, 1]],
|
||||
"2": [[1, 2]]
|
||||
}
|
||||
});
|
||||
},
|
||||
"if no keys are specified, the input array is returned": function(nest) {
|
||||
var array = [new Object()];
|
||||
assert.strictEqual(nest().map(array), array);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
suite.export(module);
|
|
@ -1,60 +0,0 @@
|
|||
require("./../../lib/env-js/envjs/node");
|
||||
require("./../../d3");
|
||||
|
||||
d3.json("test/barley.json", function(barley) {
|
||||
|
||||
var nest = d3.nest()
|
||||
.key(function(d) { return d.year; })
|
||||
.key(function(d) { return d.variety; })
|
||||
.key(function(d) { return d.site; });
|
||||
|
||||
console.log("entries(year/variety/site):");
|
||||
console.log(stringify(nest.entries(barley.slice(5, 8))));
|
||||
console.log("");
|
||||
|
||||
console.log("map(year/variety/site):");
|
||||
console.log(stringify(nest.map(barley.slice(5, 8))));
|
||||
console.log("");
|
||||
|
||||
var nest = d3.nest()
|
||||
.key(function(d) { return d.year; })
|
||||
.rollup(sum);
|
||||
|
||||
console.log("rollup(year):");
|
||||
console.log(stringify(nest.map(barley)));
|
||||
console.log("");
|
||||
|
||||
var nest = d3.nest()
|
||||
.key(function(d) { return d.year; })
|
||||
.key(function(d) { return d.variety; })
|
||||
.rollup(sum);
|
||||
|
||||
console.log("rollup(year/variety):");
|
||||
console.log(stringify(nest.map(barley)));
|
||||
console.log("");
|
||||
|
||||
var nest = d3.nest()
|
||||
.key(function(d) { return d.variety; })
|
||||
.sortKeys(d3.ascending);
|
||||
|
||||
console.log("sortKeys(variety):");
|
||||
console.log(stringify(nest.entries(barley.slice(5, 8))));
|
||||
console.log("");
|
||||
|
||||
var nest = d3.nest()
|
||||
.key(function(d) { return d.year; })
|
||||
.sortValues(function(b, a) { return a.yield - b.yield; });
|
||||
|
||||
console.log("sortValues(year):");
|
||||
console.log(stringify(nest.map(barley.slice(6, 12))));
|
||||
console.log("");
|
||||
|
||||
});
|
||||
|
||||
function sum(v) {
|
||||
return v.reduce(function(p, v) { return p + v.yield; }, 0);
|
||||
}
|
||||
|
||||
function stringify(json) {
|
||||
return JSON.stringify(json, null, " ");
|
||||
}
|
|
@ -1,194 +0,0 @@
|
|||
entries(year/variety/site):
|
||||
[
|
||||
{
|
||||
"key": "1931",
|
||||
"values": [
|
||||
{
|
||||
"key": "Manchuria",
|
||||
"values": [
|
||||
{
|
||||
"key": "Duluth",
|
||||
"values": [
|
||||
{
|
||||
"yield": 28.96667,
|
||||
"variety": "Manchuria",
|
||||
"year": 1931,
|
||||
"site": "Duluth"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"key": "Glabron",
|
||||
"values": [
|
||||
{
|
||||
"key": "University Farm",
|
||||
"values": [
|
||||
{
|
||||
"yield": 43.06666,
|
||||
"variety": "Glabron",
|
||||
"year": 1931,
|
||||
"site": "University Farm"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"key": "Waseca",
|
||||
"values": [
|
||||
{
|
||||
"yield": 55.2,
|
||||
"variety": "Glabron",
|
||||
"year": 1931,
|
||||
"site": "Waseca"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
|
||||
map(year/variety/site):
|
||||
{
|
||||
"1931": {
|
||||
"Manchuria": {
|
||||
"Duluth": [
|
||||
{
|
||||
"yield": 28.96667,
|
||||
"variety": "Manchuria",
|
||||
"year": 1931,
|
||||
"site": "Duluth"
|
||||
}
|
||||
]
|
||||
},
|
||||
"Glabron": {
|
||||
"University Farm": [
|
||||
{
|
||||
"yield": 43.06666,
|
||||
"variety": "Glabron",
|
||||
"year": 1931,
|
||||
"site": "University Farm"
|
||||
}
|
||||
],
|
||||
"Waseca": [
|
||||
{
|
||||
"yield": 55.2,
|
||||
"variety": "Glabron",
|
||||
"year": 1931,
|
||||
"site": "Waseca"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
rollup(year):
|
||||
{
|
||||
"1931": 2224.6666799999985,
|
||||
"1932": 1905.7999600000003
|
||||
}
|
||||
|
||||
rollup(year/variety):
|
||||
{
|
||||
"1931": {
|
||||
"Manchuria": 205.16667999999999,
|
||||
"Glabron": 223.96666000000002,
|
||||
"Svansota": 204.06667,
|
||||
"Velvet": 206.93332,
|
||||
"Trebi": 254.79996,
|
||||
"No. 457": 241.50001,
|
||||
"No. 462": 234.33336999999997,
|
||||
"Peatland": 219.5,
|
||||
"No. 475": 190.89999999999998,
|
||||
"Wisconsin No. 38": 243.50000999999997
|
||||
},
|
||||
"1932": {
|
||||
"Manchuria": 172.39999999999998,
|
||||
"Glabron": 176.13333000000003,
|
||||
"Svansota": 160.46666,
|
||||
"Velvet": 189.79998999999998,
|
||||
"Trebi": 217.99996,
|
||||
"No. 457": 188.66667999999999,
|
||||
"No. 462": 190.20000000000002,
|
||||
"Peatland": 190.66667,
|
||||
"No. 475": 190.23333,
|
||||
"Wisconsin No. 38": 229.23334000000003
|
||||
}
|
||||
}
|
||||
|
||||
sortKeys(variety):
|
||||
[
|
||||
{
|
||||
"key": "Glabron",
|
||||
"values": [
|
||||
{
|
||||
"yield": 43.06666,
|
||||
"variety": "Glabron",
|
||||
"year": 1931,
|
||||
"site": "University Farm"
|
||||
},
|
||||
{
|
||||
"yield": 55.2,
|
||||
"variety": "Glabron",
|
||||
"year": 1931,
|
||||
"site": "Waseca"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"key": "Manchuria",
|
||||
"values": [
|
||||
{
|
||||
"yield": 28.96667,
|
||||
"variety": "Manchuria",
|
||||
"year": 1931,
|
||||
"site": "Duluth"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
|
||||
sortValues(year):
|
||||
{
|
||||
"1931": [
|
||||
{
|
||||
"yield": 55.2,
|
||||
"variety": "Glabron",
|
||||
"year": 1931,
|
||||
"site": "Waseca"
|
||||
},
|
||||
{
|
||||
"yield": 43.06666,
|
||||
"variety": "Glabron",
|
||||
"year": 1931,
|
||||
"site": "University Farm"
|
||||
},
|
||||
{
|
||||
"yield": 38.13333,
|
||||
"variety": "Glabron",
|
||||
"year": 1931,
|
||||
"site": "Crookston"
|
||||
},
|
||||
{
|
||||
"yield": 29.66667,
|
||||
"variety": "Glabron",
|
||||
"year": 1931,
|
||||
"site": "Duluth"
|
||||
},
|
||||
{
|
||||
"yield": 29.13333,
|
||||
"variety": "Glabron",
|
||||
"year": 1931,
|
||||
"site": "Grand Rapids"
|
||||
},
|
||||
{
|
||||
"yield": 28.76667,
|
||||
"variety": "Glabron",
|
||||
"year": 1931,
|
||||
"site": "Morris"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
Загрузка…
Ссылка в новой задаче