[R] Do It R 6편 배운 내용 바탕으로 간단한 야구 데이터 분석
카테고리: R
💡 R을 처음 배우기 위해 공부한 책입니다.
책에서 공부한 내용을 정리하고, 이를 기반으로 직접 문제를 만들어 풀이해보는 식으로 학습했습니다.
KBO, MLB 야구 기록들을 csv 파일로 크롤링하여 문제에 사용했고,
야구 데이터 패키지인 Lahman
을 토대로 문제를 만들기도 했습니다.
책 소개
❓ 문제.
MLB타자들의 나이에 따른 연봉의 변화 추이를 선그래프로 나타내자.
이 때 1995년 이후 자료만을 사용하며, 40세 이하 선수만을 대상으로 한다.
💡 답.
master_new <- Master %>%
select(playerID, birthYear) #선수id와 출생년도 추출
salary_new <- Salaries %>%
select(playerID, salary, yearID) #선수id와 당해년도와 연봉 추출
Batting_new <- left_join(Batting, master_new, by="playerID") #출생년도 데이터 합치기
Batting_new <- left_join(Batting_new, salary_new, by=c("playerID","yearID")) #연봉 데이터 합치기
batting_salary <- Batting_new %>%
mutate(age=(yearID-birthYear+1)) %>% #나이 변수 추가
filter(yearID>=1995 & !is.na(salary) & age<=40) %>% #1995년 이후 자료, salary 결측값 제거, 40세 이하만 추출
group_by(age) %>% #나이로 그룹화
summarise(mean_salary = mean(salary)/10000) #10,000달러 단위로 나이별 평균 연봉 집ㄱ
35세 때 가장 절정의 연봉(약 450만 달러)을 받는 것으로 보인다. 확실히 30세 이후로 접어들며 FA신분을 취득하거나 커리어 하이를 찍는 선수들이 많다보니 연봉이 가파르게 상승하는 것으로 보인다. 40세에 가까운 선수들은 기량이 노쇠화하였음에도 베테랑/ 프랜차이즈 우예 등의 이유로 연봉이 높을 수도 있다.(애초에 40세까지 야구를 할 정도라면 기량이 워낙 출중한 것이니 높은 연봉은 자연스럽기도 하다.)
❓ 문제.
메이저리그의 시대를 4개로 나눠보자(dead볼 시대(1920년 이전), liveball 시대(1920년~1969),
flyball혁명(1970~1999), shifte혁명(2000~2020)).
각 시대마다 어느 포지션이 몇 퍼센트의 아웃카운트를 책임졌는지 보여주는
비율 막대그래프를 만들어보자
💡 답.
out_pos_era1 <- Fielding %>%
#시대에 따라 era변수를 dead(~1919), live(1920~1969), flyball(1970~1999), shift(2000~)로 나눈다
mutate(era=ifelse(yearID<1920,'dead',ifelse(yearID<1970,'live',ifelse(yearID<2000,'flyball','shift')))) %>%
group_by(era) %>% #era로 그룹화하여
summarise(era_po=(sum(PO))) #era별 아웃카운트 수를 변수로 만든다
out_pos_era2 <- Fielding %>%
mutate(era=ifelse(yearID<1920,'dead',ifelse(yearID<1970,'live',ifelse(yearID<2000,'flyball','shift')))) %>%
group_by(era,POS) %>% #era와 포지션으로 그룹화하여
summarise(erapos_po=(sum(PO))) #시대별,포지션별 아웃카운트 수를 변수로 만든다
#앞서 만든 두 테이블을 합친다
out_pos_era3 <- left_join(out_pos_era1, out_pos_era2, by='era') %>%
mutate(proportion=(erapos_po/era_po)) #포지션별 아웃카운트 비중을 시대에 따라 나타내도록 한다
ggplot(data=out_pos_era3, aes(x=era, y=proportion, fill=POS))+ #fill을 POS로 설정하여 포지션별로 색깔을 달리 한다
geom_col()+
coord_flip() #그래프를 90도 회전시킨다
데드볼시대는 역시 타구가 외야로 뻗는 법이 거의 없었다. OF(외야수)가 처리한 비율이 다른 시대에 비해 현저히 낮다. 대신에 타구가 내야에 갖혀 1루 포스아웃으로 연결되는 경우가 굉장히 많았던 것으로 보인다. 가장 현대인 shift 시대엔 포수가 잡아낸 아웃이 현저히 많다. 이는 탈삼진이 많아졌다는 것으로 해석할 수 있다.