58 lines
2.3 KiB
Java
58 lines
2.3 KiB
Java
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
var tslib_1 = require("tslib");
|
|
var util_1 = require("@antv/util");
|
|
var simpleStatistics = tslib_1.__importStar(require("simple-statistics"));
|
|
var partition_1 = tslib_1.__importDefault(require("../util/partition"));
|
|
var data_set_1 = require("../data-set");
|
|
var option_parser_1 = require("../util/option-parser");
|
|
var DEFAULT_OPTIONS = {
|
|
// field: '', // required
|
|
// method: 'value', // required
|
|
// value: 10, // required if (method === 'value')
|
|
groupBy: [],
|
|
};
|
|
function notUndefinedValues(values) {
|
|
return values.filter(function (value) { return !util_1.isUndefined(value); });
|
|
}
|
|
var STATISTICS_METHODS = ['mean', 'median', 'max', 'min'];
|
|
var imputations = {};
|
|
STATISTICS_METHODS.forEach(function (method) {
|
|
// @ts-ignore
|
|
imputations[method] = function (row, values) { return simpleStatistics[method](values); };
|
|
});
|
|
imputations.value = function (_row, _values, value) { return value; };
|
|
function transform(dataView, options) {
|
|
options = util_1.assign({}, DEFAULT_OPTIONS, options);
|
|
var field = option_parser_1.getField(options);
|
|
var method = options.method;
|
|
if (!method) {
|
|
throw new TypeError('Invalid method!');
|
|
}
|
|
if (method === 'value' && !util_1.has(options, 'value')) {
|
|
throw new TypeError('Invalid value: it is nil.');
|
|
}
|
|
var column = notUndefinedValues(dataView.getColumn(field));
|
|
var groups = partition_1.default(dataView.rows, options.groupBy);
|
|
util_1.forIn(groups, function (group) {
|
|
var fieldValues = notUndefinedValues(group.map(function (row) { return row[field]; }));
|
|
if (fieldValues.length === 0) {
|
|
fieldValues = column;
|
|
}
|
|
group.forEach(function (row) {
|
|
if (util_1.isUndefined(row[field])) {
|
|
if (util_1.isFunction(method)) {
|
|
row[field] = method(row, fieldValues, options.value, group);
|
|
}
|
|
else if (util_1.isString(method)) {
|
|
row[field] = imputations[method](row, fieldValues, options.value);
|
|
}
|
|
else {
|
|
throw new TypeError("Invalid method: must be a function or one of " + STATISTICS_METHODS.join(', '));
|
|
}
|
|
}
|
|
});
|
|
});
|
|
}
|
|
data_set_1.DataSet.registerTransform('impute', transform);
|