socceR ================ RoboCup Soccer 2Dの試合分析のためのツール群 ## 機能 ### `read_rcl` 指定されたrclファイルを解析し、tibbleにして返します。 ``` r library(tidyverse) source("R/read_rcl.R") rcl <- read_rcl("data/20220405162804-HELIOS_base_3-vs-enemy_2.rcl") head(rcl) ## # A tibble: 6 x 6 ## step team unum command args line ## ## 1 0 HELIOS_base 1 init "0,114\tRecv HELIOS_base_1: (init~ ## 2 0 HELIOS_base 1 version "0,114\tRecv HELIOS_base_1: (init~ ## 3 0 HELIOS_base 1 goalie "0,114\tRecv HELIOS_base_1: (init~ ## 4 0 HELIOS_base 1 synch_see "0,115\tRecv HELIOS_base_1: (sync~ ## 5 0 HELIOS_base 1 ear "0,115\tRecv HELIOS_base_1: (sync~ ## 6 0 HELIOS_base 1 off "0,115\tRecv HELIOS_base_1: (sync~ ``` ### `read_rcg` 指定されたrcgファイルを解析し、tibbleにして返します。 ``` r library(tidyverse) source("R/read_rcg.R") rcg <- read_rcg("data/20220405162804-HELIOS_base_3-vs-enemy_2.rcg") head(rcg) ## # A tibble: 6 x 21 ## step side unum type state x y vx vy body neck vq vw ## ## 1 1 l 1 0 9 -49 0 0 0 54.7 0 h 180 ## 2 1 l 2 17 1 -25 -5 0 0 -118. 0 h 180 ## 3 1 l 3 8 1 -25 5 0 0 108. 0 h 180 ## 4 1 l 4 13 1 -25 -10 0 0 -117. 0 h 180 ## 5 1 l 5 6 1 -25 10 0 0 -174. 0 h 180 ## 6 1 l 6 11 1 -25 0 0 0 114. 0 h 180 ## # ... with 8 more variables: stamina , effort , recovery , ## # capacity , ball_x , ball_y , ball_vx , ball_vy ``` ## plotlyを使ったビジュアライゼーションのサンプル ``` r library(plotly) ball_path <- rcg |> dplyr::group_nest(step, ball_x, ball_y) |> dplyr::mutate(move_dist_x = ball_x - dplyr::lag(ball_x), move_dist_y = ball_y - dplyr::lag(ball_y), move_dist = sqrt(move_dist_x^2 + move_dist_y^2), move_dist = dplyr::if_else(is.na(move_dist), 0, move_dist)) |> dplyr::filter(move_dist != 0 & move_dist < 40) ball_path |> plotly::plot_ly(showlegend = FALSE) |> plotly::add_markers( data = ball_path, x = ~ball_x, y = ~ball_y, z = ~move_dist, marker = list(color = ~move_dist, size = 3, colorscale = "Viridis", opacity = 0.8, showscale = FALSE) ) |> plotly::add_paths( data = ball_path |> dplyr::select(step, ball_x, ball_y, move_dist) |> dplyr::mutate(base = 0) |> tidyr::pivot_longer(c(move_dist, base)) |> dplyr::group_by(step), x = ~ball_x, y = ~ball_y, z = ~value, color = ~value ) |> plotly::hide_colorbar() |> plotly::layout( scene = list( xaxis = list(title = "ボールのX座標"), yaxis = list(title = "ボールのY座標"), zaxis = list(title = "ボールの飛距離"), camera = list(eye = list(x = 0.8, y = -1.8, z = 0.8), center = list(x = 0.0, y = 0.0, z = -0.2)) ) ) ``` ![plotly-visualization-sample](image/plotly-visualization-sample.png)