UNPKG

@formant/ava

Version:

A framework for automated visual analytics.

94 lines (93 loc) 3.93 kB
"use strict"; 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;