@formant/ava
Version:
A framework for automated visual analytics.
94 lines (93 loc) • 3.93 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.aggregateWithSeries = exports.aggregateWithMeasures = exports.aggregate = exports.AggregatorMap = void 0;
var tslib_1 = require("tslib");
var lodash_1 = require("lodash");
var sum = function (data, measure) {
return (0, lodash_1.sumBy)(data, measure);
};
var count = function (data, measure) {
return data.filter(function (item) { return measure in item; }).length;
};
var countDistinct = function (data, measure) {
return (0, lodash_1.uniq)(data.filter(function (item) { return measure in item; }).map(function (item) { return item[measure]; })).length;
};
var max = function (data, measure) {
var _a;
return (_a = (0, lodash_1.maxBy)(data, measure)) === null || _a === void 0 ? void 0 : _a[measure];
};
var min = function (data, measure) {
var _a;
return (_a = (0, lodash_1.minBy)(data, measure)) === null || _a === void 0 ? void 0 : _a[measure];
};
var mean = function (data, measure) {
return (0, lodash_1.meanBy)(data, measure);
};
exports.AggregatorMap = {
SUM: sum,
COUNT: count,
MAX: max,
MIN: min,
MEAN: mean,
COUNT_DISTINCT: countDistinct,
};
function aggregate(data, groupByField, measures, sort) {
var grouped = (0, lodash_1.groupBy)(data, groupByField);
var entries = sort ? (0, lodash_1.sortBy)(Object.entries(grouped), '0') : Object.entries(grouped);
return entries.map(function (_a) {
var _b;
var _c = tslib_1.__read(_a, 2), value = _c[0], dataGroup = _c[1];
var datum = (_b = {}, _b[groupByField] = value, _b);
measures.forEach(function (measure) {
var measureField = measure.fieldName, method = measure.method;
var aggregator = exports.AggregatorMap[method];
datum[measureField] = aggregator(dataGroup, measureField);
});
return datum;
});
}
exports.aggregate = aggregate;
function aggregateWithMeasures(data, groupByField, measures) {
var grouped = (0, lodash_1.groupBy)(data, groupByField);
var result = [];
Object.entries(grouped).forEach(function (_a) {
var _b = tslib_1.__read(_a, 2), value = _b[0], dataGroup = _b[1];
measures.forEach(function (measure) {
var _a;
var measureField = measure.fieldName, method = measure.method;
if (measureField in dataGroup[0]) {
var aggregator = exports.AggregatorMap[method];
var measureValue = aggregator(dataGroup, measureField);
result.push((_a = {},
_a[groupByField] = value,
_a.value = measureValue,
_a.measureName = measureField,
_a));
}
});
});
return result;
}
exports.aggregateWithMeasures = aggregateWithMeasures;
function aggregateWithSeries(data, groupByField, measure, expandingField) {
var grouped = (0, lodash_1.groupBy)(data, groupByField);
var measureField = measure.fieldName, method = measure.method;
var aggregator = exports.AggregatorMap[method];
return (0, lodash_1.flatten)(Object.entries(grouped).map(function (_a) {
var _b = tslib_1.__read(_a, 2), value = _b[0], dataGroup = _b[1];
var childGrouped = (0, lodash_1.groupBy)(dataGroup, expandingField);
var part = Object.entries(childGrouped).map(function (_a) {
var _b;
var _c = tslib_1.__read(_a, 2), childValue = _c[0], childDataGroup = _c[1];
return _b = {},
_b[expandingField] = childValue,
_b[measureField] = aggregator(childDataGroup, measureField),
_b;
});
return part.map(function (item) {
var _a;
return tslib_1.__assign(tslib_1.__assign({}, item), (_a = {}, _a[groupByField] = value, _a));
});
}));
}
exports.aggregateWithSeries = aggregateWithSeries;