打球の年度間相関
#dfには2015-2020のstatcastのデータが入っている
df <- df%>%
select(events,type,des,launch_angle,launch_speed,woba_denom,woba_value,estimated_woba_using_speedangle,
player_name,pitcher_name,barrel,game_year,iso_value,babip_value,estimated_ba_using_speedangle)
df <- df %>% mutate(
xwoba_value = ifelse(type == "X",estimated_woba_using_speedangle,woba_value),
Hard_Hit = ifelse(launch_speed >= 95 ,1,0),
Quality_of_Contact = case_when(
(launch_speed*1.5 - launch_angle) >= 117 &
(launch_speed + launch_angle) >= 124 &
launch_speed >= 98 &
launch_angle >=4 & launch_angle <= 50 ~ "Barrel",
(launch_speed * 1.5 - launch_angle) >= 111 &
(launch_speed + launch_angle) >= 119 &
launch_speed >= 95 &
launch_angle >=0 & launch_angle <=52 ~ "Solid",
launch_speed <= 59 ~ "Poorly_Weak",
(launch_speed * 2 - launch_angle) >= 87 &
launch_angle <= 41 &
(launch_speed * 2 + launch_angle) <= 175 &
(launch_speed + launch_angle * 1.3) >= 89 &
launch_speed >= 59 & launch_speed <= 72 ~ "Flare",
(launch_speed + launch_angle * 1.3) <= 112 &
(launch_speed + launch_angle * 1.55) >= 92 &
launch_speed >= 72 & launch_speed <= 86 ~"Flare",
launch_angle <= 20 &
(launch_speed + launch_angle * 2.4) >= 98 &
launch_speed >= 86 & launch_speed <= 95 ~ "Flare",
(launch_speed - launch_angle) >= 76 &
(launch_speed + launch_angle * 2.4) >= 98 &
launch_speed >= 95 &
launch_angle <= 30 ~"Burner",
(launch_speed + launch_angle * 2) >= 116 ~ "Poorly_Under",
(launch_speed + launch_angle * 2) <= 116 ~ "Poorly_Topped",
TRUE ~ "unclassified"),
Barrel = ifelse(Quality_of_Contact == "Barrel",1,0),
Solid = ifelse(Quality_of_Contact == "Solid",1,0),
Poorly_Weak = ifelse(Quality_of_Contact == "Poorly_Weak",1,0),
Flare = ifelse(Quality_of_Contact == "Flare",1,0),
Burner = ifelse(Quality_of_Contact == "Burner",1,0),
Poorly_Under = ifelse(Quality_of_Contact == "Poorly_Under",1,0),
Poorly_Topped = ifelse(Quality_of_Contact == "Poorly_Topped",1,0),
sweet_spot = ifelse(launch_angle >=8 & launch_angle <= 32,1,0),
GB_FL = ifelse(launch_angle < 10 ,1,0),
LD_FL = ifelse(launch_angle >= 10 & launch_angle < 25 ,1,0),
FB_FL = ifelse(launch_angle >=25 & launch_angle <= 50,1,0),
PU_FL = ifelse(launch_angle >=50 ,1,0),
GB_BABIP_value = ifelse(launch_angle < 10 ,babip_value,NA),
LD_BABIP_value = ifelse(launch_angle >= 10 & launch_angle < 25,babip_value,NA),
FB_BABIP_value = ifelse(launch_angle >= 25 & launch_angle <50 ,babip_value,NA),
PU_BABIP_value = ifelse(launch_angle >= 50 ,babip_value,NA),
xBABIP_value = ifelse(events != "home_run",estimated_ba_using_speedangle,NA))
bat_x <- df %>%
filter(! grepl("bunt", des))%>%
filter(type == "X")%>%
filter(woba_denom == 1)%>%
group_by(game_year,player_name)%>%
dplyr::summarise(wOBAcon_denom = sum(woba_denom,na.rm=TRUE),
wOBAcon = sum(woba_value,na.rm=TRUE)/wOBAcon_denom,
xwOBAcon = sum(estimated_woba_using_speedangle,na.rm=TRUE) / wOBAcon_denom,
BABIP = mean(babip_value,na.rm=TRUE),
xBABIP = mean(xBABIP_value,na.rm=TRUE),
mean_velo = mean(launch_speed,na.rm =TRUE),
mean_angle = mean(launch_angle,na.rm=TRUE),
Hard_Hitpct = sum(Hard_Hit,na.rm=TRUE)/wOBAcon_denom*100,
Barrelpct = sum(Barrel,na.rm=TRUE)/wOBAcon_denom*100,
Solidpct = sum(Solid,na.rm=TRUE)/wOBAcon_denom*100,
Weakpct = sum(Poorly_Weak,na.rm=TRUE)/wOBAcon_denom,
Flarepct = sum(Flare,na.rm=TRUE)/wOBAcon_denom*100,
Toppedpct = sum(Poorly_Topped,na.rm=TRUE) / wOBAcon_denom*100,
Burnerpct = sum(Burner,na.rm=TRUE) / wOBAcon_denom*100,
Underpct = sum(Poorly_Under,na.rm=TRUE)/wOBAcon_denom*100,
sweet_spotpct = sum(sweet_spot,na.rm=TRUE)/wOBAcon_denom*100,
GBpct = sum(GB_FL,na.rm=TRUE)/wOBAcon_denom*100,
LDpct = sum(LD_FL,na.rm=TRUE)/wOBAcon_denom*100,
FBpct = sum(FB_FL,na.rm=TRUE)/wOBAcon_denom*100,
PUpct = sum(PU_FL,na.rm=TRUE)/wOBAcon_denom*100)%>%
filter(wOBAcon_denom >= 300)%>%
select(game_year,player_name,wOBAcon,xwOBAcon,BABIP,xBABIP,mean_velo,mean_angle,Hard_Hitpct,
sweet_spotpct,Barrelpct,Solidpct,Weakpct,Flarepct,Burnerpct,Toppedpct,Burnerpct,Underpct,GBpct,LDpct,FBpct,PUpct)
next_bat_x <- bat_x %>%
rename(next_year = game_year,
next_wOBAcon = wOBAcon,
next_xwOBAcon = xwOBAcon,
next_BABIP = BABIP,
next_xBABIP = xBABIP,
next_mean_velo = mean_velo,
next_mean_angle = mean_angle,
next_Barrelpct = Barrelpct,
next_Solidpct = Solidpct,
next_Weakpct = Weakpct,
next_Flarepct = Flarepct,
next_Toppedpct = Toppedpct,
next_Burnerpct = Burnerpct,
next_Underpct = Underpct,
next_Hard_Hitpct = Hard_Hitpct,
next_sweet_spotpct = sweet_spotpct,
next_GBpct = GBpct,
next_LDpct = LDpct,
next_FBpct = FBpct,
next_PUpct = PUpct)
bat_x <- bat_x %>%
mutate(next_year = game_year + 1)
data <- inner_join(bat_x,next_bat_x)
cor(data$wOBAcon,data$next_wOBAcon)
cor(data$xwOBAcon,data$next_xwOBAcon)
cor(data$BABIP,data$next_BABIP)
cor(data$xBABIP,data$next_xBABIP)
cor(data$Hard_Hitpct,data$next_Hard_Hitpct)
cor(data$Barrelpct,data$next_Barrelpct)
cor(data$Solidpct,data$next_Solidpct)
cor(data$Flarepct,data$next_Flarepct)
cor(data$Burnerpct,data$next_Burnerpct)
cor(data$Weakpct,data$next_Weakpct)
cor(data$Underpct,data$next_Underpct)
cor(data$Toppedpct,data$next_Toppedpct)
cor(data$sweet_spotpct,data$next_sweet_spotpct)
cor(data$GBpct,data$next_GBpct)
cor(data$LDpct,data$next_LDpct)
cor(data$FBpct,data$next_FBpct)
cor(data$PUpct,data$next_PUpct)
Contact_stats <- df %>%
filter(! grepl("bunt", des))%>%
filter(type == "X")%>%
filter(woba_denom == 1)%>%
group_by(Quality_of_Contact)%>%
dplyr::summarise(wOBAcon_denom = sum(woba_denom,na.rm=TRUE),
wOBAcon_value = sum(woba_value,na.rm=TRUE),
wOBAcon = round(wOBAcon_value / wOBAcon_denom,3),
xBA = round(mean(estimated_ba_using_speedangle,na.rm=TRUE),3),
BABIP = round(mean(babip_value,na.rm=TRUE),3),
ISO = round(mean(iso_value,na.rm=TRUE),3),
mean_velo = round(mean(launch_speed,na.rm=TRUE),1),
mean_angle = round(mean(launch_angle,na.rm=TRUE),1))
この記事が気に入ったらサポートをしてみませんか?