← 記事一覧へ

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

もともとはrChartsを使っていましたが, rChartsはCRANから消えたためplotlyに 載せ替えました. データも, 同梱していた2014年版のCSVから Lahmanパッケージに切り替えてあります. パッケージなら最新まで入っていて, 更新も追えます.

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

3000安打を打った打者

legends <-
  Batting |>
  summarise(通算安打 = sum(H, na.rm = TRUE), .by = playerID) |>
  filter(通算安打 >= 3000)

career <-
  Batting |>
  semi_join(legends, by = "playerID") |>
  # シーズン中の移籍で行が分かれるので, 同じ年はまとめる
  summarise(across(c(G, AB, H, HR, SO), \(x) sum(x, na.rm = TRUE)),
            .by = c(playerID, yearID)) |>
  arrange(playerID, yearID) |>
  mutate(通算安打 = cumsum(H),
         通算本塁打 = cumsum(HR),
         通算三振 = cumsum(SO),
         通算試合 = cumsum(G),
         デビュー年 = min(yearID),
         .by = playerID) |>
  inner_join(People |> transmute(playerID, 選手 = paste(nameFirst, nameLast)),
             by = "playerID")

該当するのは33人です.

もとの記事では28人でしたが, その後 Pujols, Cabrera, Beltré, Rodríguez, そしてイチローが到達しました.

career |>
  summarise(デビュー = min(yearID), 最終年 = max(yearID),
            安打 = max(通算安打), .by = 選手) |>
  arrange(desc(安打)) |>
  head(10) |>
  kable()
選手 デビュー 最終年 安打
Pete Rose 1963 1986 4256
Ty Cobb 1905 1928 4189
Hank Aaron 1954 1976 3771
Stan Musial 1941 1963 3630
Tris Speaker 1907 1928 3514
Derek Jeter 1995 2014 3465
Cap Anson 1871 1897 3435
Honus Wagner 1897 1917 3420
Carl Yastrzemski 1961 1983 3419
Albert Pujols 2001 2022 3384

通算安打の積み上げ

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, "通算安打", "通算安打数")

19世紀からの選手が並ぶので線が混みます.

デビュー年で分けて見ます. 1970年以降にデビューした選手に絞ります.

recent <- career |> filter(デビュー年 >= 1970)
career_line(recent, "通算安打", "通算安打数 (1970年以降デビュー)")

17人です.

通算本塁打

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

1920年代を境に傾きが変わります. 飛ぶボールの導入とスピットボール禁止で 本塁打が急増した時期です.

通算三振

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

古い選手は線が途中から始まります. 三振の記録が残っていない年があるためです. 公式記録として整備されたのは後年で, それ以前は欠損しています. 0本だったわけではありません.

career |>
  summarise(三振が記録されている年 = sum(!is.na(SO) & SO > 0),
            在籍年数 = n(), .by = 選手) |>
  filter(三振が記録されている年 < 在籍年数) |>
  arrange(三振が記録されている年) |>
  head(5) |>
  kable()
選手 三振が記録されている年 在籍年数
Paul Waner 19 20
Willie Mays 22 23
Eddie Collins 23 25

最近の選手だけ見ます.

career_line(recent, "通算三振", "通算三振数 (1970年以降デビュー)")

三振の少なさが際立つのはTony Gwynnで, 打数9,288に対して三振434, 比は21.4です.

同じく安打を量産したAlex Rodriguezの 4.6と比べると, タイプの違いが分かります.

ratio |> select(選手, 打数 = AB, 三振 = SO, `打数/三振` = 比) |> head(5) |> kable(digits = 1)
選手 打数 三振 打数/三振
Tony Gwynn 9288 434 21.4
Wade Boggs 9180 745 12.3
George Brett 10349 908 11.4
Ichiro Suzuki 9934 1080 9.2
Cal Ripken 11551 1305 8.9

注意

  • 積み上げはLahmanに記録がある年だけの合計です. 上に書いたとおり 古い年の三振などは欠損があります.
  • シーズン途中の移籍は同じ年にまとめています.
  • メジャーでの記録だけです. イチローの日本での安打は入っていません.