매치를 진행할 때 마다, 기본적으로 필요한 데이터들의 초기값을 세팅시켜놔야 한다.
Home과 Away의 기록을 저장할 객체의 initialize를 비롯해서
베이스러닝 케이스 그리고
모든 시즌의 OBA에 따른 평균 OBA와 오즈비(Odds)를 생성하는 메소드를 만들었다.
const obaGeneration = async () => {
// 연도별 wOBA data 불러오기
const dataSnapshot = doc(db, 'wOBA', '0')
const response = await getDoc(dataSnapshot)
window.wOBAdata = response.data()
const wOBA_Map = new Map()
for (const key in window.wOBAdata) {
wOBA_Map.set(key, window.wOBAdata[key])
}
// 모든 연도 평균 wOBA, OZ
const valuesArray = Array.from(wOBA_Map.values())
const totalValue = valuesArray.reduce((acc, val) => acc + val, 0)
window.avgOBA = Math.round(totalValue / wOBA_Map.size * 1000) / 1000
window.ozByAvgOBA = window.avgOBA / (1 - window.avgOBA)
}
베이스러닝과 스코어링을 어떻게 관리할지가 고민이었다.
뜬공 희생타, 주자 2루에서 안타 시 득점, 병살 같은 복잡한 케이스는 차차 디벨롭 시키기로 하고, 일단 기본적인 케이스만 만들었다.
베이스는 length 3의 배열로 1,2,3루를 형상화했고
['0,0,0', '1,0,0', '1,1,0', '1,1,1', '1,0,1', '0,1,0', '0,1,1', '0,0,1'] 8개의 케이스로 볼넷, 안타, 2루타의 경우의 수를 일일이 분류해 주었다.(3루타와 홈런은 스코어링 계산만 해주면 된다.)
분명 더 좋은 방법이 있을 것 같지만 천천히 생각해 보기로 한다.
const baseRunningCaseGeneration = () => {
const baseCase = ['0,0,0', '1,0,0', '1,1,0', '1,1,1', '1,0,1', '0,1,0', '0,1,1', '0,0,1']
// 1루타 case
const singleMap = new Map()
singleMap.set(baseCase[0], [1, 0, 0, 0])
singleMap.set(baseCase[1], [1, 1, 0, 0])
singleMap.set(baseCase[2], [1, 1, 1, 0])
singleMap.set(baseCase[3], [1, 1, 1, 1])
singleMap.set(baseCase[4], [1, 1, 0, 1])
singleMap.set(baseCase[5], [1, 0, 1, 0])
singleMap.set(baseCase[6], [1, 0, 1, 1])
singleMap.set(baseCase[7], [1, 0, 0, 1])
// 2루타 case
const doubleMap = new Map()
doubleMap.set(baseCase[0], [0, 1, 0, 0])
doubleMap.set(baseCase[1], [0, 1, 1, 0])
doubleMap.set(baseCase[2], [0, 1, 1, 1])
doubleMap.set(baseCase[3], [0, 1, 1, 2])
doubleMap.set(baseCase[4], [0, 1, 1, 1])
doubleMap.set(baseCase[5], [0, 1, 0, 1])
doubleMap.set(baseCase[6], [0, 1, 0, 2])
doubleMap.set(baseCase[7], [0, 1, 0, 1])
// 볼넷 case
const bbMap = new Map()
bbMap.set(baseCase[0], [1, 0, 0, 0])
bbMap.set(baseCase[1], [1, 1, 0, 0])
bbMap.set(baseCase[2], [1, 1, 1, 0])
bbMap.set(baseCase[3], [1, 1, 1, 1])
bbMap.set(baseCase[4], [1, 1, 1, 0])
bbMap.set(baseCase[5], [1, 1, 0, 0])
bbMap.set(baseCase[6], [1, 1, 1, 0])
bbMap.set(baseCase[7], [1, 0, 1, 0])
}