library(ggplot2) # plot your data library(tidyr) # tidy your data library(lubridate) # time conversion library(plyr) # rename single columns of data frames # ggplot layout legend_theme <- theme(plot.title = element_text(size=20, hjust = 0.5, face="bold"), axis.title.x = element_text(size=14, face="bold"), axis.title.y = element_text(size=14, face="bold"), legend.title=element_text(size=14), legend.text=element_text(size=12)) # read data data <- read.csv("soccer.csv", header=FALSE) # fix column names colnames(data) <- c("timestamp","tag_id","x_pos","y_pos","heading","direction","energy","speed","total_distance") # convert date to date and seconds since game start data <- data %>% separate(timestamp, into = c("date", "time"), sep=" ") data$time <- as.numeric(hms(data$time)) data$time <- data$time-data$time[1] # get player 2 data player2 <- subset(data, tag_id == 2, select = c("time", "x_pos", "y_pos", "speed", "total_distance")) # compute total distance player2$dist2 <- c(0, cumsum(sqrt(diff(player2$x_pos)*diff(player2$x_pos)+diff(player2$y_pos)*diff(player2$y_pos)))) # adjust total distance from data file (substract offset) player2$total_distance2 <- player2$total_distance - player2$total_distance[1] # compute speed player2$cspeed2 <- c(0, diff(player2$dist2)/diff(player2$time)) # rename speed from data file player2 <- rename(player2, c("speed"="speed2")) # same as above for player 5 player5 <- subset(data, tag_id == 5, select = c("time", "x_pos", "y_pos", "speed", "total_distance")) player5$dist5 <- c(0, cumsum(sqrt(diff(player5$x_pos)*diff(player5$x_pos)+diff(player5$y_pos)*diff(player5$y_pos)))) player5$total_distance5 <- player5$total_distance - player5$total_distance[1] player5$cspeed5 <- c(0, diff(player5$dist5)/diff(player5$time)) player5 <- rename(player5, c("speed"="speed5")) # same as above for player 10 player10 <- subset(data, tag_id == 10, select = c("time", "x_pos", "y_pos", "speed", "total_distance")) player10$dist10 <- c(0, cumsum(sqrt(diff(player10$x_pos)*diff(player10$x_pos)+diff(player10$y_pos)*diff(player10$y_pos)))) player10$total_distance10 <- player10$total_distance - player10$total_distance[1] player10$cspeed10 <- c(0, diff(player10$dist10)/diff(player10$time)) player10 <- rename(player10, c("speed"="speed10")) # "gather" value colums for distance/speed player2 <- player2 %>% gather(type, dist, c("dist2","total_distance2")) %>% gather(stype, sspeed, c("cspeed2","speed2")) player5 <- player5 %>% gather(type, dist, c("dist5","total_distance5")) %>% gather(stype, sspeed, c("cspeed5","speed5")) player10 <- player10 %>% gather(type, dist, c("dist10","total_distance10")) %>% gather(stype, sspeed, c("cspeed10","speed10")) # combine values into one dataframe player2510 <- rbind(player2, player5, player10) # convert time from seconds to minutes and distance from meter to kilometer player2510$time = player2510$time/60 player2510$dist = player2510$dist/1000 # # convert time from seconds to minutes # player2$time = player2$time/60 # player5$time = player5$time/60 # player10$time = player10$time/60 # # # convert distance from meter to kilometer # player2$dist = player2$dist/1000 # player5$dist = player5$dist/1000 # player10$dist = player10$dist/1000 # plot total distance gg <- ggplot() gg <- gg + geom_line(data = player2510, aes(x=time, y=dist, color=type)) # single data frame # gg <- gg + geom_line(data = player2, aes(x=time, y=dist, color=type)) # three data frames (1) # gg <- gg + geom_line(data = player5, aes(x=time, y=dist, color=type)) # three data frames (2) # gg <- gg + geom_line(data = player10, aes(x=time, y=dist, color=type)) # three data frames (3) gg <- gg + labs(title = "Distance", x = "Time (min)", y = "Distance (km)") # rename labels gg <- gg + scale_color_manual("Distance", # rename legend values = c("dist2" = "yellow", "total_distance2" = "red", "dist5" = "blue", "total_distance5" = "black","dist10" = "green", "total_distance10" = "cyan"), # select colors labels = c("dist2" = "Dist 2", "total_distance2" = "Total 2", "dist5" = "Dist 5", "total_distance5" = "Total 5","dist10" = "Dist 10", "total_distance10" = "Total 10")) # rename legend entries gg <- gg + legend_theme; print(gg) # plot speed (similar to distance) gg <- ggplot() gg <- gg + geom_line(data = player2510, aes(x=time, y=sspeed, color=stype)) # gg <- gg + geom_line(data = player2, aes(x=time, y=sspeed, color=stype)) # gg <- gg + geom_line(data = player5, aes(x=time, y=sspeed, color=stype)) # gg <- gg + geom_line(data = player10, aes(x=time, y=sspeed, color=stype)) gg <- gg + labs(title = "Speed", x = "Time (min)", y = "Speed (m/s)") gg <- gg + scale_color_manual("Speed", values = c("cspeed2" = "yellow", "speed2" = "red", "cspeed5" = "blue", "speed5" = "black","cspeed10" = "green", "speed10" = "cyan")) gg <- gg + legend_theme; print(gg)