0%

JS 提取出数据中的异常数据

记一下异常数据提取算法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
const outlierDetector = (collection) => {
const size = collection.length;

let q1, q3;

if (size < 2) {
return collection;
}

const sortedCollection = collection.slice().sort((a, b) => a - b);

if (((size - 1) / 4) % 1 === 0 || (size / 4) % 1 === 0) {
q1 =
(1 / 2) *
(sortedCollection[Math.floor(size / 4) - 1] +
sortedCollection[Math.floor(size / 4)]);
q3 =
(1 / 2) *
(sortedCollection[Math.ceil((size * 3) / 4) - 1] +
sortedCollection[Math.ceil((size * 3) / 4)]);
} else {
q1 = sortedCollection[Math.floor(size / 4)];
q3 = sortedCollection[Math.floor((size * 3) / 4)];
}

const iqr = q3 - q1;
const maxValue = q3 + iqr * 1.5;

return sortedCollection.filter((value) => value >= maxValue);
};