# 미리보는 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),)
'R 데이터 분석' 카테고리의 다른 글
[R분석] LAD goes wrong. Why? a.f. 20180928 (0) | 2018.09.28 |
---|---|
[R분석] 프로야구 KBO 타자 성적과 나이의 관계 (0) | 2018.09.28 |
[R분석] EDA탐색적분석 base R (mtcars) (0) | 2018.09.18 |
[R분석] Anomaly Detection과 EDA 결합 (IsolationForest) 활용 (0) | 2018.09.05 |
[IsolationForest] Anomaly Detection (0) | 2018.08.30 |