UNPKG

@visactor/vdataset

Version:

data processing tool

69 lines (63 loc) 2.85 kB
"use strict"; var __createBinding = this && this.__createBinding || (Object.create ? function(o, m, k, k2) { void 0 === k2 && (k2 = k); var desc = Object.getOwnPropertyDescriptor(m, k); desc && !("get" in desc ? !m.__esModule : desc.writable || desc.configurable) || (desc = { enumerable: !0, get: function() { return m[k]; } }), Object.defineProperty(o, k2, desc); } : function(o, m, k, k2) { void 0 === k2 && (k2 = k), o[k2] = m[k]; }), __setModuleDefault = this && this.__setModuleDefault || (Object.create ? function(o, v) { Object.defineProperty(o, "default", { enumerable: !0, value: v }); } : function(o, v) { o.default = v; }), __importStar = this && this.__importStar || function(mod) { if (mod && mod.__esModule) return mod; var result = {}; if (null != mod) for (var k in mod) "default" !== k && Object.prototype.hasOwnProperty.call(mod, k) && __createBinding(result, mod, k); return __setModuleDefault(result, mod), result; }; Object.defineProperty(exports, "__esModule", { value: !0 }), exports.statistics = void 0; const simpleStatistics = __importStar(require("simple-statistics")), js_1 = require("../utils/js"), vutils_1 = require("@visactor/vutils"), constants_1 = require("../constants"), DEFAULT_STATISTICS_OPTIONS = { as: [], fields: [], groupBy: null, operations: [ "count", "max", "min", "average", "sum" ] }, aggregates = { count: data => data.length, distinct: (data, field) => (0, vutils_1.uniqArray)(data.map((row => +row[field]))).length }; constants_1.STATISTICS_METHODS.forEach((method => { aggregates[method] = (data, field) => { let values = data.map((row => +row[field])); return (0, vutils_1.isArray)(values) && (0, vutils_1.isArray)(values[0]) && (values = (0, vutils_1.flattenArray)(values)), simpleStatistics[method](values); }; })), aggregates.average = aggregates.mean; const statistics = (data, options) => { const mergeOptions = (0, js_1.mergeDeepImmer)(DEFAULT_STATISTICS_OPTIONS, options), {as: as, fields: fields, groupBy: groupBy, operations: operations} = mergeOptions, groups = {}; data.forEach((d => { groups[d[groupBy]] = groups[d[groupBy]] || [], groups[d[groupBy]].push(d); })); const results = []; for (const key in groups) { const result = { group: key }, group = groups[key]; operations.forEach(((operation, i) => { var _a, _b; const outputName = null !== (_a = as[i]) && void 0 !== _a ? _a : operation, field = null !== (_b = fields[i]) && void 0 !== _b ? _b : fields[0]; result[outputName] = aggregates[operation](group, field); })), results.push(result); } return results; }; exports.statistics = statistics;