#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#
#' @title Gets a Players's Overall Batting Summary
#' @keywords Batting
#' @description This function scraps overall batting summary info from Statsguru and returns the data as a dataframe.
#' @param PlayerID ESPNCricinfo Player ID.
#' @param MatchType Type of Match Played (1 for Test; 2 for ODI; 3 for T20I ; 11 for All)
#' @return Returns dataframe containing overall Batting Summary of a Player
#' @export
#' @examples
#' sachin_BattingSummary_Overall = statsguRu::get_Summary_Batting_Overall(PlayerID = 35320, MatchType = 11)
#' print(sachin_BattingSummary_Overall)
get_Summary_Batting_Overall = function(PlayerID, MatchType){
url = paste("http://stats.espncricinfo.com/ci/engine/player/",PlayerID,".html?class=",MatchType,";template=results;type=batting",sep="");
data = htmltab::htmltab(url,which = 3,rm_nodata_rows = FALSE)
return(data)
# url = "https://stats.espncricinfo.com/ci/engine/player/35320.html?class=1;template=results;type=batting"
# library(rvest)
# battingSummaryPage <- xml2::read_html(url)
#
# battingSummaryPage %>%
# html_nodes("table") %>%
# .[[4]] %>%
# html_table() %>%
# as.data.frame()
}
#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#
#' @title Gets a Players's Batting Summary
#' @keywords Batting
#' @description This function scraps batting summary info from Statsguru and returns a dataframe
#' @param PlayerID ESPNCricinfo Player ID.
#' @param MatchType Type of Match Played (1 for Test; 2 for ODI; 3 for T20I ; 11 for All)
#' @return Returns dataframe containing complete Batting Summary of a Player
#' @export
#' @examples
#' sachin_BattingSummary = statsguRu::get_Summary_Batting(PlayerID = 35320, MatchType = 11)
#' print(sachin_BattingSummary)
get_Summary_Batting = function(PlayerID, MatchType){
url = paste("http://stats.espncricinfo.com/ci/engine/player/",PlayerID,".html?class=",MatchType,";template=results;type=batting",sep="");
data = htmltab::htmltab(url,which = 4,rm_nodata_rows = FALSE)
return(data)
}
#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#
#' @title Splits Batting Summary data into different categories
#' @keywords Batting
#' @description This function takes in "Batting Summary" dataframe and returns a list comprising data segregated into different categories that can inferred from a Players's Batting Summary.
#' @param data Output of statsguRu::get_Summary_Batting().
#' @param MatchType Type of Match Played (1 for Test; 2 for ODI; 3 for T20I ; 11 for All)
#' @return Returns a list comprising data segregated into different categories of Batting Summary statistics
#' @export
#' @examples
#' sachin_BattingSummary = statsguRu::get_Summary_Batting(PlayerID = 35320, MatchType = 2)
#' statsguRu::split_Summary_Batting(data = sachin_BattingSummary, MatchType = 2)
split_Summary_Batting = function(data, MatchType){
a=c();
for (i in 1:nrow(data)) {
if(is.na(data[i,1]))
{
a=append(a,i)
}
}
if(MatchType==1 || MatchType==2 || MatchType==3)
{
if(substring(data[1,1], 1,1)=='v')
{
oppCountry=data[1:a[1]-1,]
hostCountry=data[(a[1]+1):(a[2]-1),]
hostContinent = data[(a[2]+1):(a[3]-1),]
hostStatus = data[(a[3]+1):(a[4]-1),]
yearWise = data[(a[4]+1):(a[5]-1),]
#restdata = data[a[6]+1:nrow(data),]
posPlayed = data[(tail(a,1)+1):nrow(data),]
}
else
{
oppCountry=data[(a[1]+1):(a[2]-1),]
hostCountry=data[(a[2]+1):(a[3]-1),]
hostContinent = data[(a[3]+1):(a[4]-1),]
hostStatus = data[(a[4]+1):(a[5]-1),]
yearWise = data[(a[5]+1):(a[6]-1),]
#restdata = data[a[6]+1:nrow(data),]
posPlayed = data[(tail(a,1)+1):nrow(data),]
}
temp = list(
"oppCountry" = oppCountry,
"hostCountry" = hostCountry,
"hostContinent" = hostContinent,
"hostStatus" = hostStatus,
"yearWise" = yearWise,
"posPlayed" = posPlayed
)
return(temp)
}
else if(MatchType==11)
{
formats=data[1:a[1]-1,]
if(substring(data[a[1]+1,1], 1,1)=='v')
{
oppCountry=data[(a[1]+1):(a[2]-1),]
hostCountry = data[(a[2]+1):(a[3]-1),]
hostContinent = data[(a[3]+1):(a[4]-1),]
hostStatus = data[(a[4]+1):(a[5]-1),]
yearWise = data[(a[5]+2):a[6]-1,]
#restdata = data[a[6]+1:nrow(data),]
posPlayed = data[(tail(a,1)+1):nrow(data),]
}
else
{
oppCountry=data[(a[2]+1):(a[3]-1),]
hostCountry = data[(a[3]+1):(a[4]-1),]
hostContinent = data[(a[4]+1):(a[5]-1),]
hostStatus = data[(a[5]+1):(a[6]-1),]
yearWise = data[(a[6]+2):a[7]-1,]
#restdata = data[a[6]+1:nrow(data),]
posPlayed = data[(tail(a,1)+1):nrow(data),]
}
temp = list(
"formats" = formats,
"oppCountry" = oppCountry,
"hostCountry" = hostCountry,
"hostContinent" = hostContinent,
"hostStatus" = hostStatus,
"yearWise" = yearWise,
"posPlayed" = posPlayed
)
return(temp)
}
}
#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#
#' @title Displays Barplot of Players's Batting Average by List of Oppostion teams
#' @keywords Batting
#' @description This function takes in "Batting Summary" dataframe modified after splitBattingSummary and plots a player's batting average against every opposition team.
#' @param data Output of statsguRu::split_Summary_Batting()
#' @return Plots a player's batting average against every opposition team.
#' @export
#' @examples
#' sachin_BattingSummary = statsguRu::get_Summary_Batting(PlayerID = 35320, MatchType = 2)
#' sachin_BattingSummary = statsguRu::split_Summary_Batting(sachin_BattingSummary, MatchType = 2)
#' statsguRu::dispBattingAveByOpposition(data = sachin_BattingSummary)
dispBattingAveByOpposition = function(data, plot_title = "Batting Average vs Opp Country"){
team_colors = statsguRu::getTeamColors()
data = data$oppCountry
data$Ave = as.numeric(data$Ave)
data = na.omit(data)
data = data %>% arrange(desc(Ave))
data$Grouping = gsub(pattern = "v ",replacement = "",x = data$Grouping)
ggplot(data, aes(Ave, reorder(Grouping, Ave))) +
geom_col(aes(fill = Grouping), color = "black" ,size = 0.15) +
scale_fill_manual("Result", values = team_colors) +
scale_color_manual("col", values = sapply(team_colors, calc_ContrastColor))+
geom_text(aes(label = round(Ave,1), color = Grouping),fontface = "bold", hjust = 1.1,
size = 7) +
labs(title = plot_title) +
guides(fill = F, color = F) +
theme(rect = element_blank(), line = element_blank(),
axis.text.y = element_text(hjust = 1,size = 16, colour = "black",
margin = margin(0,0,0,40, unit = "pt")),
axis.title.x = element_blank(),
axis.title.y = element_blank(),
axis.text.x = element_blank(),
plot.margin = margin(r = 10,unit = "pt"),
plot.title = element_text(colour = "black", size = 20, face = "bold", hjust = 0))
#
# bp = barplot(as.numeric(data$Ave),names = as.vector(data$Grouping),las =2,cex.names = 0.9,col = rainbow(length(data$Ave)),main="Batting Average vs Opp Country")
# text(bp,0,as.integer(data$Ave),cex=1,pos=3)
}
#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#
#' @title Displays Barplot of Players's Batting Average by List of Host Country
#' @keywords Batting
#' @description This function takes in "Batting Summary" dataframe modified after splitBattingSummary and plots a player's batting average in every host opposition team.
#' @param data Output of splitBattingSummary.
#' @return Plots a player's batting average in Every host Country.
#' @export
#' @examples
#' sachin_BattingSummary = statsguRu::get_Summary_Batting(PlayerID = 35320, MatchType = 2)
#' sachin_BattingSummary = statsguRu::split_Summary_Batting(sachin_BattingSummary, MatchType = 2)
#' statsguRu::dispBattingAveByHostCountry(data = sachin_BattingSummary)
dispBattingAveByHostCountry = function(data, plot_title = "Batting Average in Host Country"){
data = data$hostCountry
data$Ave = as.numeric(data$Ave)
data = na.omit(data)
team_colors = statsguRu::getTeamColors()
data$Grouping = gsub(pattern = "in ",replacement = "",x = data$Grouping)
ggplot(data, aes(Ave, reorder(Grouping, Ave))) +
geom_col(aes(fill = Grouping), color = "black" ,size = 0.15) +
scale_fill_manual("Result", values = team_colors) +
scale_color_manual("col", values = sapply(team_colors, calc_ContrastColor))+
geom_text(aes(label = round(Ave,1), color = Grouping),fontface = "bold", hjust = 1.1,
size = 7) +
ggtitle(label = plot_title) +
guides(fill = F, color = F) +
theme(rect = element_blank(), line = element_blank(),
axis.text.y = element_text(hjust = 1,size = 16, colour = "black",
margin = margin(0,0,0,40, unit = "pt")),
axis.title.x = element_blank(),
axis.title.y = element_blank(),
axis.text.x = element_blank(),
plot.margin = margin(r = 10,unit = "pt"),
plot.title = element_text(colour = "black", size = 20, face = "bold", hjust = 0))
# bp = barplot(as.numeric(data$Ave),names = as.vector(data$Grouping),las =2,cex.names = 0.9,col = rainbow(length(data$Ave)),main=)
# text(bp,0,as.integer(data$Ave),cex=1,pos=3)
#abline(h=c$Ave,lwd=2, lty="dashed", col="red")
#text(0.5, as.integer(c$Ave)+2, "Average", col = "black")
}
#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#
#' @title Displays Barplot of Players's Batting Average by List of Continents Played by the Player
#' @keywords Batting
#' @description This function takes in "Batting Summary" dataframe modified after splitBattingSummary and plots a player's batting average in every contitent.
#' @param data Output of splitBattingSummary.
#' @return Plots a player's batting average in every contient.
#' @export
#' @examples
#' sachin_BattingSummary = statsguRu::get_Summary_Batting(PlayerID = 35320, MatchType = 2)
#' sachin_BattingSummary = statsguRu::split_Summary_Batting(sachin_BattingSummary, MatchType = 2)
#' statsguRu::dispBattingAveByContinent(data = sachin_BattingSummary)
dispBattingAveByContinent = function(data, plot_title = "Batting Average by Continent"){
data = data$hostContinent
data$Ave = as.numeric(data$Ave)
data = na.omit(data)
bp = barplot(as.numeric(data$Ave), names = as.vector(data$Grouping),
las = 2, cex.names = 0.9, col = rainbow(length(data$Ave)), main = plot_title)
text(bp,0,as.integer(data$Ave),cex=1,pos=3)
}
#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#
#' @title Displays Barplot of Players's Batting Average Year-wise
#' @keywords Batting
#' @description This function takes in "Batting Summary" dataframe modified after splitBattingSummary and plots a player's year-wise batting average.
#' @param data Output of splitBattingSummary.
#' @return Plots a player's year-wise batting average.
#' @export
#' @examples
#' sachin_BattingSummary = statsguRu::get_Summary_Batting(PlayerID = 35320, MatchType = 2)
#' sachin_BattingSummary = statsguRu::split_Summary_Batting(sachin_BattingSummary, MatchType = 2)
#' statsguRu::dispBattingAveByYears(data = sachin_BattingSummary)
dispBattingAveByYears = function(data, plot_title = "Year Wise Batting Average"){
data = data$yearWise
data$Ave = round(as.numeric(data$Ave),1)
data$Grouping <- as.integer(gsub('[a-zA-Z]', '', data$Grouping))
data$Span = NULL
data = na.omit(data)
plot(x = data$Grouping, y = data$Ave,
type = "b", col = "orange", lwd = 2, pch = 19,
ylim = c(min(data$Ave)-10,max(data$Ave)+10), xlab = "Year", ylab = "Batting Average", xaxt = 'n', main = plot_title)
axis(1,data$Grouping,data$Grouping)
text(data$Grouping, data$Ave, as.integer(data$Ave), cex = 1.2, pos = 3, col = "brown")
# if(length(data$Grouping) <= 10){
# x_axis_breaks = seq(min(data$Grouping),max(data$Grouping))
# } else {
# x_axis_breaks = seq(min(data$Grouping),max(data$Grouping), by = 2)
# }
#
# ggplot(data = data, aes(x=Grouping, y=Ave)) +
# geom_line(linetype = "dashed", size = 0.5)+
# geom_point(size = 4) +
# geom_label_repel(aes(label = Ave), position = position_dodge(1), size = 5,box.padding = 0)+
# scale_x_continuous(breaks = x_axis_breaks) +
# labs(x = "Year", y = "Batting Average")+
# theme(rect = element_blank(),
# axis.text.y = element_text(size = 14, colour = "black"),
# axis.text.x = element_text(size = 14, colour = "black"),
# axis.line.x = element_line(),
# axis.line.y = element_line(),
# axis.title.x = element_text(size = 20, colour = "black",margin = margin(t = 10, unit = "pt")),
# axis.title.y = element_text(size = 20, colour = "black",margin = margin(r = 10, unit = "pt")),
# plot.margin = margin(l = 10, b = 10,unit = "pt"),
# plot.title = element_text(colour = "black", size = 20, face = "bold", hjust = 0))
}
#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#
#' @title Displays Barplot of Players's Batting according to the Player's Batting Position
#' @keywords Batting
#' @description This function takes in "Batting Summary" dataframe modified after splitBattingSummary and plots a player's batting position-wise batting average.
#' @param data Output of splitBattingSummary.
#' @return Plots a player's batting position-wise batting average.
#' @export
#' @examples
#' sachin_BattingSummary = statsguRu::get_Summary_Batting(PlayerID = 35320, MatchType = 2)
#' sachin_BattingSummary = statsguRu::split_Summary_Batting(sachin_BattingSummary, MatchType = 2)
#' statsguRu::dispBattingAveByPosPlayed(data = sachin_BattingSummary)
dispBattingAveByPosPlayed = function(data, plot_title = "Batting Average by Position Played"){
data = data$posPlayed
data$Ave = as.numeric(data$Ave)
data = na.omit(data)
# bp = barplot(height = as.numeric(data$Ave),
# names = gsub(pattern = " position",replacement = "",x = as.vector(data$Grouping)),
# las = 1,
# cex.names = 1.9,
# col = rainbow(length(data$Ave)),
# main = plot_title , yaxt = "n")
# text(bp,1,as.integer(data$Ave),cex = 1.9,pos=3, col = as.vector(sapply(rainbow(length(data$Ave)), calc_ContrastColor)))
data$Grouping = gsub(pattern = "position",replacement = "",x = data$Grouping)
ggplot(data, aes(Ave, reorder(Grouping, -as.numeric(row.names(data))))) +
geom_col(fill = "#ebebeb", color = "black" ,size = 0.15) +
geom_text(aes(label = round(Ave,1)), color = "black",fontface = "bold", hjust = 1.1,
size = 7) +
ggtitle(label = plot_title) +
labs(x = "Batting Average", y = "Batting Position", title = plot_title)+
guides(fill = F, color = F) +
theme(rect = element_blank(), line = element_blank(),
axis.text.y = element_text(hjust = 1,size = 16, colour = "black",
margin = margin(0,0,0,40, unit = "pt")),
axis.title.x = element_text(size = 20, colour = "black",margin = margin(t = 10, unit = "pt")),
axis.title.y = element_text(size = 20, colour = "black",margin = margin(r = 0, unit = "pt")),
axis.text.x = element_blank(),
plot.margin = margin(r = 10,unit = "pt"),
plot.title = element_text(colour = "black", size = 20, face = "bold", hjust = 0))
}
#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#
#' @title Displays Scatterplot of a Players's Batting Average and Strike rate by List of Oppostion teams
#' @keywords Batting
#' @description This function takes in "Batting Summary" dataframe modified after splitBattingSummary and plots a player's batting average and Strike Rate against every opposition team.
#' @param data Output of splitBattingSummary.
#' @return Plots a scatterplot pitting player's batting average and strike-rate against every opposition team.
#' @export
#' @examples
#' sachin_BattingSummary = statsguRu::get_Summary_Batting(PlayerID = 35320, MatchType = 2)
#' sachin_BattingSummary = statsguRu::split_Summary_Batting(sachin_BattingSummary, MatchType = 2)
#' statsguRu::dispBattingAveSRByOpposition(data = sachin_BattingSummary)
dispBattingAveSRByOpposition = function(data, plot_title = "Average vs Strike Rate"){
data = data$oppCountry
if("SR" %in% colnames(data)) {
data$Ave = as.numeric(data$Ave)
data$SR = as.numeric(data$SR)
data = na.omit(data)
#with(plot(data$Ave~data$SR,data = data,xlim = c(min(data$SR)-10,max(data$SR)+10),
# ylim = c(min(data$Ave)-10,max(data$Ave)+10),pch = 19,xlab = "Strike-Rate",ylab = "Average",main = "Batting Average vs Strike-Rate"),
# text(data$SR,data$Ave, labels=data$Grouping, cex= 0.8,pos = 4))
team_colors = statsguRu::getTeamColors()
ggplot(data = data, aes(x = Ave, y = SR)) +
theme_bw() +
geom_text_repel(aes(label = Grouping), box.padding = unit(0.5, "lines")) +
geom_point(aes(fill = gsub(pattern = "v ",replacement = "",x = Grouping)),color="black", size = 5) +
scale_fill_manual("Result", values = team_colors) +
labs(x = "Batting Average", y = "Strike Rate", title = plot_title) +
guides(color = F, fill = F)+
geom_hline(yintercept=mean(data$SR),linetype="dashed", color = "blue") +
geom_vline(xintercept=mean(data$Ave),linetype="dashed", color = "orange") +
theme(axis.text = element_text(hjust = 1,size = 16, colour = "black"),
plot.background = element_rect(fill = "#ebebeb"),
panel.background = element_rect(fill = "#ebebeb"),
axis.title.x = element_text(size = 20, colour = "black",margin = margin(t = 10,b = 10,unit = "pt")),
axis.title.y = element_text(size = 20, colour = "black",margin = margin(r = 10,l=10, unit = "pt")),
plot.margin = margin(r = 10,unit = "pt"),
plot.title = element_text(colour = "black", size = 20, face = "bold", hjust = 0.5,
margin = margin(b = 5,t=10, unit = "pt")))
} else {
print("Strike Rate Data Not Availabe for this Player")
}
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.