@visactor/vmind
Version:
<div align="center"> <a href="https://github.com/VisActor#gh-light-mode-only" target="_blank"> <img alt="VisActor Logo" width="200" src="https://github.com/VisActor/.github/blob/main/profile/logo_500_200_light.svg"/> </a> <a href="https://githu
53 lines (46 loc) • 2.5 kB
JavaScript
;
var __importDefault = this && this.__importDefault || function(mod) {
return mod && mod.__esModule ? mod : {
default: mod
};
};
Object.defineProperty(exports, "__esModule", {
value: !0
}), exports.PageHinkleyAlg = exports.pageHinkleyFunc = void 0;
const vutils_1 = require("@visactor/vutils"), array_normalize_1 = __importDefault(require("array-normalize")), type_1 = require("../../type"), types_1 = require("../../../../types"), pageHinkley_1 = require("./pageHinkley"), statistics_1 = require("../statistics"), utils_1 = require("../../utils");
function difference(data) {
const diff = [];
for (let i = 1; i < data.length; i++) diff.push(data[i] - data[i - 1]);
return diff;
}
const pageHinkleyFunc = (context, options) => {
const result = [], {seriesDataMap: seriesDataMap, cell: cell, spec: spec} = context, {delta: delta, lambda: lambda, threshold: threshold} = options || {}, {y: celly} = cell, yField = (0,
vutils_1.isArray)(celly) ? celly.flat() : [ celly ];
return Object.keys(seriesDataMap).forEach((group => {
const dataset = seriesDataMap[group];
yField.forEach((field => {
if ((0, utils_1.isPercenSeries)(spec, field)) return;
const pageHinkley = new pageHinkley_1.PageHinkley(delta, lambda, threshold), dataList = dataset.map((v => Number(v.dataItem[field]))), {mean: mean, stdDev: stdDev} = (0,
statistics_1.getMeanAndstdDev)(dataList), normalizedDataset = (0, array_normalize_1.default)([ ...dataList, mean + 2 * stdDev, mean - 2 * stdDev ]);
normalizedDataset.pop(), normalizedDataset.pop();
difference(normalizedDataset).forEach(((d, index) => {
pageHinkley.setInput(d) && result.push({
type: type_1.InsightType.Outlier,
data: [ dataset[index + 1] ],
fieldId: field,
value: dataset[index + 1].dataItem[field],
significant: 1,
seriesName: group
});
}));
}));
})), result;
};
exports.pageHinkleyFunc = pageHinkleyFunc, exports.PageHinkleyAlg = {
name: "pageHinkley",
forceChartType: [ types_1.ChartType.DualAxisChart, types_1.ChartType.LineChart, types_1.ChartType.BarChart, types_1.ChartType.AreaChart ],
insightType: type_1.InsightType.Outlier,
algorithmFunction: exports.pageHinkleyFunc,
supportPercent: !1
};
//# sourceMappingURL=index.js.map