#---------------------------------------------------------------- #-------------------------General evolution---------------------- #---------------------------------------------------------------- #' Return graph representing the general attacks evolution by year #' #' @param Attacks data.frame with procesed source data #' @param point.vjust Vector of vertical just to each point label #' @param point.hjust Vector of Horizontal just to each point label #' @param iso2013.y Vertical position to ISO27001:2013 label #' @param iso2013.label.hjust Horizontal just to ISO27001:2013 label #' @param smooth.x Horizontal position to smooth slope label #' @param smooth.y Vertical position to smooth slope label #' @param smooth.label.hjust Horizontal just to smooth slope label #' #' @return list(graph, slope) #' @export GetAttacksEvolution <- function(Attacks, point.vjust = 0, point.hjust = 0, iso2013.y = 0, iso2013.label.hjust = 0, smooth.x = 0, smooth.y = 0, smooth.label.hjust = 0){ #Extracting year from date attacks.evol <- dplyr::mutate(Attacks, Year = format(Attacks$Date, "%Y")) %>% dplyr::group_by(Year)#Grouping by year #Counting attacks each year attacks.evol <- as.data.frame(table(attacks.evol$Year)) colnames(attacks.evol) <- c("Year","Attacks") #Slope of smooth attacks.evol.slope <- lm(formula = Attacks ~ as.numeric(Year), data = attacks.evol)$coef[[2]] #Graph attacks.evol.graph <- ggplot2::qplot(main = "Cyberattacks evolution", x = attacks.evol$Year, y = attacks.evol$Attacks, group = 1, xlab = "Years", ylab = "Attacks", data = attacks.evol, geom = "line") + ggplot2::geom_point() + ggplot2::geom_label(aes(label=attacks.evol$Attacks), vjust = point.vjust, hjust = point.hjust)+ ggplot2::theme(plot.title = element_text(hjust = 0.5)) + ggplot2::geom_smooth(method = "lm", se = FALSE) + ggplot2::geom_label(aes(x = smooth.x, y = smooth.y, label = paste("Slope =", signif(attacks.evol.slope))), color = "blue", hjust = smooth.label.hjust) + ggplot2::geom_vline(xintercept = 3, color = "Red", linetype = "longdash") + ggplot2::geom_label(aes(x = "2014", y = iso2013.y, label = "ISO27001:2013 effects"), color = "Red", hjust = iso2013.label.hjust) list(attacks.evol.graph, attacks.evol.slope) } #' Return graph representing the general ISO27001 evolution #' #' @param Cert_PerCountry data.frame with procesed source data #' @param point.vjust Vector of vertical just to each point label #' @param point.hjust Vector of Horizontal just to each point label #' @param iso2013.y Vertical position to ISO27001:2013 label #' @param iso2013.label.hjust Horizontal just to ISO27001:2013 label #' @param smooth.x Horizontal position to smooth slope label #' @param smooth.y Vertical position to smooth slope label #' @param smooth.label.hjust Horizontal just to smooth slope label #' #' @return list(graph, slope) #' @export GetCertsEvolution <- function(Cert_PerCountry, point.vjust = 0, point.hjust = 0, iso2013.y = 0, iso2013.label.hjust = 0, smooth.x = 0, smooth.y = 0, smooth.label.hjust = 0){ #Years from columns to rows in 1 column Certs.evol <- tidyr::gather(Cert_PerCountry, "Year", "Count", 2:6) #Group by year Certs.evol <- dplyr::group_by(Certs.evol, Year) #Sum counts to 1 row for each year Certs.evol <- dplyr::summarise(Certs.evol, Count = sum(Count)) #Removing X from years Certs.evol$Year <- substr(Certs.evol$Year, 2, 5) #Slope of smooth Certs.evol.slope <- lm(formula = Count ~ as.numeric(Year), data = Certs.evol)$coef[[2]] #Graph Certs.evol.graph <- ggplot2::qplot(main = "ISO 27001 evolution", x = Certs.evol$Year, y = Certs.evol$Count, group = 1, xlab = "Years", ylab = "Certifications", data = Certs.evol, geom = "line") + geom_point() + geom_label(aes(label=Certs.evol$Count), vjust = point.vjust, hjust = point.hjust)+ theme(plot.title = element_text(hjust = 0.5)) + ggplot2::geom_smooth(method = "lm", se = FALSE) + ggplot2::geom_label(aes(x = smooth.x, y = smooth.y, label = paste("Slope =", signif(Certs.evol.slope))), color = "blue", hjust = smooth.label.hjust)+ ggplot2::geom_vline(xintercept = 3, color = "Red", linetype = "longdash") + ggplot2::geom_label(aes(x = "2014", y = iso2013.y, label = "ISO27001:2013 changes"), color = "Red", hjust = iso2013.label.hjust) list(Certs.evol.graph, Certs.evol.slope) } #' Return graph representing the general attacks evolution by month #' #' @param Attacks data.frame with procesed source data #' #' @return graph #' @export GetAttacksMonthEvolution <- function(Attacks){ #Extract Year - Month from date attacks.evol <- mutate(Attacks, Year = format(Attacks$Date, "%Y-%m")) %>% group_by(Year) #Group by Year - Month attacks.evol <- as.data.frame(table(attacks.evol$Year)) colnames(attacks.evol) <- c("Year","Attacks") #Graph ggplot2::qplot(main = "Cyberattacks evolution", x = attacks.evol$Year, y = attacks.evol$Attacks, group = 1, xlab = "Months", ylab = "Attacks", data = attacks.evol, geom = "line") + geom_point() + theme(plot.title = element_text(hjust = 0.5)) + geom_smooth(method = 'loess') + scale_x_discrete(labels = c("2012/01", "", "", "", "", "", "2012/07", "", "", "", "", "", "2013/01", "", "", "", "", "", "2013/07", "", "", "", "", "", "2014/01", "", "", "", "", "", "2014/07", "", "", "", "", "", "2015/01", "", "", "", "", "", "2015/07", "", "", "", "", "", "2016/01", "", "", "", "", "", "2016/07", "", "", "", "", "")) } #---------------------------------------------------------------- #-------------------------Attack type evolution------------------ #---------------------------------------------------------------- #' Return pie graph to show % of each attack type #' #' @param Attacks data.frame with procesed source data #' @param label.vjust Vector of vertical just to each portion label #' @param label.hjust Vector of horizontal just to each portion label #' #' @return list(graph, AttackTypeShowedList) #' @export GetAttackTypePie <- function (Attacks, label.vjust = 0, label.hjust = 0){ #Group by attack type attack.pie <- group_by(Attacks, Attack.standar) #Counting rows for each attack type attack.pie <- as.data.frame(table(attack.pie$Attack.standar)) attack.pie <- setNames(attack.pie, c("Attack", "Count")) #Removing rows without attack type defined attack.pie <- attack.pie[attack.pie$Attack != "",] #Removing attacks with less than 1% of representation from total attack.pie <- attack.pie[attack.pie$Count > (sum(attack.pie$Count) * 0.01),] #Calc % of each attack type attack.pie <- mutate(attack.pie, Perc=paste(round(100 * attack.pie$Count / sum(attack.pie$Count), 2), "%")) #Graph graph1 <- ggplot(data=attack.pie, aes(x=factor(1), y=Count, fill=Attack)) + geom_col(width = 1, color='black') + geom_label(aes(label = attack.pie$Perc), vjust = label.vjust, hjust = label.hjust) + coord_polar(theta="y") + scale_x_discrete(labels = c("")) + scale_y_discrete(labels = c("")) + theme(plot.title = element_text(hjust = 0.5), axis.title.x=element_blank(), axis.title.y=element_blank()) + ggtitle("Attack types") #Returning graph and attack list list(graph1, unique(attack.pie$Attack)) } #' Return graph to show the evolution of a attack types list #' #' @param Attacks data.frame with procesed source data #' @param TypeList List with attack types to show #' #' @return list(graph, data.frame with TypeList attacks data by year) #' @export GetAttackTypeEvolution <- function(Attacks, TypeList){ #Obtaining year from date Attacks.pre <- dplyr::mutate(Attacks, Year = format(Attacks$Date, "%Y")) %>% group_by(Year, Attack.standar) #group by attack type #Count rows for each attack type and each year Attacks.pre <- as.data.frame(table(Attacks.pre$Year, Attacks.pre$Attack.standar)) Attacks.pre <- setNames(Attacks.pre, c("Year", "Attack", "Count")) #Removing rows without an attack type specified Attacks.pre <- Attacks.pre[Attacks.pre$Attack %in% TypeList,] #Graph graph1 <- ggplot(data = Attacks.pre, aes(x = Year, y = Count, color = Attack, group = Attack)) + geom_point() + geom_line() + theme(plot.title = element_text(hjust = 0.5)) + ggtitle("Attack type evolution") + labs(colour = "Attack type") + xlab("Years") + ylab("Attacks") #Return graph and used data to separate representation list(graph1, Attacks.pre) } #' Return graph to show the evolution of a single attack type and his smooth #' #' @param Attacks data.frame with procesed source data #' @param AttackType Attack type to represent #' @param smooth.x Horizontal position to smooth slope label #' @param smooth.y Vertical position to smooth slope label #' @param smooth.label.hjust Horizontal just to smooth slope label #' #' @return list(graph, slope) #' @export GetAttackTypeSigleEvolution <- function(Attacks, AttackType, smooth.x = 0, smooth.y = 0, smooth.label.hjust = 0){ #Filtering for the AttackType specified attacks.evol <- Attacks[Attacks$Attack == AttackType,] #Cal slope slope1 <- lm(formula = Count ~ as.numeric(Year), data = attacks.evol)$coef[[2]] #Graph graph1 <- ggplot(data = attacks.evol, aes(x = Year, y = Count, group = 1)) + geom_line() + geom_point() + theme(plot.title = element_text(hjust = 0.5)) + ggtitle(AttackType) + xlab("Years") + ylab("Attacks")+ geom_smooth(method = "lm", se = FALSE) + geom_label(aes(x = smooth.x, y = smooth.y, label = paste("Slope =", signif(slope1, 5))), color = "blue", hjust = smooth.label.hjust) #Returning list(graph, slope) list(graph1, slope1) } #---------------------------------------------------------------- #-------------------------Geolocal evolution--------- #---------------------------------------------------------------- GetContinentPie <- function (Attacks, Attacks.label.vjust = 0, Attacks.label.hjust = 0, Cert_PerCountry, Certs.label.vjust = 0, Certs.label.hjust = 0){ #Group attacks by continent attack.pie <- group_by(Attacks, Continent) #Count attacks for each continent attack.pie <- as.data.frame(table(attack.pie$Continent)) attack.pie <- setNames(attack.pie, c("Continent", "Count")) #Remove rows without Continent specified attack.pie <- attack.pie[attack.pie$Continent != "",] #Calc % of each continent attack.pie <- mutate(attack.pie, perc = round(100 * attack.pie$Count / sum(attack.pie$Count), 2)) #Attacks graph graph1 <- ggplot(data=attack.pie, aes(x=factor(1), y=Count, fill=Continent)) + geom_col(width = 1, color='black') + geom_label(aes(label=paste(attack.pie$perc, "%")), vjust = Attacks.label.vjust, hjust = Attacks.label.hjust) + coord_polar(theta="y") + scale_x_discrete(labels = c("")) + scale_y_discrete(labels = c("")) + theme(plot.title = element_text(hjust = 0.5), axis.title.x=element_blank(), axis.title.y=element_blank()) + ggtitle("Attacks") #Grouping certifications by continent cert.pie <- group_by(Cert_PerCountry, Continent) #Counting certificates for each continent cert.pie <- dplyr::summarise(cert.pie, Count = sum(X2011 + X2012 + X2013 + X2014 + X2015)) #Remove rows without Continent specified cert.pie <- cert.pie[cert.pie$Continent != "",] #Calc % of each continent cert.pie <- mutate(cert.pie, perc = round(100 * cert.pie$Count / sum(cert.pie$Count), 2)) #Certifications graph graph2 <- ggplot(data=cert.pie, aes(x=factor(1), y=Count, fill=Continent)) + geom_col(width = 1, color='black') + geom_label(aes(label=paste(cert.pie$perc, "%")), vjust = Certs.label.vjust, hjust = Certs.label.hjust) + coord_polar(theta="y") + scale_x_discrete(labels = c("")) + scale_y_discrete(labels = c("")) + theme(plot.title = element_text(hjust = 0.5), axis.title.x=element_blank(), axis.title.y=element_blank()) + ggtitle("ISO 27001") list(graph1, unique(attack.pie[attack.pie$perc > 5,]$Continent), graph2, unique(cert.pie[cert.pie$perc > 5,]$Continent)) } GetContinentAttacksEvolution <- function(Attacks){ attacks.evol <- mutate(Attacks, Year = format(Attacks$Date, "%Y")) %>% group_by(Continent, Year) attacks.evol <- as.data.frame(table(attacks.evol$Continent, attacks.evol$Year)) colnames(attacks.evol) <- c("Continent", "Year","Attacks") attacks.evol <- attacks.evol[attacks.evol$Continent != "Oceania",] attacks.evol <- attacks.evol[attacks.evol$Continent != "Africa",] graph1 <- ggplot2::qplot(main = "Cyberattacks evolution", x = attacks.evol$Year, y = attacks.evol$Attacks, group = Continent, xlab = "Years", ylab = "Attacks", data = attacks.evol, geom = "point", color = Continent) + geom_line() + theme(plot.title = element_text(hjust = 0.5)) graph1 } GetContinentCertsEvolution <- function(Cert_PerCountry){ certs.evol <- gather(Cert_PerCountry, "Year", "Certs", 2:6) %>% group_by(Continent, Year) certs.evol <- summarise(certs.evol, #Continent = Continent, #Year = Year, Certs = sum(Certs)) certs.evol$Year <- substr(certs.evol$Year,2,5) certs.evol <- certs.evol[certs.evol$Continent != "Oceania",] certs.evol <- certs.evol[certs.evol$Continent != "Africa",] graph1 <- ggplot2::qplot(main = "ISO 27001 evolution", x = certs.evol$Year, y = certs.evol$Certs, group = Continent, xlab = "Years", ylab = "Certifications", data = certs.evol, geom = "point", color = Continent) + geom_line() + theme(plot.title = element_text(hjust = 0.5)) graph1 } GetContinentAttacksTopEvolution <- function(Attacks){ attacks.evol <- mutate(Attacks, Year = format(Attacks$Date, "%Y")) %>% group_by(Year, Continent) attacks.evol <- as.data.frame(table(attacks.evol$Year, attacks.evol$Continent)) attacks.evol <- setNames(attacks.evol, c("Year", "Continent", "Count")) attacks.evol <- attacks.evol[attacks.evol$Continent != "",] attacks.evol <- spread(attacks.evol, "Continent", "Count") graph1 <- ggplot(data = attacks.evol, aes(x = Year, y = Americas, group = 1)) + geom_line() + geom_point() + theme(plot.title = element_text(hjust = 0.5)) + ggtitle("Americas") + xlab("Years") + ylab("Attacks")+ stat_smooth(method = "lm", se = FALSE, aes(outfit=fit<<-..y..)) graph2 <- ggplot(data = attacks.evol, aes(x = Year, y = Asia, group = 1)) + geom_line() + geom_point() + theme(plot.title = element_text(hjust = 0.5)) + ggtitle("Asia") + xlab("Years") + ylab("Attacks")+ stat_smooth(method = "lm", se = FALSE, aes(outfit=fit<<-..y..)) graph3 <- ggplot(data = attacks.evol, aes(x = Year, y = Europe, group = 1)) + geom_line() + geom_point() + theme(plot.title = element_text(hjust = 0.5)) + ggtitle("Europe") + xlab("Years") + ylab("Attacks")+ stat_smooth(method = "lm", se = FALSE, aes(outfit=fit<<-..y..)) list(graph1, graph2, graph3) } GetContinentCertsTopEvolution <- function(Attacks){ certs.evol <- gather(Cert_PerCountry, "Year", "Certs", 2:6) %>% group_by(Continent, Year) certs.evol <- summarise(certs.evol, #Continent = Continent, #Year = Year, Certs = sum(Certs)) certs.evol$Year <- substr(certs.evol$Year,2,5) certs.evol <- spread(certs.evol, "Continent", "Certs") graph1 <- ggplot(data = certs.evol, aes(x = Year, y = Americas, group = 1)) + geom_line() + geom_point() + theme(plot.title = element_text(hjust = 0.5)) + ggtitle("Americas") + xlab("Years") + ylab("Certifications")+ stat_smooth(method = "lm", se = FALSE, aes(outfit=fit<<-..y..)) graph2 <- ggplot(data = certs.evol, aes(x = Year, y = Asia, group = 1)) + geom_line() + geom_point() + theme(plot.title = element_text(hjust = 0.5)) + ggtitle("Asia") + xlab("Years") + ylab("Certifications")+ stat_smooth(method = "lm", se = FALSE, aes(outfit=fit<<-..y..)) graph3 <- ggplot(data = certs.evol, aes(x = Year, y = Europe, group = 1)) + geom_line() + geom_point() + theme(plot.title = element_text(hjust = 0.5)) + ggtitle("Europe") + xlab("Years") + ylab("Certifications")+ stat_smooth(method = "lm", se = FALSE, aes(outfit=fit<<-..y..)) list(graph1, graph2, graph3) } GetCountriesCol <- function(Attacks, Cert_PerCountry){ certs.evol <- gather(Cert_PerCountry, "Year", "Certs", 2:6) %>% group_by(Continent, country_short) certs.evol <- summarise(certs.evol, Certs = sum(Certs)) graph1 <- ggplot2::ggplot(aes(x = reorder(country_short, Certs), y = Certs), data = certs.evol[certs.evol$Certs > (sum(certs.evol$Certs) * 0.02),]) + geom_col(aes(fill = Continent)) + theme(plot.title = element_text(hjust = 0.5)) + ggtitle("ISO 27001") + xlab("Country") + ylab("Certifications") attacks.evol <- mutate(Attacks, Year = format(Attacks$Date, "%Y")) %>% group_by(Year, Continent, Country) attacks.evol <- as.data.frame(table(attacks.evol$Year, attacks.evol$Continent, attacks.evol$Country)) attacks.evol <- setNames(attacks.evol, c("Year", "Continent", "Country", "Count")) attacks.evol <- attacks.evol[attacks.evol$Continent != "",] attacks.evol <- attacks.evol[attacks.evol$Country != "",] attacks.evol <- attacks.evol[attacks.evol$Country != "AU",] attacks.evol <- attacks.evol[attacks.evol$Count > (sum((attacks.evol[attacks.evol$Country != "US",])$Count) * 0.01),] attacks.evol <- arrange(attacks.evol, Count) graph2 <- ggplot2::ggplot(aes(x = reorder(Country, Count), y = Count), data = attacks.evol) + geom_col(aes(fill = Continent)) + theme(plot.title = element_text(hjust = 0.5)) + ggtitle("Attacks") + xlab("Country") + ylab("Attacks") list(graph1, graph2) } GetCountriesAttacksTopEvolution <- function(Attacks){ attacks.evol <- mutate(Attacks, Year = format(Attacks$Date, "%Y")) %>% group_by(Year, Country) attacks.evol <- as.data.frame(table(attacks.evol$Year, attacks.evol$Country)) attacks.evol <- setNames(attacks.evol, c("Year", "Country", "Count")) attacks.evol <- attacks.evol[attacks.evol$Country != "",] attacks.evol <- spread(attacks.evol, "Country", "Count") slope1 <- lm(formula = US ~ as.numeric(Year), data = attacks.evol) graph1 <- ggplot(data = attacks.evol, aes(x = Year, y = US, group = 1)) + geom_line() + geom_point() + theme(plot.title = element_text(hjust = 0.5)) + ggtitle("US") + xlab("Years") + ylab("Attacks")+ stat_smooth(method = "lm", se = FALSE, aes(outfit=fit<<-..y..)) + geom_label(aes(x = "2014", y = 700, label = signif(slope1$coef[[2]])), color = "blue") graph2 <- ggplot(data = attacks.evol, aes(x = Year, y = GB, group = 1)) + geom_line() + geom_point() + theme(plot.title = element_text(hjust = 0.5)) + ggtitle("GB") + xlab("Years") + ylab("Attacks")+ stat_smooth(method = "lm", se = FALSE, aes(outfit=fit<<-..y..)) graph3 <- ggplot(data = attacks.evol, aes(x = Year, y = IN, group = 1)) + geom_line() + geom_point() + theme(plot.title = element_text(hjust = 0.5)) + ggtitle("IN") + xlab("Years") + ylab("Attacks")+ stat_smooth(method = "lm", se = FALSE, aes(outfit=fit<<-..y..)) graph4 <- ggplot(data = attacks.evol, aes(x = Year, y = JP, group = 1)) + geom_line() + geom_point() + theme(plot.title = element_text(hjust = 0.5)) + ggtitle("JP") + xlab("Years") + ylab("Attacks")+ stat_smooth(method = "lm", se = FALSE, aes(outfit=fit<<-..y..)) list(graph1, graph2, graph3, graph4) } GetCountriesCertsTopEvolution <- function(Attacks){ certs.evol <- gather(Cert_PerCountry, "Year", "Certs", 2:6) %>% group_by(country_short, Year) certs.evol <- rbind(certs.evol[certs.evol$country_short == "US",], certs.evol[certs.evol$country_short == "GB",], certs.evol[certs.evol$country_short == "IN",], certs.evol[certs.evol$country_short == "JP",]) certs.evol <- summarise(certs.evol, Certs = sum(Certs)) certs.evol$Year <- substr(certs.evol$Year,2,5) certs.evol <- spread(certs.evol, "country_short", "Certs") graph1 <- ggplot(data = certs.evol, aes(x = Year, y = US, group = 1)) + geom_line() + geom_point() + theme(plot.title = element_text(hjust = 0.5)) + ggtitle("US") + xlab("Years") + ylab("Certifications")+ stat_smooth(method = "lm", se = FALSE, aes(outfit=fit<<-..y..)) graph2 <- ggplot(data = certs.evol, aes(x = Year, y = GB, group = 1)) + geom_line() + geom_point() + theme(plot.title = element_text(hjust = 0.5)) + ggtitle("GB") + xlab("Years") + ylab("Certifications")+ stat_smooth(method = "lm", se = FALSE, aes(outfit=fit<<-..y..)) graph3 <- ggplot(data = certs.evol, aes(x = Year, y = IN, group = 1)) + geom_line() + geom_point() + theme(plot.title = element_text(hjust = 0.5)) + ggtitle("IN") + xlab("Years") + ylab("Certifications")+ stat_smooth(method = "lm", se = FALSE, aes(outfit=fit<<-..y..)) graph4 <- ggplot(data = certs.evol, aes(x = Year, y = JP, group = 1)) + geom_line() + geom_point() + theme(plot.title = element_text(hjust = 0.5)) + ggtitle("JP") + xlab("Years") + ylab("Certifications")+ stat_smooth(method = "lm", se = FALSE, aes(outfit=fit<<-..y..)) list(graph1, graph2, graph3, graph4) } #---------------------------------------------------------------- #-------------------------gelocal/type--------------------------- #---------------------------------------------------------------- GetContinentAttackPie <- function (Attacks){ attack.pie <- group_by(Attacks, Attack.standar, Country) attack.pie <- as.data.frame(table(attack.pie$Country, attack.pie$Attack.standar)) attack.pie <- setNames(attack.pie, c("Country", "Attack", "Count")) attack.pie <- attack.pie[attack.pie$Country != "",] attack.pie <- attack.pie[attack.pie$Attack != "",] attack.pie$Attack <- as.character(attack.pie$Attack) attack.pie[attack.pie$Attack != "DDoS" & attack.pie$Attack != "Defacement" & attack.pie$Attack != "Injection",]$Attack <- "Otros" attack.pie$Attack <- as.factor(attack.pie$Attack) attack.pie <- group_by(attack.pie, Attack, Country) attack.pie <- summarise(attack.pie, Count = sum(Count)) attack.pie.US <- attack.pie[attack.pie$Country == "US",] attack.pie.JP <- attack.pie[attack.pie$Country == "JP",] graph1 <- ggplot(data=attack.pie.US, aes(x=factor(1), y=Count, fill=Attack)) + geom_col(width = 1, color='black') + geom_label(aes(label=paste(round(100 * attack.pie.US$Count / sum(attack.pie.US$Count), 2), "%")), vjust=c(0), hjust=c(0)) + coord_polar(theta="y") + scale_x_discrete(labels = c("")) + scale_y_discrete(labels = c("")) + theme(plot.title = element_text(hjust = 0.5), axis.title.x=element_blank(), axis.title.y=element_blank()) + ggtitle("US") graph2 <- ggplot(data=attack.pie.JP, aes(x=factor(1), y=Count, fill=Attack)) + geom_col(width = 1, color='black') + geom_label(aes(label=paste(round(100 * attack.pie.JP$Count / sum(attack.pie.JP$Count), 2), "%")), vjust=c(0), hjust=c(0)) + coord_polar(theta="y") + scale_x_discrete(labels = c("")) + scale_y_discrete(labels = c("")) + theme(plot.title = element_text(hjust = 0.5), axis.title.x=element_blank(), axis.title.y=element_blank()) + ggtitle("JP") list(graph1, graph2) } GetContinentAttackEvolution <- function(Attacks){ attack.evol <-mutate(Attacks, Year = format(Attacks$Date, "%Y")) %>% group_by(Attack.standar, Country, Year) attack.evol <- as.data.frame(table(attack.evol$Country, attack.evol$Attack.standar, attack.evol$Year)) attack.evol <- setNames(attack.evol, c("Country", "Attack", "Year", "Count")) attack.evol <- attack.evol[attack.evol$Country != "",] attack.evol <- attack.evol[attack.evol$Attack != "",] attack.evol$Attack <- as.character(attack.evol$Attack) attack.evol[attack.evol$Attack != "DDoS" & attack.evol$Attack != "Defacement" & attack.evol$Attack != "Injection",]$Attack <- "Otros" attack.evol$Attack <- as.factor(attack.evol$Attack) attack.evol <- group_by(attack.evol, Attack, Country, Year) attack.evol <- summarise(attack.evol, Count = sum(Count)) attack.evol.US <- attack.evol[attack.evol$Country == "US",] attack.evol.JP <- attack.evol[attack.evol$Country == "JP",] attack.evol.US.Otros <- attack.evol.US[attack.evol.US$Attack == "Otros",] attack.evol.JP.Otros <- attack.evol.JP[attack.evol.JP$Attack == "Otros",] graph1 <- ggplot2::qplot(main = "US", x = attack.evol.US$Year, y = attack.evol.US$Count, group = Attack, xlab = "Years", ylab = "Certifications", data = attack.evol.US, geom = "point", color = Attack) + geom_line() + theme(plot.title = element_text(hjust = 0.5)) graph2 <- ggplot2::qplot(main = "JP", x = attack.evol.JP$Year, y = attack.evol.JP$Count, group = Attack, xlab = "Years", ylab = "Certifications", data = attack.evol.JP, geom = "point", color = Attack) + geom_line() + theme(plot.title = element_text(hjust = 0.5)) graph3 <- ggplot2::qplot(main = "US", x = attack.evol.US.Otros$Year, y = attack.evol.US.Otros$Count, group = 1, xlab = "Years", ylab = "Certifications", data = attack.evol.US.Otros, geom = "point") + geom_line() + stat_smooth(method = "lm", se = FALSE, aes(outfit=fit<<-..y..)) + theme(plot.title = element_text(hjust = 0.5)) graph4 <- ggplot2::qplot(main = "JP", x = attack.evol.JP.Otros$Year, y = attack.evol.JP.Otros$Count, group = 1, xlab = "Years", ylab = "Certifications", data = attack.evol.JP.Otros, geom = "point") + geom_line() + stat_smooth(method = "lm", se = FALSE, aes(outfit=fit<<-..y..)) + theme(plot.title = element_text(hjust = 0.5)) list(graph1, graph2, graph3, graph4) } #---------------------------------------------------------------- #---------------------------------------------------------------- #---------------------------------------------------------------- GetBaseCertsGraph <- function(Cert_PerCountry, year){ graph1 <- ggplot2::qplot(main = "Countries with above average number of companies certified with 27001 (2012)", x = reorder(country_short,X2012), y = X2012, xlab = "Country", ylab = "Number of certifications", data = Cert_PerCountry[Cert_PerCountry$X2012 > mean(Cert_PerCountry$X2012),], geom = "col", fill = Continent) graph1 } #' Return every graph used in the report file #' #' @param Cert_PerCountry data.frame with the processed data of ISO 27001 certifications #' @param Attacks data.frame with the processed data of cyberattacks #' #' @return data.frame #' @export GetReportGraphs <- function(Cert_PerCountry,Attacks) { #2012 graph1 <- ggplot2::qplot(main = "Countries with above average number of companies certified with 27001 (2012)", x = reorder(country_short,X2012), y = X2012, xlab = "Country", ylab = "Number of certifications", data = Cert_PerCountry[Cert_PerCountry$X2012 > mean(Cert_PerCountry$X2012),], geom = "col", fill = Continent) attacks2k12 <- Attacks[Attacks$Date < "2013-01-01" & Attacks$Date >= "2012-01-01",] frameAttacks2k12 <- as.data.frame(table(attacks2k12$Country)) colnames(frameAttacks2k12) <- c("Country","Attacks") graph2 <- ggplot2::qplot(main = "Countries with above average number of cyberattacks (2012)", x = reorder(Country,Attacks), y = Attacks, xlab = "Country", ylab = "Number of attacks", data = frameAttacks2k12[frameAttacks2k12$Attacks > mean(frameAttacks2k12$Attacks),], geom = "col", fill = Continent) Attacks2012ByMonth <- mutate(attacks2k12, month = format(attacks2k12$Date, "%m")) %>% group_by(month) Attack2012FreqByMonth <- as.data.frame(table(Attacks2012ByMonth$month)) colnames(Attack2012FreqByMonth) <- c("Month", "Attacks") graph3 <- ggplot2::qplot(x = as.numeric(Month), y = Attacks, main = "Global cyberattack progression by month (2012)", data = Attack2012FreqByMonth, geom = c("point", "smooth"), xlim = c(1,12), xlab = "Month") + ggplot2::scale_x_continuous(breaks = 1:12) #2013 graph4 <- ggplot2::qplot(main = "Countries with above average number of companies certified with 27001 (2013)", x = reorder(country_short,X2013), y = X2013, xlab = "Country", ylab = "Number of certifications", data = Cert_PerCountry[Cert_PerCountry$X2013 > mean(Cert_PerCountry$X2013),] , geom = "col", fill = Continent) attacks2k13 <- Attacks[Attacks$Date < "2014-01-01" & Attacks$Date >= "2013-01-01",] frameAttacks2k13 <- as.data.frame(table(attacks2k13$Country)) colnames(frameAttacks2k13) <- c("Country","Attacks") graph5 <- ggplot2::qplot(main = "Countries with above average number of cyberattacks (2013)", x = reorder(Country,Attacks), y = Attacks, xlab = "Country", ylab = "Number of attacks", data = frameAttacks2k13[frameAttacks2k13$Attacks > mean(frameAttacks2k13$Attacks),] , geom = "col", fill = Continent) Attacks2013ByMonth <- mutate(attacks2k13, month = format(attacks2k13$Date, "%m")) %>% group_by(month) Attack2013FreqByMonth <- as.data.frame(table(Attacks2013ByMonth$month)) colnames(Attack2013FreqByMonth) <- c("Month", "Attacks") graph6 <- ggplot2::qplot(x = as.numeric(Month), y = Attacks, main = "Global cyberattack progression by month (2013)", data = Attack2013FreqByMonth, geom = c("point", "smooth"), xlim = c(1,12), xlab = "Month") + ggplot2::scale_x_continuous(breaks = 1:12) #2014 graph7 <- ggplot2::qplot(main = "Countries with above average number of companies certified with 27001 (2014)", x = reorder(country_short,X2014), y = X2014, xlab = "Country", ylab = "Number of certifications", data = Cert_PerCountry[Cert_PerCountry$X2014 > mean(Cert_PerCountry$X2014),] , geom = "col", fill = Continent) attacks2k14 <- Attacks[Attacks$Date < "2015-01-01" & Attacks$Date >= "2014-01-01",] frameAttacks2k14 <- as.data.frame(table(attacks2k14$Country)) colnames(frameAttacks2k14) <- c("Country","Attacks") graph8 <- ggplot2::qplot(main = "Countries with above average number of cyberattacks (2014)", x = reorder(Country,Attacks), y = Attacks, xlab = "Country", ylab = "Number of attacks", data = frameAttacks2k14[frameAttacks2k14$Attacks > mean(frameAttacks2k14$Attacks),] , geom = "col", fill = Continent) Attacks2014ByMonth <- mutate(attacks2k14, month = format(attacks2k14$Date, "%m")) %>% group_by(month) Attack2014FreqByMonth <- as.data.frame(table(Attacks2014ByMonth$month)) colnames(Attack2014FreqByMonth) <- c("Month", "Attacks") graph9 <- ggplot2::qplot(x = as.numeric(Month), y = Attacks, main = "Global cyberattack progression by month (2014)", data = Attack2014FreqByMonth, geom = c("point", "smooth"), xlim = c(1,12), xlab = "Month") + ggplot2::scale_x_continuous(breaks = 1:12) #2015 graph10 <- ggplot2::qplot(main = "Countries with above average number of companies certified with 27001 (2015)", x = reorder(country_short,X2015), y = X2015, xlab = "Country", ylab = "Number of certifications", data = Cert_PerCountry[Cert_PerCountry$X2015 > mean(Cert_PerCountry$X2015),] , geom = "col", fill = Continent) attacks2k15 <- Attacks[Attacks$Date < "2016-01-01" & Attacks$Date >= "2015-01-01",] frameAttacks2k15 <- as.data.frame(table(attacks2k15$Country)) colnames(frameAttacks2k15) <- c("Country","Attacks") graph11 <- ggplot2::qplot(main = "Countries with above average number of cyberattacks (2015)", x = reorder(Country,Attacks), y = Attacks, xlab = "Country", ylab = "Number of attacks", data = frameAttacks2k15[frameAttacks2k15$Attacks > mean(frameAttacks2k15$Attacks),] , geom = "col", fill = Continent) Attacks2015ByMonth <- mutate(attacks2k15, month = format(attacks2k15$Date, "%m")) %>% group_by(month) Attack2015FreqByMonth <- as.data.frame(table(Attacks2015ByMonth$month)) colnames(Attack2015FreqByMonth) <- c("Month", "Attacks") graph12 <- ggplot2::qplot(x = as.numeric(Month), y = Attacks, main = "Global cyberattack progression by month (2015)", data = Attack2015FreqByMonth, geom = c("point", "smooth"), xlim = c(1,12), xlab = "Month") + ggplot2::scale_x_continuous(breaks = 1:12) list(graph1,graph2,graph3,graph4,graph5,graph6,graph7,graph8,graph9,graph10,graph11,graph12) }