all_results <- rbind(batted_ball_results_2015, batted_ball_results_2016, batted_ball_results_2017,batted_ball_results_2018, batted_ball_results_2019)

Best batter seasons by QC+

Worst batter seasons by QC+

Best pitcher seasons by QC+

Worst pitcher seasons by QC+

Bested batted from each season

Video of Donaldson’s hit: https://baseballsavant.mlb.com/sporty-videos?playId=4ceff1ef-1e40-4e49-b582-4eaad6b7006e

Video of Cordero’s hit: https://baseballsavant.mlb.com/sporty-videos?playId=77b2fd12-d05a-493b-8954-a6e612e93b2c

Video of Sano’s hit: https://baseballsavant.mlb.com/sporty-videos?playId=13ac292c-026f-4cb3-999a-a5126148356a

Worst batted from each season

Video of Chapman’s hit: https://baseballsavant.mlb.com/sporty-videos?playId=a6d2491d-7554-4b11-8384-9889a781d31b

Video of Hamilton’s hit: https://baseballsavant.mlb.com/sporty-videos?playId=1d5503f2-9c8e-4931-80d0-2a5cd890e26e

Video of Kendrick’s hit: https://baseballsavant.mlb.com/sporty-videos?playId=429238c5-6d56-47c9-84a6-d3c589ceaaa8

Best ball by QC+ that was an out

for(i in 2015:2019) {
  best_qcp_out <- all_results %>%
    filter(game_year == i) %>%
    filter(outcome_ec == 0) %>%
    dplyr::select(c(player_name, pitcher_name, qcp, game_date)) %>%
    arrange(desc(qcp)) %>%
    slice_head(n = 1)  
  print(best_qcp_out)
  }

Video of Lindor’s out: https://baseballsavant.mlb.com/sporty-videos?playId=2f4d7da4-0861-4caa-9310-4476cd18389e - you can see the wind (an unaccounted variable) affecting the ball!

Video of Brantley’s out: https://baseballsavant.mlb.com/sporty-videos?playId=84def108-5b88-47e2-91e2-8ba848d0ba09 - the wind also had a major impact here. The announcers thought it was a no-doubter

Video of Garcia’s out: https://baseballsavant.mlb.com/sporty-videos?playId=d7694a58-6658-4266-aaf3-3ea213b611de

Worst ball by QC+ that was a home run

for(i in 2017:2019) {
  best_qcp_out <- all_results %>%
    filter(game_year == i) %>%
    filter(outcome_ec == 4) %>%
    dplyr::select(c(player_name, pitcher_name, qcp, game_date)) %>%
    arrange((qcp)) %>%
    slice_head(n = 1)  
  print(best_qcp_out)
  }

Video of Amarista’s home run: https://baseballsavant.mlb.com/sporty-videos?playId=71b57e87-c1dc-4b98-922f-ec33ba083b60

Video of Wieters’ home run: https://baseballsavant.mlb.com/sporty-videos?playId=c01ba1f6-d3ec-42e4-9c37-b69a4a7780c4

Video of Choo’s home run: https://baseballsavant.mlb.com/sporty-videos?playId=63d09954-439f-4698-b308-10eb9df0acb2

Average QC+ by venue and batter handedness

all_results %>%
  group_by(venue_batter.stand) %>%
  summarise(bbe = n(),
            avg_qcp = mean(qcp)) %>%
  arrange(desc(avg_qcp))
LS0tCnRpdGxlOiAiQ29udGV4dHVhbGl6aW5nIFFDKyIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKYGBge3J9CmFsbF9yZXN1bHRzIDwtIHJiaW5kKGJhdHRlZF9iYWxsX3Jlc3VsdHNfMjAxNSwgYmF0dGVkX2JhbGxfcmVzdWx0c18yMDE2LCBiYXR0ZWRfYmFsbF9yZXN1bHRzXzIwMTcsYmF0dGVkX2JhbGxfcmVzdWx0c18yMDE4LCBiYXR0ZWRfYmFsbF9yZXN1bHRzXzIwMTkpCmBgYAoKKipCZXN0IGJhdHRlciBzZWFzb25zIGJ5IFFDKyoqCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9CmFsbF9yZXN1bHRzICU+JQogIGdyb3VwX2J5KGdhbWVfeWVhciwgcGxheWVyX25hbWUpICU+JQogIHN1bW1hcmlzZShiYmUgPSBuKCksCiAgICAgICAgICAgIGF2Z19xY3AgPSBtZWFuKHFjcCkpICU+JQogIGZpbHRlcihiYmUgPiAxNTApICU+JQogIGFycmFuZ2UoZGVzYyhhdmdfcWNwKSkKYGBgCgoqKldvcnN0IGJhdHRlciBzZWFzb25zIGJ5IFFDKyoqCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9CmFsbF9yZXN1bHRzICU+JQogIGdyb3VwX2J5KGdhbWVfeWVhciwgcGxheWVyX25hbWUpICU+JQogIHN1bW1hcmlzZShiYmUgPSBuKCksCiAgICAgICAgICAgIGF2Z19xY3AgPSBtZWFuKHFjcCkpICU+JQogIGZpbHRlcihiYmUgPiAxNTApICU+JQogIGFycmFuZ2UoKGF2Z19xY3ApKQpgYGAKCioqQmVzdCBwaXRjaGVyIHNlYXNvbnMgYnkgUUMrKioKYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0KYWxsX3Jlc3VsdHMgJT4lCiAgZ3JvdXBfYnkoZ2FtZV95ZWFyLCBwaXRjaGVyX25hbWUpICU+JQogIHN1bW1hcmlzZShiYmUgPSBuKCksCiAgICAgICAgICAgIGF2Z19xY3AgPSBtZWFuKHFjcCkpICU+JQogIGZpbHRlcihiYmUgPiAxNTApICU+JQogIGFycmFuZ2UoYXZnX3FjcCkKYGBgCgoqKldvcnN0IHBpdGNoZXIgc2Vhc29ucyBieSBRQysqKgpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQphbGxfcmVzdWx0cyAlPiUKICBncm91cF9ieShnYW1lX3llYXIsIHBpdGNoZXJfbmFtZSkgJT4lCiAgc3VtbWFyaXNlKGJiZSA9IG4oKSwKICAgICAgICAgICAgYXZnX3FjcCA9IG1lYW4ocWNwKSkgJT4lCiAgZmlsdGVyKGJiZSA+IDE1MCkgJT4lCiAgYXJyYW5nZShkZXNjKGF2Z19xY3ApKQpgYGAKCioqQmVzdGVkIGJhdHRlZCBmcm9tIGVhY2ggc2Vhc29uKioKYGBge3J9CmZvcihpIGluIDIwMTU6MjAxOSkgewogIGJlc3RfaGl0IDwtIGFsbF9yZXN1bHRzICU+JQogICAgZmlsdGVyKGdhbWVfeWVhciA9PSBpKSAlPiUKICAgIGRwbHlyOjpzZWxlY3QoYyhwbGF5ZXJfbmFtZSwgcGl0Y2hlcl9uYW1lLCBxY3AsIGdhbWVfZGF0ZSkpICU+JQogICAgYXJyYW5nZShkZXNjKHFjcCkpICU+JQogICAgc2xpY2VfaGVhZChuID0gMSkgIAogIHByaW50KGJlc3RfaGl0KQogIH0KYGBgCgpWaWRlbyBvZiBEb25hbGRzb24ncyBoaXQ6IGh0dHBzOi8vYmFzZWJhbGxzYXZhbnQubWxiLmNvbS9zcG9ydHktdmlkZW9zP3BsYXlJZD00Y2VmZjFlZi0xZTQwLTRlNDktYjU4Mi00ZWFhZDZiNzAwNmUKClZpZGVvIG9mIENvcmRlcm8ncyBoaXQ6IGh0dHBzOi8vYmFzZWJhbGxzYXZhbnQubWxiLmNvbS9zcG9ydHktdmlkZW9zP3BsYXlJZD03N2IyZmQxMi1kMDVhLTQ5M2ItODk1NC1hNmU2MTJlOTNiMmMKClZpZGVvIG9mIFNhbm8ncyBoaXQ6IGh0dHBzOi8vYmFzZWJhbGxzYXZhbnQubWxiLmNvbS9zcG9ydHktdmlkZW9zP3BsYXlJZD0xM2FjMjkyYy0wMjZmLTRjYjMtOTk5YS1hNTEyNjE0ODM1NmEKCioqV29yc3QgYmF0dGVkIGZyb20gZWFjaCBzZWFzb24qKgpgYGB7cn0KZm9yKGkgaW4gMjAxNToyMDE5KSB7CiAgYmVzdF9oaXQgPC0gYWxsX3Jlc3VsdHMgJT4lCiAgICBmaWx0ZXIoZ2FtZV95ZWFyID09IGkpICU+JQogICAgZHBseXI6OnNlbGVjdChjKHBsYXllcl9uYW1lLCBwaXRjaGVyX25hbWUsIHFjcCwgZ2FtZV9kYXRlKSkgJT4lCiAgICBhcnJhbmdlKChxY3ApKSAlPiUKICAgIHNsaWNlX2hlYWQobiA9IDEpICAKICBwcmludChiZXN0X2hpdCkKICB9CmBgYAoKVmlkZW8gb2YgQ2hhcG1hbidzIGhpdDogaHR0cHM6Ly9iYXNlYmFsbHNhdmFudC5tbGIuY29tL3Nwb3J0eS12aWRlb3M/cGxheUlkPWE2ZDI0OTFkLTc1NTQtNGIxMS04Mzg0LTk4ODlhNzgxZDMxYgoKVmlkZW8gb2YgSGFtaWx0b24ncyBoaXQ6IGh0dHBzOi8vYmFzZWJhbGxzYXZhbnQubWxiLmNvbS9zcG9ydHktdmlkZW9zP3BsYXlJZD0xZDU1MDNmMi05YzhlLTQ5MzEtODBkMC0yYTVjZDg5MGUyNmUKClZpZGVvIG9mIEtlbmRyaWNrJ3MgaGl0OiBodHRwczovL2Jhc2ViYWxsc2F2YW50Lm1sYi5jb20vc3BvcnR5LXZpZGVvcz9wbGF5SWQ9NDI5MjM4YzUtNmQ1Ni00N2M5LTg0YTYtZDNjNTg5Y2VhYWE4CgoKKipCZXN0IGJhbGwgYnkgUUMrIHRoYXQgd2FzIGFuIG91dCoqCmBgYHtyfQpmb3IoaSBpbiAyMDE1OjIwMTkpIHsKICBiZXN0X3FjcF9vdXQgPC0gYWxsX3Jlc3VsdHMgJT4lCiAgICBmaWx0ZXIoZ2FtZV95ZWFyID09IGkpICU+JQogICAgZmlsdGVyKG91dGNvbWVfZWMgPT0gMCkgJT4lCiAgICBkcGx5cjo6c2VsZWN0KGMocGxheWVyX25hbWUsIHBpdGNoZXJfbmFtZSwgcWNwLCBnYW1lX2RhdGUpKSAlPiUKICAgIGFycmFuZ2UoZGVzYyhxY3ApKSAlPiUKICAgIHNsaWNlX2hlYWQobiA9IDEpICAKICBwcmludChiZXN0X3FjcF9vdXQpCiAgfQpgYGAKClZpZGVvIG9mIExpbmRvcidzIG91dDogaHR0cHM6Ly9iYXNlYmFsbHNhdmFudC5tbGIuY29tL3Nwb3J0eS12aWRlb3M/cGxheUlkPTJmNGQ3ZGE0LTA4NjEtNGNhYS05MzEwLTQ0NzZjZDE4Mzg5ZSAtIHlvdSBjYW4gc2VlIHRoZSB3aW5kIChhbiB1bmFjY291bnRlZCB2YXJpYWJsZSkgYWZmZWN0aW5nIHRoZSBiYWxsIQoKVmlkZW8gb2YgQnJhbnRsZXkncyBvdXQ6IGh0dHBzOi8vYmFzZWJhbGxzYXZhbnQubWxiLmNvbS9zcG9ydHktdmlkZW9zP3BsYXlJZD04NGRlZjEwOC01Yjg4LTQ3ZTItOTFlMi04YmE4NDhkMGJhMDkgLSB0aGUgd2luZCBhbHNvIGhhZCBhIG1ham9yIGltcGFjdCBoZXJlLiBUaGUgYW5ub3VuY2VycyB0aG91Z2h0IGl0IHdhcyBhIG5vLWRvdWJ0ZXIKClZpZGVvIG9mIEdhcmNpYSdzIG91dDogaHR0cHM6Ly9iYXNlYmFsbHNhdmFudC5tbGIuY29tL3Nwb3J0eS12aWRlb3M/cGxheUlkPWQ3Njk0YTU4LTY2NTgtNDI2Ni1hYWYzLTNlYTIxM2I2MTFkZQoKCioqV29yc3QgYmFsbCBieSBRQysgdGhhdCB3YXMgYSBob21lIHJ1bioqCmBgYHtyfQpmb3IoaSBpbiAyMDE3OjIwMTkpIHsKICBiZXN0X3FjcF9vdXQgPC0gYWxsX3Jlc3VsdHMgJT4lCiAgICBmaWx0ZXIoZ2FtZV95ZWFyID09IGkpICU+JQogICAgZmlsdGVyKG91dGNvbWVfZWMgPT0gNCkgJT4lCiAgICBkcGx5cjo6c2VsZWN0KGMocGxheWVyX25hbWUsIHBpdGNoZXJfbmFtZSwgcWNwLCBnYW1lX2RhdGUpKSAlPiUKICAgIGFycmFuZ2UoKHFjcCkpICU+JQogICAgc2xpY2VfaGVhZChuID0gMSkgIAogIHByaW50KGJlc3RfcWNwX291dCkKICB9CmBgYAoKVmlkZW8gb2YgQW1hcmlzdGEncyBob21lIHJ1bjogaHR0cHM6Ly9iYXNlYmFsbHNhdmFudC5tbGIuY29tL3Nwb3J0eS12aWRlb3M/cGxheUlkPTcxYjU3ZTg3LWMxZGMtNGI5OC05MjJmLWVjMzNiYTA4M2I2MAoKVmlkZW8gb2YgV2lldGVycycgaG9tZSBydW46IGh0dHBzOi8vYmFzZWJhbGxzYXZhbnQubWxiLmNvbS9zcG9ydHktdmlkZW9zP3BsYXlJZD1jMDFiYTFmNi1kM2VjLTQyZTQtOWMzNy1iNjlhNGE3NzgwYzQKClZpZGVvIG9mIENob28ncyBob21lIHJ1bjogaHR0cHM6Ly9iYXNlYmFsbHNhdmFudC5tbGIuY29tL3Nwb3J0eS12aWRlb3M/cGxheUlkPTYzZDA5OTU0LTQzOWYtNDY5OC1iMzA4LTEwZWI5ZGYwYWNiMgoKCioqQXZlcmFnZSBRQysgYnkgdmVudWUgYW5kIGJhdHRlciBoYW5kZWRuZXNzKioKYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0KYWxsX3Jlc3VsdHMgJT4lCiAgZ3JvdXBfYnkodmVudWVfYmF0dGVyLnN0YW5kKSAlPiUKICBzdW1tYXJpc2UoYmJlID0gbigpLAogICAgICAgICAgICBhdmdfcWNwID0gbWVhbihxY3ApKSAlPiUKICBhcnJhbmdlKGRlc2MoYXZnX3FjcCkpCmBgYAoK