打球の年度間相関

打球の質 訂正

打球_Stats


#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))


この記事が気に入ったらサポートをしてみませんか?