#' Gives cleanly parsed data
#'
#' Very tightly tied to how https://github.com/metrica-sports/sample-data is
#' organised right now since I don't know how tracking data is otherwise
#' organised. Home team always attacks from left to right, x 0 to x 1.
#'
#' @param cRootPath
#' @examples
#' @import data.table
#' @export
fParseTrackingDataBothTeams = function (
cRootPath,
cGameName,
bOutputLong,
nXSpan = 120,
nYSpan = 80,
xMaxBB = 1,
yMaxBB = 1,
nUpperLimitSpeed = 10
) {
dtTrackingData = merge(
fParseTrackingDataOneTeam(
paste0(
cRootPath, '/',
cGameName, '/',
cGameName,
'_RawTrackingData_Away_Team.csv'
),
cTag = 'A',
nXSpan = nXSpan,
nYSpan = nYSpan,
xMaxBB = 1,
yMaxBB = 1
),
fParseTrackingDataOneTeam(
paste0(
cRootPath, '/',
cGameName, '/',
cGameName,
'_RawTrackingData_Home_Team.csv'
),
cTag = 'H',
nXSpan = nXSpan,
nYSpan = nYSpan,
xMaxBB = 1,
yMaxBB = 1
),
c('Period','Frame','Time_s'),
all = T
)
dtTrackingData[, c('APlayer0X','APlayer0Y') := NULL]
setnames(
dtTrackingData,
c('HPlayer0X','HPlayer0Y'),
c('BPlayer0X','BPlayer0Y')
)
dtEventsData = fread(
paste0(
paste0(
cRootPath, '/',
cGameName, '/',
cGameName,
'_RawEventsData.csv'
)
)
)
dtEventsData[, Team := substr(Team, 1, 1)]
dtEventsData[, To := gsub(To, pattern = '.*Player', replacement = '')]
dtEventsData[, From := gsub(From, pattern = '.*Player', replacement = '')]
setnames(
dtEventsData,
c('Start Frame','Start Time [s]','End Frame','End Time [s]'),
c('StartFrame','StartTime_s','EndFrame','EndTime_s'),
)
setnames(
dtEventsData,
c('Start X','Start Y','End X','End Y'),
c('EventStartX','EventStartY','EventEndX','EventEndY'),
)
dtEventsData[, EventStartX := ( EventStartX * nXSpan / xMaxBB ) - ( 0.5 * nXSpan )]
dtEventsData[, EventEndX := ( EventEndX * nXSpan / xMaxBB ) - ( 0.5 * nXSpan )]
dtEventsData[, EventStartY := ( ( yMaxBB - EventStartY ) * nYSpan / xMaxBB) - ( 0.5 * nYSpan )]
dtEventsData[, EventEndY := ( ( yMaxBB - EventEndY ) * nYSpan / yMaxBB ) - ( 0.5 * nYSpan )]
# if ( bOutputLong ) {
if ( T ) {
dtTrackingData = fConvertTrackingDataWideToLong(
dtTrackingData
)
# dtEventsData = merge(
#
# )
} else if ( F ) {
dtTrackingData = merge(
dtEventsData,
dtTrackingData,
c('Period','Frame','Time_s'),
all = T
)
}
iFlipPeriod = dtTrackingData[
Frame %in% dtEventsData[
Subtype == 'KICK OFF',
list(Frame = min(StartFrame)),
Period
][,
Frame
]
][,
mean(X),
list(Period, Tag)
][
Tag == 'H' & V1 > 0,
Period
]
dtTrackingData[
Period %in% iFlipPeriod,
X := -X
]
dtTrackingData[
Period %in% iFlipPeriod,
Y := -Y
]
dtEventsData[
Period %in% iFlipPeriod,
EventStartX := -EventStartX
]
dtEventsData[
Period %in% iFlipPeriod,
EventStartY := -EventStartY
]
dtEventsData[
Period %in% iFlipPeriod,
EventEndX := -EventEndX
]
dtEventsData[
Period %in% iFlipPeriod,
EventEndY := -EventEndY
]
setorder(
dtTrackingData,
Frame,
Player
)
dtTrackingData[,
Velocity := c(
0,
(
(
( diff(X) ^ 2 ) +
( diff(Y) ^ 2 )
) ^ 0.5
) / diff(Time_s)
),
list(
Player
)
]
dtTrackingData[,
VelocityX := c(
0,
diff(X) / diff(Time_s)
),
list(
Player
)
]
dtTrackingData[,
VelocityY := c(
0,
diff(Y) / diff(Time_s)
),
list(
Player
)
]
dtTrackingData[
Velocity > nUpperLimitSpeed,
VelocityX := VelocityX * nUpperLimitSpeed / Velocity
]
dtTrackingData[
Velocity > nUpperLimitSpeed,
VelocityY := VelocityY * nUpperLimitSpeed / Velocity
]
dtTrackingData[
Velocity > nUpperLimitSpeed,
Velocity := nUpperLimitSpeed
]
lData = list(
dtTrackingData = dtTrackingData,
dtEventsData = dtEventsData
)
lData
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.