야구놀자 ver.3 - 3) Data Generating

Dzeko·2024년 3월 8일
0

개발일지

목록 보기
107/112

매치를 진행할 때 마다, 기본적으로 필요한 데이터들의 초기값을 세팅시켜놔야 한다.

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])
  }
profile
Hound on the Code

0개의 댓글