トップ 履歴 一覧 Farm ソース 検索 ヘルプ RSS ログイン

ggimageパッケージの例_東京芝2400mのレコード推移


キーワード

最終更新時間:2020年06月02日 19時03分59秒
アフィリエイト・広告について
プライバシーポリシー

RPubsにも同じ記事があります。

ネタ元

Visualizing Eliud Kichoge's new marathon recordを参考に、データだけ変えてみました。

パッケージの読み込み

library(tidyverse)
library(rvest)
library(janitor)
library(lubridate)
library(ggimage)
library(hrbrthemes)

データの読み込み

元記事では、WikipediaのMarathon world record progressionからスクレイピングしてデータを収集していますが、ここでは、JRA-VANTARGET frontier JVを使い、東京競馬場のレコードタイムを、過去の変遷を含めて取得し、CSVファイルに出力したものを使います。

なお、JRA-VANのデータは1986年以降に限定されるので、それ以前のレコードタイムは含まれていません。また、有償のデータベースなので、出力したデータ全体は、この記事には含んでいません。

df <- read_csv("./tokyo_record.csv")
head(df)

## # A tibble: 6 x 49
##   M    日付   開催     R レース名     馬名               C    性別   年齢
##   <lgl> <chr>  <chr> <dbl> <chr>        <chr>              <lgl> <chr> <dbl>
## 1 NA    191116 5東5     11 東京スポG3   コントレイル       NA    牡        2
## 2 NA    191116 5東5      2 未勝利*      サトノフラッグ     NA    牡        2
## 3 NA    191102 5東1     11 京王杯2G2   タイセイビジョン   NA    牡        2
## 4 NA    191026 4東8      2 未勝利*      マイネルデステリョ NA    牡        2
## 5 NA    191005 4東1     11 サウジアG3   サリオス           NA    牡        2
## 6 NA    190526 2東C     12 目黒記念HG2 ルックトゥワイス   NA    牡        6
##   騎手     斤量   頭数  馬番 馬印  馬印2 馬印3 馬印4 レース印1  人気 着順 
##   <chr>    <chr> <dbl> <dbl> <lgl> <lgl> <lgl> <lgl> <lgl>      <dbl> <chr>
## 1 ムーア   55        8     6 NA    NA    NA    NA    NA             1 1   
## 2 マーフィ 55       16     8 NA    NA    NA    NA    NA             1 1   
## 3 ルメール 55       10     4 NA    NA    NA    NA    NA             1 1   
## 4 津村明秀 55        9     2 NA    NA    NA    NA    NA             5 1   
## 5 石橋脩   55        9     3 NA    NA    NA    NA    NA             1 1   
## 6 レーン   55       13    10 NA    NA    NA    NA    NA             3 1   
##   `芝・ダ`  距離 コース区分 馬場状態  賞金 多頭出し 所属  調教師   走破タイム
##   <chr>    <dbl> <chr>      <chr>    <dbl> <chr>    <chr> <chr>         <dbl>
## 1 芝        1800 C          良        3300 <NA>     (栗)  矢作芳人       1445
## 2 芝        2000 C          良         500 <NA>     (美)  国枝栄         1595
## 3 芝        1400 B          良        3800 <NA>     (栗)  西村真幸       1208
## 4 芝        2000 B          稍         500 <NA>     (美)  畠山吉宏       1598
## 5 芝        1600 A          良        3300 <NA>     (美)  堀宣行         1327
## 6 芝        2500 C          良        5700 <NA>     (栗)  藤原英昭       2282
##    着差 `2角` `3角` `4角` 上り3F   PCI 好走   PCI3  RPCI 上3F地点差 馬体重
##   <dbl> <dbl> <dbl> <dbl>  <dbl> <dbl> <chr> <dbl> <dbl>      <dbl>  <dbl>
## 1  -0.8     5     5     5   33.1  57.9 *      55.5  54.1        0.8    456
## 2  -0.5     8     6     7   34.5  55.6 *      55.3  53.5        0.5    492
## 3  -0.3    NA     6     6   33.5  55.9 *      53.6  52.7        0.6    460
## 4  -0.4     3     3     3   35.4  52.2 *      53.5  48.6        0.9    444
## 5  -0.2    NA     3     3   33.1  58   *      56.7  56          0.4    540
## 6  -0.2    12    11    10   34.3  54.9 *      53.3  49.1        1.5    444
##   馬体重増減 ブリンカー 単勝配当 複勝配当  枠連  馬連  馬単 3連複 3連単
##        <dbl> <chr>         <dbl>    <dbl> <dbl> <dbl> <dbl>  <dbl>  <dbl>
## 1          0 <NA>            250      110    NA   360   640    330   1330
## 2         -2 <NA>            370      190  3250  3010  4330 154080 415640
## 3          4 <NA>            210      110   540   560   860    990   3660
## 4         -2 <NA>           1920      230  6440  5730 12730   1450  27190
## 5          6 <NA>            150      110   320   320   430    430   1080
## 6          2 <NA>            730      240   690  4490  7500  18420  90500

データは、東京競馬場のすべてのコース、距離についてのレコードタイムの推移です。今回は日本ダービーやジャパンカップが行われる、芝2400mに限定してグラフ化します。距離 == 2400 および 芝・ダ == "芝" として、データを抽出します。また、データには馬場状態や騎手、配当なども含まれていますが、ここでは日付と馬名、タイムだけを選択します。

df_2400 <- filter(df, 距離 == 2400, `芝・ダ` == "芝") %>% select(日付, 馬名, 走破タイム)
kable(df_2400, row.names = TRUE)

1986年以降、8回のレコード更新がなされ、現在のレコードは、2018年のジャパンカップでアーモンドアイがマークした、2分20秒6であることがわかります。なお、東京競馬場は2003年にリニューアル工事が行われ、直線がさらに長くなるなど、コース形態も変わりました。そのため、それ以前のレコード (ホーリックスの2分22秒2) はいったんリセットされています。

しかし、居並ぶ歴史的名馬 (他はすべてGI馬) に混じった、ダンツランニングが異彩を放ちますね...。とはいえ、その後重賞で好走するなど、「順調だったら」という馬でした。

データの加工

ファイルから読み込んだ段階では、日付とタイムが扱いづらい形式になっているので、加工します。

はじめに、日付をdatetime型に変換します。lubridateパッケージの ymd() 関数を使います。

df_2400[["日付"]] <- ymd(df_2400[["日付"]])
kable(df_2400, row.names = TRUE)

次に、タイムをPeriod型に変換します。lubridateパッケージの ms() 関数を使います。ただ、"2206" (競馬ファンはこれで2分20秒6と理解できますが) といった文字列のままでは変換できないので、stringrパッケージの str_replace() 関数を使い、分と秒の区切り文字 (:) および、10分の1秒の前にドットを挿入します。

df_2400[["走破タイム"]] <- str_replace(df_2400[["走破タイム"]], "(^.)", "\\1:")
df_2400[["走破タイム"]] <- str_replace(df_2400[["走破タイム"]], "(.$)", ".\\1")
df_2400[["走破タイム"]] <- ms(df_2400[["走破タイム"]])
kable(df_2400, row.names = TRUE)

データフレームへの画像情報の付与

今回は、グラフ内の要素を画像で表現したいので、あらかじめダウンロードした「競馬っぽい」画像のファイル名を、データフレームに付与します。画像はシルエットACから入手しました。現在のレコードタイム (2018年、アーモンドアイ) だけ、別の写真を使ってみます。

df_2400 <- df_2400 %>% mutate(image = "horse.png")
df_2400[1, "image"] <- "almond_eye.jpg"
kable(df_2400, row.names = TRUE)

グラフの描画

では、グラフを描いてみましょう。ggimageパッケージの geom_image() 関数を使うと、データポイントを任意の画像で表示できます。

g <- ggplot(df_2400, aes(x = 日付, y = 走破タイム)) +
    geom_line(colour = "pink", size = 3) +
    geom_image(aes(image = image), size = 0.12)+
    annotate("text", x = as.Date("2003-04-26"), y = ms("02:24.5"), label = "改装", size = 6) +
    annotate("text", x = as.Date("2018-11-25"), y = ms("02:21.5"), label = "2018ジャパンカップ\nアーモンドアイ", size = 6) +
    scale_x_date(limits = c(ymd("1985-01-01"), ymd("2022-12-31"))) +
    scale_y_time(limits = c(ms("02:19.0"), ms("02:26.0"))) +
    theme_ipsum_rc() +
    labs(title = "東京競馬場 芝2400mのレコードタイム推移",
       subtitle = "2003年に改装されたため、それまでのレコードはいちどリセットされている。") +
    theme(
      panel.grid.minor = element_blank(),
      panel.grid.major = element_line(colour = "gray75", size = 0.3, linetype = "dashed"),
      plot.title = element_text(size = 16),
      plot.subtitle = element_text(size = 12)
      )
g
ggsave("tokyo_record.jpg", g, width = 12, height = 8)


カテゴリ: [R,データ分析]