>RE::VISION CRM

R 데이터 분석

[R분석] KBO 프로야구 가을야구 stat 예상 분석

YONG_X 2018. 9. 20. 16:49

 

# 미리보는 KBO 2018 가을야구

# 플레이오프 : 한화 - SK

# 코리아시리즈 : SK - 두산

# 순서대로 진행된다고 했을 때 벌어질 타격전의 예상시나리오?

# 9.19일까지의 KBO 타격 통계를 바탕으로 예상해본다면?

 

 

#----- [EDA] KBO 가을야구 미리보기 연습 --------

#

 

# [1] scatter plot을 통한 타자들 구성 분포 탐색

# [2] barplot을 활용한 팀별 성향 비교

 

 

# 블로그에서 데이터 불러오기

# KBO 데이터 타자순위로 60명. 2018.9.19일까지 통계 반영

hit0 <- read.csv("https://t1.daumcdn.net/cfile/blog/990CBB385BA3232610?download") 

 

# 타석당 타점을 중요하다고 보고 비율변수 추가

hit0$pparbi <- hit0$RBI/hit0$PA

hit1 <- hit0[order(hit0$pparbi, decreasing=T),]

head(hit1,5)

 

# 전반적인 상관관계 확인

pairs(hit1[,4:7])

# 타석이 많다고 타율이 자동적으로 높지는 않다

 

 

# 주요 관심 특정 변수를 활용한 scatterplot으로 대세 파악하기

plot(hit1$AVG, hit1$ISOP, 

  cex=0.9, pch=19,

  col=ifelse(hit1$team=="두산", "navy", 

         ifelse(hit1$team=="SK", "red", 

           ifelse(hit1$team=="한화", "orange", "lightblue"))),

  main="가을야구 Preview - stat a.o. 20180919",

  xlab="AVG",

  ylab="ISOP",

  sub=only high XR/PA hitters labeled")

 

# 세 집단을 구별하기 위해서 색상을 각각 지정

# 기타 팀의 선수들도 전체 분포를 함께 보기 위해 포함

 

text(hit1$AVG, hit1$ISOP, 

  labels=ifelse((hit1$XR/hit1$PA)>.17 & 

     hit1$team %in% c("두산","SK","한화"),as.character(hit1$name), ""),

  pos=3, cex=0.7)

 

# 조건부로 선수이름을 표시

# 타석대비 득점생산력이 높은 소수의 선수만 이름 표시

 

abline(h=.28, lty=3)

abline(v=.32, lty=3)

 

 

 

 

 

 

plot(hit1$X2B+hit1$X3B, hit1$HR, 

  cex=0.9, pch=19,

  col=ifelse(hit1$team=="두산", "navy", 

         ifelse(hit1$team=="SK", "red", 

           ifelse(hit1$team=="한화", "orange", "lightblue"))),

  main="가을야구 Preview - stat a.o. 20180919",

  xlab="X2B+X3B",

  ylab="HR",

  sub=only high XR/PA hitters labeled")

 

text(hit1$X2B+hit1$X3B, hit1$HR, 

  labels=ifelse((hit1$XR/hit1$PA)>.17 & 

     hit1$team %in% c("두산","SK","한화"),as.character(hit1$name), ""),

  pos=2, cex=0.7)

 

abline(h=30, lty=3)

abline(v=25, lty=3)

 

 

# 한동민 - 로맥 - 최정 Vs. 김재환 - 최주환 - 양의지 

# 정확도 낮은 장거리포 Vs. 정확도 높은 다수의 중거리포

# 호잉은 혼자서 할 수 있는 것이 별로 없을듯 보임

 

 

 

 

#---- barplot으로 안타의 종류별 빈도 비교 -----

 

# 장거리, 중거리, 단거리의 비율로 팀별 성향을 파악

 

# 팀별 집계 테이블 생성

# 먼저 빈 테이블을 데이터프레임으로 생성

teams <- data.frame(team="", H=0,X2B=0,X3B=0,HR=0)

 

# factor type 으로 자동 설정된 team을 character format 으로 변경
teams$team <- as.character(teams$team)

 

# 팀별 집계치를 추가

teams[1,]<- c("두산", colSums(hit1[hit1$team=="두산",c("H","X2B","X3B","HR")]))

teams[2,]<- c("SK", colSums(hit1[hit1$team=="SK",c("H","X2B","X3B","HR")]))

teams[3,]<- c("한화",colSums(hit1[hit1$team=="한화",c("H","X2B","X3B","HR")]))

 

teams

 

# 매트릭스로 변환

tteams <- as.matrix(teams[,2:5])

 

# 문자형으로 자동 설정된 데이터 형식을 수치로 변경

tteams <- mapply(tteams, FUN=as.numeric)

tteams <- matrix(data=tteams, ncol=4, nrow=3)

row.names(tteams) <- c("두산","SK","한화")

colnames(tteams) <- c("H","X2B","X3B", "HR")

 

# 안타수는 2, 3루타와 홈런이 모두 포함되어있으므로

# 순수한 안타만 계산

tteams[,1] <- tteams[,1] - (tteams[,2] + tteams[,3] +tteams[,4])

 

# beside 옵션으로 그룹(팀)별 비교 가능하도록

barplot(tteams, beside=T, 

  col=c("navy", "red", "orange"),

  legend = rownames(tteams),)

 
 

 

 

 

 

hit20180927.csv
0.01MB

 

 

hit20180927.csv
0.01MB