@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
41 lines (34 loc) • 1.51 kB
JavaScript
import { isArray } from "@visactor/vutils";
import { coefficientVariation } from "../statistics";
import { InsightType } from "../../type";
import { ChartType } from "../../../../types";
import { isPercenSeries } from "../../utils";
const volatilityAlgo = (context, optioins) => {
const {seriesDataMap: seriesDataMap, cell: cell, spec: spec} = context, {threshold: threshold = .8} = optioins || {}, {y: celly} = cell, yField = isArray(celly) ? celly.flat() : [ celly ], result = [];
return Object.keys(seriesDataMap).forEach((series => {
const seriesDataset = seriesDataMap[series].map((d => d.dataItem));
yField.forEach((measureId => {
if (isPercenSeries(spec, measureId)) return;
const measureSet = seriesDataset.map((d => Number(d[measureId]))), cv = coefficientVariation(measureSet);
Math.abs(cv) > threshold && result.push({
type: InsightType.Volatility,
fieldId: measureId,
value: cv,
significant: cv,
seriesName: series,
info: {
cv: cv
}
});
}));
})), result;
};
export const Volatility = {
name: "volatility",
chartType: [ ChartType.LineChart, ChartType.DualAxisChart, ChartType.BarChart, ChartType.AreaChart ],
insightType: InsightType.Volatility,
algorithmFunction: volatilityAlgo,
supportStack: !0,
supportPercent: !1
};
//# sourceMappingURL=index.js.map