UNPKG

kepler.gl

Version:

kepler.gl is a webgl based application to visualize large scale location data in the browser

84 lines (81 loc) 13.2 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.AGGREGATION_NAME = void 0; exports.aggregate = aggregate; exports.percentMean = exports.getMode = exports.getFrequency = exports.countUnique = void 0; var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _d3Array = require("d3-array"); var _constants = require("@kepler.gl/constants"); // SPDX-License-Identifier: MIT // Copyright contributors to the kepler.gl project var identity = function identity(d) { return d; }; var getFrequency = exports.getFrequency = function getFrequency(data) { var accessor = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : identity; var occur = {}; for (var i = 0; i < data.length; i++) { var val = accessor(data[i]); occur[val] = (occur[val] || 0) + 1; } return occur; }; var getMode = exports.getMode = function getMode(data, accessor) { var occur = getFrequency(data, accessor); return Object.keys(occur).reduce(function (prev, key) { return occur[prev] >= occur[key] ? prev : key; }, Object.keys(occur)[0]); }; var countUnique = exports.countUnique = function countUnique(data) { var accessor = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : identity; return Object.keys(data.reduce(function (uniques, d) { var val = accessor(d); uniques[val] = uniques[val] || 0; uniques[val] += 1; return uniques; }, {})).length; }; var percentMean = exports.percentMean = function percentMean(data, accessor) { var getNumerator = accessor.getNumerator, getDenominator = accessor.getDenominator; var denominator = aggregate(data, _constants.AGGREGATION_TYPES.sum, getDenominator); if (denominator <= 0) { return 0; } var result = aggregate(data, _constants.AGGREGATION_TYPES.sum, getNumerator) / denominator; return result; }; function aggregate(data, technique) { var accessor = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : identity; switch (technique) { case _constants.AGGREGATION_TYPES.average: return (0, _d3Array.mean)(data, accessor); case 'mean_of_percent': return percentMean(data, accessor); case _constants.AGGREGATION_TYPES.countUnique: return countUnique(data, accessor); case _constants.AGGREGATION_TYPES.mode: return getMode(data, accessor); case _constants.AGGREGATION_TYPES.maximum: return (0, _d3Array.max)(data, accessor); case _constants.AGGREGATION_TYPES.minimum: return (0, _d3Array.min)(data, accessor); case _constants.AGGREGATION_TYPES.median: return (0, _d3Array.median)(data, accessor); case _constants.AGGREGATION_TYPES.stdev: return (0, _d3Array.deviation)(data, accessor); case _constants.AGGREGATION_TYPES.sum: return (0, _d3Array.sum)(data, accessor); case _constants.AGGREGATION_TYPES.variance: return (0, _d3Array.variance)(data, accessor); default: return data.length; } } var AGGREGATION_NAME = exports.AGGREGATION_NAME = (0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])({}, _constants.AGGREGATION_TYPES.average, 'Average'), _constants.AGGREGATION_TYPES.countUnique, 'Number of Unique'), _constants.AGGREGATION_TYPES.mode, 'Most Often'), _constants.AGGREGATION_TYPES.maximum, 'Max'), _constants.AGGREGATION_TYPES.minimum, 'Min'), _constants.AGGREGATION_TYPES.median, 'Median'), _constants.AGGREGATION_TYPES.stdev, 'Std Deviation'), _constants.AGGREGATION_TYPES.sum, 'Total'), _constants.AGGREGATION_TYPES.variance, 'Variance'); // ratio: both denominator & numerator precent // average, min, max, median, //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZDNBcnJheSIsInJlcXVpcmUiLCJfY29uc3RhbnRzIiwiaWRlbnRpdHkiLCJkIiwiZ2V0RnJlcXVlbmN5IiwiZXhwb3J0cyIsImRhdGEiLCJhY2Nlc3NvciIsImFyZ3VtZW50cyIsImxlbmd0aCIsInVuZGVmaW5lZCIsIm9jY3VyIiwiaSIsInZhbCIsImdldE1vZGUiLCJPYmplY3QiLCJrZXlzIiwicmVkdWNlIiwicHJldiIsImtleSIsImNvdW50VW5pcXVlIiwidW5pcXVlcyIsInBlcmNlbnRNZWFuIiwiZ2V0TnVtZXJhdG9yIiwiZ2V0RGVub21pbmF0b3IiLCJkZW5vbWluYXRvciIsImFnZ3JlZ2F0ZSIsIkFHR1JFR0FUSU9OX1RZUEVTIiwic3VtIiwicmVzdWx0IiwidGVjaG5pcXVlIiwiYXZlcmFnZSIsIm1lYW4iLCJtb2RlIiwibWF4aW11bSIsIm1heCIsIm1pbmltdW0iLCJtaW4iLCJtZWRpYW4iLCJzdGRldiIsImRldmlhdGlvbiIsInZhcmlhbmNlIiwiQUdHUkVHQVRJT05fTkFNRSIsIl9kZWZpbmVQcm9wZXJ0eTIiXSwic291cmNlcyI6WyIuLi9zcmMvYWdncmVnYXRpb24udHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IHtkZXZpYXRpb24sIG1pbiwgbWF4LCBtZWFuLCBtZWRpYW4sIHN1bSwgdmFyaWFuY2V9IGZyb20gJ2QzLWFycmF5JztcbmltcG9ydCB7VmFsdWVPZn0gZnJvbSAnQGtlcGxlci5nbC90eXBlcyc7XG5pbXBvcnQge0FHR1JFR0FUSU9OX1RZUEVTLCBBZ2dyZWdhdGlvblR5cGVzfSBmcm9tICdAa2VwbGVyLmdsL2NvbnN0YW50cyc7XG5jb25zdCBpZGVudGl0eSA9IGQgPT4gZDtcblxuZXhwb3J0IGNvbnN0IGdldEZyZXF1ZW5jeSA9IChcbiAgZGF0YTogYW55W10sXG4gIGFjY2Vzc29yOiAoYW55OiBhbnkpID0+IGFueSA9IGlkZW50aXR5XG4pOiB7W2tleTogc3RyaW5nIHwgbnVtYmVyXTogbnVtYmVyfSA9PiB7XG4gIGNvbnN0IG9jY3VyID0ge307XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IHZhbCA9IGFjY2Vzc29yKGRhdGFbaV0pO1xuICAgIG9jY3VyW3ZhbF0gPSAob2NjdXJbdmFsXSB8fCAwKSArIDE7XG4gIH1cbiAgcmV0dXJuIG9jY3VyO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldE1vZGUgPSAoZGF0YSwgYWNjZXNzb3IpID0+IHtcbiAgY29uc3Qgb2NjdXIgPSBnZXRGcmVxdWVuY3koZGF0YSwgYWNjZXNzb3IpO1xuICByZXR1cm4gT2JqZWN0LmtleXMob2NjdXIpLnJlZHVjZShcbiAgICAocHJldiwga2V5KSA9PiAob2NjdXJbcHJldl0gPj0gb2NjdXJba2V5XSA/IHByZXYgOiBrZXkpLFxuICAgIE9iamVjdC5rZXlzKG9jY3VyKVswXVxuICApO1xufTtcblxuZXhwb3J0IGNvbnN0IGNvdW50VW5pcXVlID0gKGRhdGEsIGFjY2Vzc29yID0gaWRlbnRpdHkpID0+IHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKFxuICAgIGRhdGEucmVkdWNlKCh1bmlxdWVzLCBkKSA9PiB7XG4gICAgICBjb25zdCB2YWwgPSBhY2Nlc3NvcihkKTtcbiAgICAgIHVuaXF1ZXNbdmFsXSA9IHVuaXF1ZXNbdmFsXSB8fCAwO1xuICAgICAgdW5pcXVlc1t2YWxdICs9IDE7XG4gICAgICByZXR1cm4gdW5pcXVlcztcbiAgICB9LCB7fSlcbiAgKS5sZW5ndGg7XG59O1xuXG5leHBvcnQgY29uc3QgcGVyY2VudE1lYW4gPSAoZGF0YSwgYWNjZXNzb3IpID0+IHtcbiAgY29uc3Qge2dldE51bWVyYXRvciwgZ2V0RGVub21pbmF0b3J9ID0gYWNjZXNzb3I7XG4gIGNvbnN0IGRlbm9taW5hdG9yID0gYWdncmVnYXRlKGRhdGEsIEFHR1JFR0FUSU9OX1RZUEVTLnN1bSwgZ2V0RGVub21pbmF0b3IpO1xuICBpZiAoZGVub21pbmF0b3IgPD0gMCkge1xuICAgIHJldHVybiAwO1xuICB9XG4gIGNvbnN0IHJlc3VsdCA9IGFnZ3JlZ2F0ZShkYXRhLCBBR0dSRUdBVElPTl9UWVBFUy5zdW0sIGdldE51bWVyYXRvcikgLyBkZW5vbWluYXRvcjtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBhZ2dyZWdhdGUoXG4gIGRhdGE6IGFueVtdLFxuICB0ZWNobmlxdWU6IFZhbHVlT2Y8QWdncmVnYXRpb25UeXBlcz4sXG4gIGFjY2Vzc29yOiAoYW55OiBhbnkpID0+IGFueSA9IGlkZW50aXR5XG4pOiBhbnkge1xuICBzd2l0Y2ggKHRlY2huaXF1ZSkge1xuICAgIGNhc2UgQUdHUkVHQVRJT05fVFlQRVMuYXZlcmFnZTpcbiAgICAgIHJldHVybiBtZWFuKGRhdGEsIGFjY2Vzc29yKTtcbiAgICBjYXNlICdtZWFuX29mX3BlcmNlbnQnOlxuICAgICAgcmV0dXJuIHBlcmNlbnRNZWFuKGRhdGEsIGFjY2Vzc29yKTtcbiAgICBjYXNlIEFHR1JFR0FUSU9OX1RZUEVTLmNvdW50VW5pcXVlOlxuICAgICAgcmV0dXJuIGNvdW50VW5pcXVlKGRhdGEsIGFjY2Vzc29yKTtcbiAgICBjYXNlIEFHR1JFR0FUSU9OX1RZUEVTLm1vZGU6XG4gICAgICByZXR1cm4gZ2V0TW9kZShkYXRhLCBhY2Nlc3Nvcik7XG4gICAgY2FzZSBBR0dSRUdBVElPTl9UWVBFUy5tYXhpbXVtOlxuICAgICAgcmV0dXJuIG1heChkYXRhLCBhY2Nlc3Nvcik7XG4gICAgY2FzZSBBR0dSRUdBVElPTl9UWVBFUy5taW5pbXVtOlxuICAgICAgcmV0dXJuIG1pbihkYXRhLCBhY2Nlc3Nvcik7XG4gICAgY2FzZSBBR0dSRUdBVElPTl9UWVBFUy5tZWRpYW46XG4gICAgICByZXR1cm4gbWVkaWFuKGRhdGEsIGFjY2Vzc29yKTtcbiAgICBjYXNlIEFHR1JFR0FUSU9OX1RZUEVTLnN0ZGV2OlxuICAgICAgcmV0dXJuIGRldmlhdGlvbihkYXRhLCBhY2Nlc3Nvcik7XG4gICAgY2FzZSBBR0dSRUdBVElPTl9UWVBFUy5zdW06XG4gICAgICByZXR1cm4gc3VtKGRhdGEsIGFjY2Vzc29yKTtcbiAgICBjYXNlIEFHR1JFR0FUSU9OX1RZUEVTLnZhcmlhbmNlOlxuICAgICAgcmV0dXJuIHZhcmlhbmNlKGRhdGEsIGFjY2Vzc29yKTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGRhdGEubGVuZ3RoO1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCBBR0dSRUdBVElPTl9OQU1FOiB7XG4gIFtrZXk6IHN0cmluZ106IHN0cmluZztcbn0gPSB7XG4gIFtBR0dSRUdBVElPTl9UWVBFUy5hdmVyYWdlXTogJ0F2ZXJhZ2UnLFxuICBbQUdHUkVHQVRJT05fVFlQRVMuY291bnRVbmlxdWVdOiAnTnVtYmVyIG9mIFVuaXF1ZScsXG4gIFtBR0dSRUdBVElPTl9UWVBFUy5tb2RlXTogJ01vc3QgT2Z0ZW4nLFxuICBbQUdHUkVHQVRJT05fVFlQRVMubWF4aW11bV06ICdNYXgnLFxuICBbQUdHUkVHQVRJT05fVFlQRVMubWluaW11bV06ICdNaW4nLFxuICBbQUdHUkVHQVRJT05fVFlQRVMubWVkaWFuXTogJ01lZGlhbicsXG4gIFtBR0dSRUdBVElPTl9UWVBFUy5zdGRldl06ICdTdGQgRGV2aWF0aW9uJyxcbiAgW0FHR1JFR0FUSU9OX1RZUEVTLnN1bV06ICdUb3RhbCcsXG4gIFtBR0dSRUdBVElPTl9UWVBFUy52YXJpYW5jZV06ICdWYXJpYW5jZSdcbn07XG5cbi8vIHJhdGlvOiBib3RoIGRlbm9taW5hdG9yICYgbnVtZXJhdG9yIHByZWNlbnRcbi8vIGF2ZXJhZ2UsIG1pbiwgbWF4LCBtZWRpYW4sXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFHQSxJQUFBQSxRQUFBLEdBQUFDLE9BQUE7QUFFQSxJQUFBQyxVQUFBLEdBQUFELE9BQUE7QUFMQTtBQUNBOztBQUtBLElBQU1FLFFBQVEsR0FB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