StackGenVis: Alignment of Data, Algorithms, and Models for Stacking Ensemble Learning Using Performance Metrics
https://doi.org/10.1109/TVCG.2020.3030352
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
73 lines
1.9 KiB
73 lines
1.9 KiB
import {fieldNames} from './util/util';
|
|
import {ingest, rederive, Transform, tupleid} from 'vega-dataflow';
|
|
import {inherits} from 'vega-util';
|
|
|
|
/**
|
|
* Performs a relational projection, copying selected fields from source
|
|
* tuples to a new set of derived tuples.
|
|
* @constructor
|
|
* @param {object} params - The parameters for this operator.
|
|
* @param {Array<function(object): *} params.fields - The fields to project,
|
|
* as an array of field accessors. If unspecified, all fields will be
|
|
* copied with names unchanged.
|
|
* @param {Array<string>} [params.as] - Output field names for each projected
|
|
* field. Any unspecified fields will use the field name provided by
|
|
* the field accessor.
|
|
*/
|
|
export default function Project(params) {
|
|
Transform.call(this, null, params);
|
|
}
|
|
|
|
Project.Definition = {
|
|
"type": "Project",
|
|
"metadata": {"generates": true, "changes": true},
|
|
"params": [
|
|
{ "name": "fields", "type": "field", "array": true },
|
|
{ "name": "as", "type": "string", "null": true, "array": true }
|
|
]
|
|
};
|
|
|
|
var prototype = inherits(Project, Transform);
|
|
|
|
prototype.transform = function(_, pulse) {
|
|
var fields = _.fields,
|
|
as = fieldNames(_.fields, _.as || []),
|
|
derive = fields
|
|
? function(s, t) { return project(s, t, fields, as); }
|
|
: rederive,
|
|
out, lut;
|
|
|
|
if (this.value) {
|
|
lut = this.value;
|
|
} else {
|
|
pulse = pulse.addAll();
|
|
lut = this.value = {};
|
|
}
|
|
|
|
out = pulse.fork(pulse.NO_SOURCE);
|
|
|
|
pulse.visit(pulse.REM, function(t) {
|
|
var id = tupleid(t);
|
|
out.rem.push(lut[id]);
|
|
lut[id] = null;
|
|
});
|
|
|
|
pulse.visit(pulse.ADD, function(t) {
|
|
var dt = derive(t, ingest({}));
|
|
lut[tupleid(t)] = dt;
|
|
out.add.push(dt);
|
|
});
|
|
|
|
pulse.visit(pulse.MOD, function(t) {
|
|
out.mod.push(derive(t, lut[tupleid(t)]));
|
|
});
|
|
|
|
return out;
|
|
};
|
|
|
|
function project(s, t, fields, as) {
|
|
for (var i=0, n=fields.length; i<n; ++i) {
|
|
t[as[i]] = fields[i](s);
|
|
}
|
|
return t;
|
|
}
|
|
|