쇼핑몰을 개발하는 중이라고 가정하자
고객이 배송율 현황을 만들어 달라고 했다.
헤더 행 | 당일배송 | 익일배송 | 총배송 | 당일배송률 |
데이터행... | ||||
데이터행... | ||||
데이터행... | ||||
마지막 집계 행 |
위와 같은 집계 그리드 중 마지막 집계 행에 당일배송율에 대한 주
의점을 알아보자
//DB에서 뽑힌 데이터 갯수 설정
const ROWNUM = 10;
//DB에서 뽑힌 데이터라 가정
var dbData = [];
for (let i = 0; i < ROWNUM; i++) {
var val1 = Math.floor(Math.random() * 100)+1;
var val2 = Math.floor(Math.random() * 50)+1;
var sum = val1+val2;
var per = Math.round((val1/sum*10000))/100;
dbData.push({당일배송 : val1, 익일배송: val2 , 총배송 : sum, 당일배송률 : per});
}
console.log(dbData);
위와 같은 데이터에서 마지막 집계 행에 당일배송률에 대한 평균값을 구해야한다.
당일배송률 평균을 구하기 위해 "당일배송률 합계 / 전체행 수" 로 나눴다.
var count = 0;
var 잘못된당일배송률평균 = dbData.map(row=>{
count++;
return row.당일배송률;
}).reduce((a,b)=>a+b) /count;
console.log('잘못된당일배송률평균',Math.round(잘못된당일배송률평균*100)/100);
과연 올바른 값일까?
잘못된 값이다. 당일배송률은 이미 가공된 데이터이다.
그 가공된 데이터에 대한 평균값을 구한 것이지, 전체 모수로하는 당일배송률 평균이 아니다.
올바른 값을 알아보자
var 총배송합계 = dbData.map(row=>{
return row.총배송;
}).reduce((a,b)=>a+b);
console.log('총배송합계',총배송합계);
var 당일배송합계 = dbData.map(row=>{
return row.당일배송;
}).reduce((a,b)=>a+b);
console.log('당일배송합계',당일배송합계);
var 익일배송합계 = dbData.map(row=>{
return row.익일배송;
}).reduce((a,b)=>a+b);
console.log('익일배송합계',익일배송합계);
//전체 행 수
var count = 0;
var 잘못된당일배송률평균 = dbData.map(row=>{
count++;
return row.당일배송률;
}).reduce((a,b)=>a+b) /count;
console.log('잘못된당일배송률평균',Math.round(잘못된당일배송률평균*100)/100);
console.log('제대로된당일배송률평균',Math.round(당일배송합계/총배송합계 *10000)/100);
잘못된당일배송률평균은 당일배송율평균 간 평균값이 계산된 것이다.
반면에 제대로된당일배송률평균은 전체를 하나의 행으로 집계하고 그 결과를 가공해 평균값을 만들었다.
따라서 전체를 대표하는 평균값이 계산된 것이다.
'개발 > 자바스크립트' 카테고리의 다른 글
구조 분해 할당 (0) | 2023.08.21 |
---|---|
배열은 객체? (0) | 2023.08.18 |
반올림 함수 (0) | 2023.04.10 |
자바스크립트 중복제거 - 2 (0) | 2022.12.15 |
자바스크립트 중복 제거 (0) | 2022.12.12 |