← 記事一覧へ

Lahmanのデータベースを使って, 歴代の投手成績推移をplotlyで可視化します.

rChartsがCRANから消えたのでplotlyに, データも2014年版の同梱CSVから Lahmanパッケージに切り替えました.

library(dplyr)
library(ggplot2)
library(plotly)
library(Lahman)
library(knitr)

250勝した投手

legends <-
  Pitching |>
  summarise(通算勝利 = sum(W, na.rm = TRUE), .by = playerID) |>
  filter(通算勝利 >= 250)

career <-
  Pitching |>
  semi_join(legends, by = "playerID") |>
  summarise(across(c(W, L, H, SO, HR, BB), \(x) sum(x, na.rm = TRUE)),
            .by = c(playerID, yearID)) |>
  arrange(playerID, yearID) |>
  mutate(通算勝利 = cumsum(W),
         通算被本塁打 = cumsum(HR),
         通算奪三振 = cumsum(SO),
         通算与四球 = cumsum(BB),
         デビュー年 = min(yearID),
         .by = playerID) |>
  inner_join(People |> transmute(playerID, 選手 = paste(nameFirst, nameLast)),
             by = "playerID")

該当するのは49人です.

career |>
  summarise(デビュー = min(yearID), 最終年 = max(yearID),
            勝利 = max(通算勝利), .by = 選手) |>
  arrange(desc(勝利)) |>
  head(10) |>
  kable()
選手 デビュー 最終年 勝利
Cy Young 1890 1911 511
Walter Johnson 1907 1927 417
Pete Alexander 1911 1930 373
Christy Mathewson 1900 1916 373
Pud Galvin 1875 1892 365
Warren Spahn 1942 1965 363
Kid Nichols 1890 1906 362
Greg Maddux 1986 2008 355
Roger Clemens 1984 2007 354
Tim Keefe 1880 1893 342

通算勝利数

career_line <- function(d, ycol, title) {
  plot_ly(d, x = ~yearID, y = as.formula(paste0("~", ycol)),
          color = ~選手, type = "scatter", mode = "lines") |>
    layout(title = title,
           xaxis = list(title = "year"),
           yaxis = list(title = ycol, rangemode = "tozero"))
}

career_line(career, "通算勝利", "通算勝利数")

デビュー年代別に数えると, 1960年代が9人で最多です.

career |>
  summarise(デビュー = min(yearID), .by = 選手) |>
  mutate(年代 = floor(デビュー / 10) * 10) |>
  count(年代) |>
  ggplot(aes(x = 年代, y = n)) +
  geom_col(fill = "grey60") +
  ylab("人数") +
  ggtitle("250勝投手のデビュー年代")

近年ほど少なくなっています. 先発が完投しなくなり, 登板数も年間30試合台に 収まるようになったので, 通算勝利が積み上がりにくくなりました. 250勝は事実上, 過去の記録になりつつあります.

通算被本塁打

career_line(career, "通算被本塁打", "通算被本塁打数")

1940年代の前後で傾きが変わって見えます. 本塁打そのものが増えた時期です.

通算奪三振

career_line(career, "通算奪三振", "通算奪三振数")

Nolan Ryanが5,714で突出しています.

1980年以降にデビューした投手

career_line(career |> filter(デビュー年 >= 1980),
            "通算被本塁打", "通算被本塁打数 (1980年以降デビュー)")

在籍年数が最も長いのはNolan Ryanで28年, 1966年から1993年までです.

long |> select(選手, 初年, 終年, 在籍, 勝利) |> head(5) |> kable()
選手 初年 終年 在籍 勝利
Nolan Ryan 1966 1993 28 324
Tommy John 1963 1989 27 288
Jamie Moyer 1986 2012 27 269
Jim Kaat 1959 1983 25 283
Early Wynn 1939 1963 25 300

注意

  • Lahmanに記録がある年だけの合計です.
  • シーズン途中の移籍は同じ年にまとめています.
  • 勝利数は投手の指標としては時代の影響を強く受けます. 上のグラフは 「誰が優れているか」ではなく「どの時代に積み上げやすかったか」を 見るものと考えたほうがよさそうです.