@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
46 lines (42 loc) • 2.44 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: !0
}), exports.LineChartMajorityValue = void 0;
const vutils_1 = require("@visactor/vutils"), type_1 = require("../../type"), types_1 = require("../../../../types"), getMajorityInGroup = (dataset, measureId, seriesId, dimensionId, threshold = .85) => {
const result = [], sum = dataset.reduce(((prev, cur) => {
const dataValue = parseFloat(cur.dataItem[measureId]);
return prev + ((0, vutils_1.isNumber)(dataValue) ? Math.abs(dataValue) : 0);
}), 0);
return sum - Number.EPSILON < 0 ? [] : (dataset.forEach((d => {
const seriesName = d.dataItem[seriesId], dimensionName = d.dataItem[dimensionId], dataValue = parseFloat(d.dataItem[measureId]), ratio = ((0,
vutils_1.isNumber)(dataValue) ? Math.abs(dataValue) : 0) / sum;
ratio > threshold && result.push({
type: type_1.InsightType.MajorityValue,
data: [ d ],
fieldId: measureId,
value: d.dataItem[measureId],
significant: ratio,
seriesName: seriesName,
info: {
ratio: ratio,
dimensionName: dimensionName
}
});
})), result);
}, calcMajorityValue = (context, options) => {
const result = [], {cell: cell, dimensionDataMap: dimensionDataMap, seriesDataMap: seriesDataMap} = context, {threshold: threshold} = options || {}, {y: celly, x: cellx, color: color} = cell, yField = (0,
vutils_1.isArray)(celly) ? celly.flat() : [ celly ], xField = (0, vutils_1.isArray)(cellx) ? cellx[0] : cellx;
let groupField;
return groupField = (0, vutils_1.isArray)(cellx) && cellx.length > 1 ? cellx[1] : (0,
vutils_1.isArray)(color) ? color[0] : color, groupField && xField ? Object.keys(seriesDataMap).length <= 1 ? [] : (Object.keys(dimensionDataMap).forEach((dimension => {
const dimensionDataset = dimensionDataMap[dimension], dimensionInsights = getMajorityInGroup(dimensionDataset, yField[0], groupField, xField, threshold);
result.push(...dimensionInsights);
})), result) : [];
};
exports.LineChartMajorityValue = {
name: "majorityValue",
forceChartType: [ types_1.ChartType.BarChart, types_1.ChartType.AreaChart, types_1.ChartType.WaterFallChart ],
insightType: type_1.InsightType.MajorityValue,
algorithmFunction: calcMajorityValue
};
//# sourceMappingURL=index.js.map