function shuffleArray(arr) {
for (let i = arr.length - 1; i > 0; i--) {
const j = Math.floor(Math.random() * (i + 1));
[arr[i], arr[j]] = [arr[j], arr[i]];
}
return arr;
}
function getRandomArray(len, min, max) {
const arr = [];
for (let i = min; i <= max; i++) {
arr.push(i);
}
shuffleArray(arr);
return arr.slice(0, len);
}
function IQR(arr) {
const sorted = arr.slice().sort((a, b) => a - b);
const q1 = sorted[Math.floor(sorted.length * 0.25)];
const q3 = sorted[Math.floor(sorted.length * 0.75)];
return q3 - q1;
}
function outliers1(arr, k = 0.8) {
const m = d3.median(arr);
console.log('原中位数', m);
const iqr = IQR(arr);
const lower = m - k * iqr;
const upper = m + k * iqr;
console.log('四分位离群值', arr.filter(x => x < lower || x > upper).sort((a1,a2)=>a1-a2));
return arr.filter(x => x >= lower && x <= upper);
}
function outliers2(arr, k = 1.4) {
const mean = d3.mean(arr);
console.log('原平均值', mean);
const deviation = d3.deviation(arr);
const lower = mean - k * deviation;
const upper = mean + k * deviation;
console.log("上下限", lower, upper);
console.log('标准差离群值', arr.filter(x => x < lower || x > upper).sort((a1,a2)=>a1-a2));
return arr.filter(x => x >= lower && x <= upper);
}
function findTimeUnit(arr, out) {
if (arr && arr.length > 1) {
const median = d3.mean(out);
console.log('新平均值', d3.mean(out))
console.log('新中位数', d3.median(out))
const seconds = median;
if (seconds < 100) {
return 'SECOND';
}
const minutes = seconds / 60;
if (minutes < 100) {
return 'MINUTE';
}
const hours = minutes / 60;
if (hours < 100) {
return 'HOUR';
}
const days = hours / 24;
if (days < 100) {
return 'DAY';
}
return 'WEEK';
}
return 'SECOND';
}
console.log()
console.log()
const aaaa = [124500,172800,172800];
const unit5 = findTimeUnit(aaaa, outliers2(aaaa));
console.log(unit5);
console