メジャーリーガーの月別打率の推移をrChartします.
retrosheet(“http://www.retrosheet.org/game.htm”)から打席結果データを取得して, パースして整形したものを利用します.
データは, githubにcsvであります(https://github.com/gghatano/baseball_data).
コードの中では, PostgreSQLから読んでいます.
library(data.table)
library(dplyr)
library(RPostgreSQL)
library(magrittr)
library(rCharts)
# read data from PostgreSQL
# dbDisconnect(conn)
conn = dbConnect(PostgreSQL(), dbname="baseball_data")
dat = dbReadTable(conn, "all2013")
dat = dat %>% as.data.table()
# calculate the monthly AVG
dat_m = dat %>%
select(GAME_ID, BAT_ID, AB_FL, H_FL, BAT_HOME_ID, AWAY_TEAM_ID) %>% filter(AB_FL == "T") %>%
mutate(month = substr(GAME_ID, 9, 9)) %>%
mutate(HOME = substr(GAME_ID, 1,3)) %>%
mutate(AWAY = AWAY_TEAM_ID) %>%
mutate(BAT_TEAM = ifelse(BAT_HOME_ID, HOME, AWAY)) %>%
mutate(H_FL = (H_FL>0)) %>%
filter(month >= 4) %>%
group_by(BAT_ID, month, BAT_TEAM) %>%
dplyr::summarise(ATBAT = n(), HITS = sum(H_FL)) %>%
mutate(AVG = round(HITS / ATBAT, 3))
# Over 500 ATBAT player
dat_over_500 = dat_m %>%
group_by(BAT_ID, add=FALSE) %>%
dplyr::summarise(ATBATS = sum(ATBAT)) %>%
filter(ATBATS > 500) %>%
select(BAT_ID)
# join the ID data to FULLNAME data
fullname = dbReadTable(conn, "fullname_id")
dat_m = dat_over_500 %>% inner_join(dat_m, by="BAT_ID")
dat_m = fullname %>% as.data.table() %>% inner_join(dat_m, by = "BAT_ID")
# Asian players
asians = c("Norichika Aoki", "Ichiro Suzuki", "Shin-Soo Choo")
# dat_m = dat_m %>% filter(FULLNAME %in% asians)
# as.Date data
dat_m =
dat_m %>% mutate(date = paste("2013-0", month, "-01", sep="")) %>%
mutate(date = as.Date(date))
# make lineChart with rCharts
n1 = nPlot(AVG ~ date, group="FULLNAME", data = dat_m, type="lineChart")
n1$xAxis(tickValues="#![15796, 15826, 15857, 15887, 15918,15949]!#",
tickFormat = "#!function(d) {return d3.time.format('%m')(new Date(d * 86400000));}!#")
n1$chart(forceY = "#![0]!#")
n1$chart(showValues=TRUE)
n1$chart(useInteractiveGuideline=TRUE)
n1$xAxis(axisLabel="MONTH")
n1$yAxis(axisLabel="AVG")
n1$addFilters("BAT_TEAM")
n1$show("iframesrc", cdn = TRUE)