Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
Keisuke ANDO
socceR
Commits
49e8ea6f
Commit
49e8ea6f
authored
Apr 16, 2022
by
Keisuke ANDO
😌
Browse files
[add] plotlyを使ったビジュアライゼーションのサンプルを追加(analyzerの互換機能)
parent
59f1eb7a
Changes
3
Hide whitespace changes
Inline
Side-by-side
README.Rmd
View file @
49e8ea6f
...
...
@@ -5,6 +5,8 @@ output: github_document
RoboCup Soccer 2Dの試合分析のためのツール群
## 機能
### `read_rcl`
指定されたrclファイルを解析し、tibbleにして返します。
...
...
@@ -12,7 +14,9 @@ RoboCup Soccer 2Dの試合分析のためのツール群
```{r, message=FALSE, collapse = TRUE}
library(tidyverse)
source("R/read_rcl.R")
read_rcl("data/20220405162804-HELIOS_base_3-vs-enemy_2.rcl")
rcl <- read_rcl("data/20220405162804-HELIOS_base_3-vs-enemy_2.rcl")
head(rcl)
```
### `read_rcg`
...
...
@@ -22,5 +26,59 @@ read_rcl("data/20220405162804-HELIOS_base_3-vs-enemy_2.rcl")
```{r, message=FALSE, collapse = TRUE}
library(tidyverse)
source("R/read_rcg.R")
read_rcg("data/20220405162804-HELIOS_base_3-vs-enemy_2.rcg")
rcg <- read_rcg("data/20220405162804-HELIOS_base_3-vs-enemy_2.rcg")
head(rcg)
```
## plotlyを使ったビジュアライゼーションのサンプル
```{r, message=FALSE, eval=FALSE}
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)
README.md
View file @
49e8ea6f
...
...
@@ -3,6 +3,8 @@ socceR
RoboCup Soccer 2Dの試合分析のためのツール群
## 機能
### `read_rcl`
指定されたrclファイルを解析し、tibbleにして返します。
...
...
@@ -10,21 +12,18 @@ RoboCup Soccer 2Dの試合分析のためのツール群
```
r
library
(
tidyverse
)
source
(
"R/read_rcl.R"
)
read_rcl
(
"data/20220405162804-HELIOS_base_3-vs-enemy_2.rcl"
)
## # A tibble: 867,098 x 6
## step team unum command args line
## <chr> <chr> <chr> <chr> <list> <chr>
## 1 0 HELIOS_base 1 init <chr [1]> "0,114\tRecv HELIOS_base_1: (i~
## 2 0 HELIOS_base 1 version <chr [1]> "0,114\tRecv HELIOS_base_1: (i~
## 3 0 HELIOS_base 1 goalie <chr [0]> "0,114\tRecv HELIOS_base_1: (i~
## 4 0 HELIOS_base 1 synch_see <chr [0]> "0,115\tRecv HELIOS_base_1: (s~
## 5 0 HELIOS_base 1 ear <chr [0]> "0,115\tRecv HELIOS_base_1: (s~
## 6 0 HELIOS_base 1 off <chr [1]> "0,115\tRecv HELIOS_base_1: (s~
## 7 0 HELIOS_base 1 clang <chr [0]> "0,115\tRecv HELIOS_base_1: (s~
## 8 0 HELIOS_base 1 ver <chr [1]> "0,115\tRecv HELIOS_base_1: (s~
## 9 0 HELIOS_base 1 change_view <chr [1]> "0,115\tRecv HELIOS_base_1: (c~
## 10 0 HELIOS_base 1 turn <chr [1]> "0,115\tRecv HELIOS_base_1: (t~
## # ... with 867,088 more rows
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
## <chr> <chr> <chr> <chr> <list> <chr>
## 1 0 HELIOS_base 1 init <chr [1]> "0,114\tRecv HELIOS_base_1: (init~
## 2 0 HELIOS_base 1 version <chr [1]> "0,114\tRecv HELIOS_base_1: (init~
## 3 0 HELIOS_base 1 goalie <chr [0]> "0,114\tRecv HELIOS_base_1: (init~
## 4 0 HELIOS_base 1 synch_see <chr [0]> "0,115\tRecv HELIOS_base_1: (sync~
## 5 0 HELIOS_base 1 ear <chr [0]> "0,115\tRecv HELIOS_base_1: (sync~
## 6 0 HELIOS_base 1 off <chr [1]> "0,115\tRecv HELIOS_base_1: (sync~
```
### `read_rcg`
...
...
@@ -34,21 +33,69 @@ read_rcl("data/20220405162804-HELIOS_base_3-vs-enemy_2.rcl")
```
r
library
(
tidyverse
)
source
(
"R/read_rcg.R"
)
read_rcg
(
"data/20220405162804-HELIOS_base_3-vs-enemy_2.rcg"
)
## # A tibble: 143,418 x 21
## step side unum type state x y vx vy body neck vq
## <int> <chr> <int> <int> <int> <dbl> <dbl> <dbl> <dbl> <dbl> <int> <chr>
## 1 1 l 1 0 9 -49 0 0 0 54.7 0 h
## 2 1 l 2 17 1 -25 -5 0 0 -118. 0 h
## 3 1 l 3 8 1 -25 5 0 0 108. 0 h
## 4 1 l 4 13 1 -25 -10 0 0 -117. 0 h
## 5 1 l 5 6 1 -25 10 0 0 -174. 0 h
## 6 1 l 6 11 1 -25 0 0 0 114. 0 h
## 7 1 l 7 10 1 -15 -5 0 0 162. 0 h
## 8 1 l 8 5 1 -15 5 0 0 -170. 0 h
## 9 1 l 9 4 1 -15 -10 0 0 175. 0 h
## 10 1 l 10 16 1 -15 10 0 0 -122. 0 h
## # ... with 143,408 more rows, and 9 more variables: vw <int>, stamina <dbl>,
## # effort <dbl>, recovery <dbl>, capacity <dbl>, ball_x <dbl>, ball_y <dbl>,
## # ball_vx <dbl>, ball_vy <dbl>
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
## <int> <chr> <int> <int> <int> <dbl> <dbl> <dbl> <dbl> <dbl> <int> <chr> <int>
## 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 <dbl>, effort <dbl>, recovery <dbl>,
## # capacity <dbl>, ball_x <dbl>, ball_y <dbl>, ball_vx <dbl>, ball_vy <dbl>
```
## 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
)
image/plotly-visualization-sample.png
0 → 100644
View file @
49e8ea6f
114 KB
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment