From f916911a83748fd0d023ab5c57d2cf3b8f378499 Mon Sep 17 00:00:00 2001 From: caijun Date: Sat, 18 Nov 2017 16:44:18 +0800 Subject: [PATCH 1/3] store timestamp as POSIXct, not POSIXlt --- DESCRIPTION | 1 + NAMESPACE | 2 +- R/date_utils.R | 20 ++++++++-------- R/ts_anom_detection.R | 48 ++++++++++++++++++------------------- data/raw_data.rda | Bin 48090 -> 86526 bytes man/AnomalyDetectionTs.Rd | 9 +++---- man/AnomalyDetectionVec.Rd | 31 ++++++++++++------------ man/raw_data.Rd | 3 +-- 8 files changed, 57 insertions(+), 57 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index dee50fe..e5c2960 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -16,3 +16,4 @@ Suggests: testthat License: GPL-3 LazyData: true Packaged: 2014-12-08 07:54:07 UTC; owenvallis +RoxygenNote: 6.0.1 diff --git a/NAMESPACE b/NAMESPACE index b6fa8d9..18dfab3 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -1,4 +1,4 @@ -# Generated by roxygen2 (4.1.0): do not edit by hand +# Generated by roxygen2: do not edit by hand export(AnomalyDetectionTs) export(AnomalyDetectionVec) diff --git a/R/date_utils.R b/R/date_utils.R index f46ba58..7a89f40 100644 --- a/R/date_utils.R +++ b/R/date_utils.R @@ -1,31 +1,31 @@ format_timestamp <- function(indf, index = 1) { - if (class(indf[[index]])[1] == "POSIXlt") { + if (class(indf[[index]])[1] == "POSIXct") { return(indf) } if (stringr::str_detect(indf[[index]][1], "^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2} \\+\\d{4}$")) { - indf[[index]] <- strptime(indf[[index]], format="%Y-%m-%d %H:%M:%S", tz="UTC") + indf[[index]] <- as.POSIXct(strptime(indf[[index]], format = "%Y-%m-%d %H:%M:%S", tz = "UTC")) } else if (stringr::str_detect(indf[[index]][1], "^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}$")) { - indf[[index]] <- strptime(indf[[index]], format="%Y-%m-%d %H:%M:%S", tz="UTC") + indf[[index]] <- as.POSIXct(strptime(indf[[index]], format = "%Y-%m-%d %H:%M:%S", tz = "UTC")) } else if (stringr::str_detect(indf[[index]][1], "^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}$")) { - indf[[index]] <- strptime(indf[[index]], format="%Y-%m-%d %H:%M", tz="UTC") + indf[[index]] <- as.POSIXct(strptime(indf[[index]], format = "%Y-%m-%d %H:%M", tz = "UTC")) } else if (stringr::str_detect(indf[[index]][1], "^\\d{2}/\\d{2}/\\d{2}$")) { - indf[[index]] <- strptime(indf[[index]], format="%m/%d/%y", tz="UTC") + indf[[index]] <- as.POSIXct(strptime(indf[[index]], format = "%m/%d/%y", tz = "UTC")) } else if (stringr::str_detect(indf[[index]][1], "^\\d{2}/\\d{2}/\\d{4}$")) { - indf[[index]] <- strptime(indf[[index]], format="%m/%d/%Y", tz="UTC") + indf[[index]] <- as.POSIXct(strptime(indf[[index]], format = "%m/%d/%Y", tz = "UTC")) } else if (stringr::str_detect(indf[[index]][1], "^\\d{4}\\d{2}\\d{2}$")) { - indf[[index]] <- strptime(indf[[index]], format="%Y%m%d", tz="UTC") + indf[[index]] <- as.POSIXct(strptime(indf[[index]], format = "%Y%m%d", tz = "UTC")) } else if (stringr::str_detect(indf[[index]][1], "^\\d{4}/\\d{2}/\\d{2}/\\d{2}$")) { - indf[[index]] <- strptime(indf[[index]], format="%Y/%m/%d/%H", tz="UTC") + indf[[index]] <- as.POSIXct(strptime(indf[[index]], format = "%Y/%m/%d/%H", tz = "UTC")) } else if (stringr::str_detect(indf[[index]][1], "^\\d{10}$")) { # Handle Unix seconds in milliseconds - indf[[index]] <- as.POSIXlt(indf[[index]], origin="1970-01-01", tz="UTC") + indf[[index]] <- as.POSIXct(as.POSIXlt(indf[[index]], origin = "1970-01-01", tz = "UTC")) } return(indf) @@ -34,7 +34,7 @@ format_timestamp <- function(indf, index = 1) { get_gran = function(tsdf, index=1) { n = length(tsdf[[index]]) # We calculate the granularity from the time difference between the last 2 entries (sorted) - gran = round(difftime(max(tsdf[[index]]), sort(tsdf[[index]], partial = n-1)[n-1], + gran = round(difftime(max(tsdf[[index]]), sort(tsdf[[index]], partial = n - 1)[n - 1], units = "secs")) if (gran >= 86400) { diff --git a/R/ts_anom_detection.R b/R/ts_anom_detection.R index a7e3abe..704d22c 100644 --- a/R/ts_anom_detection.R +++ b/R/ts_anom_detection.R @@ -67,14 +67,14 @@ AnomalyDetectionTs <- function(x, max_anoms = 0.10, direction = 'pos', title = NULL, verbose=FALSE, na.rm = FALSE){ # Check for supported inputs types - if(!is.data.frame(x)){ + if (!is.data.frame(x)) { stop("data must be a single data frame.") } else { - if(ncol(x) != 2 || !is.numeric(x[[2]])){ + if (ncol(x) != 2 || !is.numeric(x[[2]])) { stop("data must be a 2 column data.frame, with the first column being a set of timestamps, and the second coloumn being numeric values.") } # Format timestamps if necessary - if (!(class(x[[1]])[1] == "POSIXlt")) { + if (!(class(x[[1]])[1] == "POSIXct")) { x <- format_timestamp(x) } } @@ -83,13 +83,13 @@ AnomalyDetectionTs <- function(x, max_anoms = 0.10, direction = 'pos', colnames(x) <- c("timestamp", "count") } - if(!is.logical(na.rm)){ + if (!is.logical(na.rm)) { stop("na.rm must be either TRUE (T) or FALSE (F)") } # Deal with NAs in timestamps - if(any(is.na(x$timestamp))){ - if(na.rm){ + if (any(is.na(x$timestamp))) { + if (na.rm) { x <- x[-which(is.na(x$timestamp)), ] } else { stop("timestamp contains NAs, please set na.rm to TRUE or remove the NAs manually.") @@ -97,53 +97,53 @@ AnomalyDetectionTs <- function(x, max_anoms = 0.10, direction = 'pos', } # Sanity check all input parameters - if(max_anoms > .49){ + if (max_anoms > .49) { stop(paste("max_anoms must be less than 50% of the data points (max_anoms =", round(max_anoms*length(x[[2]]), 0), " data_points =", length(x[[2]]),").")) - } else if(max_anoms < 0){ + } else if (max_anoms < 0) { stop("max_anoms must be positive.") - } else if(max_anoms == 0){ + } else if (max_anoms == 0) { warning("0 max_anoms results in max_outliers being 0.") } - if(!direction %in% c('pos', 'neg', 'both')){ + if (!direction %in% c('pos', 'neg', 'both')) { stop("direction options are: pos | neg | both.") } - if(!(0.01 <= alpha || alpha <= 0.1)){ - if(verbose) message("Warning: alpha is the statistical signifigance, and is usually between 0.01 and 0.1") + if (!(0.01 <= alpha || alpha <= 0.1)) { + if (verbose) message("Warning: alpha is the statistical signifigance, and is usually between 0.01 and 0.1") } - if(!is.null(only_last) && !only_last %in% c('day','hr')){ + if (!is.null(only_last) && !only_last %in% c('day','hr')) { stop("only_last must be either 'day' or 'hr'") } - if(!threshold %in% c('None','med_max','p95','p99')){ + if (!threshold %in% c('None','med_max','p95','p99')) { stop("threshold options are: None | med_max | p95 | p99.") } - if(!is.logical(e_value)){ + if (!is.logical(e_value)) { stop("e_value must be either TRUE (T) or FALSE (F)") } - if(!is.logical(longterm)){ + if (!is.logical(longterm)) { stop("longterm must be either TRUE (T) or FALSE (F)") } - if(piecewise_median_period_weeks < 2){ + if (piecewise_median_period_weeks < 2) { stop("piecewise_median_period_weeks must be at greater than 2 weeks") } - if(!is.logical(plot)){ + if (!is.logical(plot)) { stop("plot must be either TRUE (T) or FALSE (F)") } - if(!is.logical(y_log)){ + if (!is.logical(y_log)) { stop("y_log must be either TRUE (T) or FALSE (F)") } - if(!is.character(xlabel)){ + if (!is.character(xlabel)) { stop("xlabel must be a string") } - if(!is.character(ylabel)){ + if (!is.character(ylabel)) { stop("ylabel must be a string") } - if(!is.character(title) && !is.null(title)){ + if (!is.character(title) && !is.null(title)) { stop("title must be a string") } - if(is.null(title)){ + if (is.null(title)) { title <- "" } else { - title <- paste(title, " : ", sep="") + title <- paste(title, " : ", sep = "") } # -- Main analysis: Perform S-H-ESD diff --git a/data/raw_data.rda b/data/raw_data.rda index ea704e55b223437a44b125197f11cc8557ef18db..6d760ca1e28cc2dd1f30c0825bcd808773d3534f 100644 GIT binary patch literal 86526 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 {g~_+^c@%uVEK z!atG{sJ_YfHbrgrHvj%z4Z+%sXmeNNt+n~L?`jCvrc2wq8v5Sm-@dD%w>I0{)p#qO z{oT77dhx97T@Af>_P6h92;!Nl&0P(>c=osNYUstYHg`4j;@RK6tDzUqYVbC8HT2@y z-@dD%w>I0})zDj;t#&nR)N{V=R(8*VG$#wVxxH?*DQ!z^DH(#k=FUNxje66dZufhj zuQXdP{r5jt)!=x6xrrTXRrm>Tki>sit(J zpxkv}qL6ZDjLwd8gJ=KIu7*HolD2m>^wwsL(BK(b)3FjUXjK@GI5!47J?x46kop26ZK>uPfLCUiA`m6yMD`}@YI62wwqS1#5$sJlH+e>A#QdZN+SXtvHPE&On$%#o zHTX#lw5@R%O=_TRjrnL&18r-RqDc+3t-()fu-h7FQiI*rK$9Bmwgxw;(I8A}bVCm` zsj(k!YrsMPA3mGKO=|QKCN18r-dNey;egPqhs)lGg*fFsXsIHP}fFw5@?AHQ4H=DL1L{p)jd22tClG2D`0+CN4n{TiryH8tk?Pn$$qs8i1QT1Mh^-T-unVB{6Q2Rz?wROwv|Chk_@xHYRCd z_)G!+EXgjPp;iD~K5GYpL;*?PrxF`}yG2xpwQHT1p4@?F5@*YD>}SEB#Al)vWb`Tg z
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 literal 48090 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 WN-GH%>`=h}_`8xR!i0uBN!r+4x3`i2 diff --git a/man/AnomalyDetectionTs.Rd b/man/AnomalyDetectionTs.Rd index 8b3b000..e4516b9 100644 --- a/man/AnomalyDetectionTs.Rd +++ b/man/AnomalyDetectionTs.Rd @@ -1,4 +1,4 @@ -% Generated by roxygen2 (4.1.0): do not edit by hand +% Generated by roxygen2: do not edit by hand % Please edit documentation in R/ts_anom_detection.R \docType{data} \name{AnomalyDetectionTs} @@ -9,7 +9,7 @@ AnomalyDetectionTs(x, max_anoms = 0.1, direction = "pos", alpha = 0.05, only_last = NULL, threshold = "None", e_value = FALSE, longterm = FALSE, piecewise_median_period_weeks = 2, plot = FALSE, y_log = FALSE, xlabel = "", ylabel = "count", title = NULL, - verbose = FALSE) + verbose = FALSE, na.rm = FALSE) } \arguments{ \item{x}{Time series as a two column data frame where the first column consists of the @@ -49,7 +49,9 @@ large positive anomalies relative to the rest of the data.} \item{title}{Title for the output plot.} -\item{verbose}{Enable debug messages} +\item{verbose}{Enable debug messages.} + +\item{na.rm}{Remove any NAs in timestamps.(default: FALSE)} } \value{ The returned value is a list with the following components. @@ -94,4 +96,3 @@ Rosner, B., (May 1983), "Percentage Points for a Generalized ESD Many-Outlier Pr \code{\link{AnomalyDetectionVec}} } \keyword{datasets} - diff --git a/man/AnomalyDetectionVec.Rd b/man/AnomalyDetectionVec.Rd index 9aeb3f1..18841e0 100644 --- a/man/AnomalyDetectionVec.Rd +++ b/man/AnomalyDetectionVec.Rd @@ -1,4 +1,4 @@ -% Generated by roxygen2 (4.1.0): do not edit by hand +% Generated by roxygen2: do not edit by hand % Please edit documentation in R/vec_anom_detection.R \docType{data} \name{AnomalyDetectionVec} @@ -11,29 +11,29 @@ AnomalyDetectionVec(x, max_anoms = 0.1, direction = "pos", alpha = 0.05, ylabel = "count", title = NULL, verbose = FALSE) } \arguments{ -\item{x}{Time series as a column data frame, list, or vector, where the column consists of +\item{x}{Time series as a column data frame, list, or vector, where the column consists of the observations.} \item{max_anoms}{Maximum number of anomalies that S-H-ESD will detect as a percentage of the data.} -\item{direction}{Directionality of the anomalies to be detected. Options are: +\item{direction}{Directionality of the anomalies to be detected. Options are: \code{'pos' | 'neg' | 'both'}.} \item{alpha}{The level of statistical significance with which to accept or reject anomalies.} -\item{period}{Defines the number of observations in a single period, and used during seasonal +\item{period}{Defines the number of observations in a single period, and used during seasonal decomposition.} \item{only_last}{Find and report anomalies only within the last period in the time series.} -\item{threshold}{Only report positive going anoms above the threshold specified. Options are: +\item{threshold}{Only report positive going anoms above the threshold specified. Options are: \code{'None' | 'med_max' | 'p95' | 'p99'}.} \item{e_value}{Add an additional column to the anoms output containing the expected value.} -\item{longterm_period}{Defines the number of observations for which the trend can be considered -flat. The value should be an integer multiple of the number of observations in a single period. +\item{longterm_period}{Defines the number of observations for which the trend can be considered +flat. The value should be an integer multiple of the number of observations in a single period. This increases anom detection efficacy for time series that are greater than a month.} \item{plot}{A flag indicating if a plot with both the time series and the estimated anoms, @@ -58,33 +58,33 @@ The returned value is a list with the following components. \item{plot}{A graphical object if plotting was requested by the user. The plot contains the estimated anomalies annotated on the input time series.} -One can save \code{anoms} to a file in the following fashion: +One can save \code{anoms} to a file in the following fashion: \code{write.csv([["anoms"]], file=)} -One can save \code{plot} to a file in the following fashion: +One can save \code{plot} to a file in the following fashion: \code{ggsave(, plot=[["plot"]])} } \description{ -A technique for detecting anomalies in seasonal univariate time series where the input is a +A technique for detecting anomalies in seasonal univariate time series where the input is a series of observations. } \details{ \code{longterm_period} This option should be set when the input time series is longer than a month. The option enables the approach described in Vallis, Hochenbaum, and Kejariwal (2014).\cr\cr -\code{threshold} Filter all negative anomalies and those anomalies whose magnitude is smaller -than one of the specified thresholds which include: the median -of the daily max values (med_max), the 95th percentile of the daily max values (p95), and the +\code{threshold} Filter all negative anomalies and those anomalies whose magnitude is smaller +than one of the specified thresholds which include: the median +of the daily max values (med_max), the 95th percentile of the daily max values (p95), and the 99th percentile of the daily max values (p99). } \examples{ data(raw_data) AnomalyDetectionVec(raw_data[,2], max_anoms=0.02, period=1440, direction='both', plot=TRUE) # To detect only the anomalies in the last period, run the following: -AnomalyDetectionVec(raw_data[,2], max_anoms=0.02, period=1440, direction='both', +AnomalyDetectionVec(raw_data[,2], max_anoms=0.02, period=1440, direction='both', only_last=TRUE, plot=TRUE) } \references{ -Vallis, O., Hochenbaum, J. and Kejariwal, A., (2014) "A Novel Technique for +Vallis, O., Hochenbaum, J. and Kejariwal, A., (2014) "A Novel Technique for Long-Term Anomaly Detection in the Cloud", 6th USENIX, Philadelphia, PA. Rosner, B., (May 1983), "Percentage Points for a Generalized ESD Many-Outlier Procedure" @@ -94,4 +94,3 @@ Rosner, B., (May 1983), "Percentage Points for a Generalized ESD Many-Outlier Pr \code{\link{AnomalyDetectionTs}} } \keyword{datasets} - diff --git a/man/raw_data.Rd b/man/raw_data.Rd index 00e9fb9..6043d92 100644 --- a/man/raw_data.Rd +++ b/man/raw_data.Rd @@ -1,4 +1,4 @@ -% Generated by roxygen2 (4.1.0): do not edit by hand +% Generated by roxygen2: do not edit by hand % Please edit documentation in R/raw_data.R \docType{data} \name{raw_data} @@ -10,4 +10,3 @@ data(raw_data) \description{ A data frame containing a time series with headings timestamp and count. } - From a2c6dd7b5cc6649dac2e0e40272ebf422be03250 Mon Sep 17 00:00:00 2001 From: caijun Date: Sat, 18 Nov 2017 17:58:08 +0800 Subject: [PATCH 2/3] add tz for as.POSIXct and simplify code --- R/date_utils.R | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/R/date_utils.R b/R/date_utils.R index 7a89f40..bc4cd52 100644 --- a/R/date_utils.R +++ b/R/date_utils.R @@ -3,31 +3,32 @@ format_timestamp <- function(indf, index = 1) { return(indf) } if (stringr::str_detect(indf[[index]][1], "^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2} \\+\\d{4}$")) { - indf[[index]] <- as.POSIXct(strptime(indf[[index]], format = "%Y-%m-%d %H:%M:%S", tz = "UTC")) + indf[[index]] <- strptime(indf[[index]], format = "%Y-%m-%d %H:%M:%S", tz = "UTC") } else if (stringr::str_detect(indf[[index]][1], "^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}$")) { - indf[[index]] <- as.POSIXct(strptime(indf[[index]], format = "%Y-%m-%d %H:%M:%S", tz = "UTC")) + indf[[index]] <- strptime(indf[[index]], format = "%Y-%m-%d %H:%M:%S", tz = "UTC") } else if (stringr::str_detect(indf[[index]][1], "^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}$")) { - indf[[index]] <- as.POSIXct(strptime(indf[[index]], format = "%Y-%m-%d %H:%M", tz = "UTC")) + indf[[index]] <- strptime(indf[[index]], format = "%Y-%m-%d %H:%M", tz = "UTC") } else if (stringr::str_detect(indf[[index]][1], "^\\d{2}/\\d{2}/\\d{2}$")) { - indf[[index]] <- as.POSIXct(strptime(indf[[index]], format = "%m/%d/%y", tz = "UTC")) + indf[[index]] <- strptime(indf[[index]], format = "%m/%d/%y", tz = "UTC") } else if (stringr::str_detect(indf[[index]][1], "^\\d{2}/\\d{2}/\\d{4}$")) { - indf[[index]] <- as.POSIXct(strptime(indf[[index]], format = "%m/%d/%Y", tz = "UTC")) + indf[[index]] <- strptime(indf[[index]], format = "%m/%d/%Y", tz = "UTC") } else if (stringr::str_detect(indf[[index]][1], "^\\d{4}\\d{2}\\d{2}$")) { - indf[[index]] <- as.POSIXct(strptime(indf[[index]], format = "%Y%m%d", tz = "UTC")) + indf[[index]] <- strptime(indf[[index]], format = "%Y%m%d", tz = "UTC") } else if (stringr::str_detect(indf[[index]][1], "^\\d{4}/\\d{2}/\\d{2}/\\d{2}$")) { - indf[[index]] <- as.POSIXct(strptime(indf[[index]], format = "%Y/%m/%d/%H", tz = "UTC")) + indf[[index]] <- strptime(indf[[index]], format = "%Y/%m/%d/%H", tz = "UTC") } else if (stringr::str_detect(indf[[index]][1], "^\\d{10}$")) { # Handle Unix seconds in milliseconds - indf[[index]] <- as.POSIXct(as.POSIXlt(indf[[index]], origin = "1970-01-01", tz = "UTC")) + indf[[index]] <- as.POSIXlt(indf[[index]], origin = "1970-01-01", tz = "UTC") } + indf[[index]] <- as.POSIXct(indf[[index]], tz = "UTC") return(indf) } From 0aafa8275c870fc404e5ce59ff7a0db0605d4c98 Mon Sep 17 00:00:00 2001 From: caijun Date: Sat, 18 Nov 2017 21:51:04 +0800 Subject: [PATCH 3/3] return as.POSIXct instead of as.POSIXlt and format code --- R/ts_anom_detection.R | 166 +++++++++++++++++++++++------------------- 1 file changed, 92 insertions(+), 74 deletions(-) diff --git a/R/ts_anom_detection.R b/R/ts_anom_detection.R index 704d22c..9571523 100644 --- a/R/ts_anom_detection.R +++ b/R/ts_anom_detection.R @@ -152,9 +152,9 @@ AnomalyDetectionTs <- function(x, max_anoms = 0.10, direction = 'pos', # Although we derive this in S-H-ESD, we also need it to be minutley later on so we do it here first. gran <- get_gran(x, 1) - if(gran == "day"){ + if (gran == "day") { num_days_per_line <- 7 - if(is.character(only_last) && only_last == 'hr'){ + if (is.character(only_last) && only_last == 'hr') { only_last <- 'day' } } else { @@ -162,8 +162,9 @@ AnomalyDetectionTs <- function(x, max_anoms = 0.10, direction = 'pos', } # Aggregate data to minutely if secondly - if(gran == "sec"){ - x <- format_timestamp(aggregate(x[2], format(x[1], "%Y-%m-%d %H:%M:00"), eval(parse(text="sum")))) + if (gran == "sec") { + x <- format_timestamp(aggregate(x[2], format(x[1], "%Y-%m-%d %H:%M:00"), + eval(parse(text = "sum")))) } period = switch(gran, @@ -173,17 +174,17 @@ AnomalyDetectionTs <- function(x, max_anoms = 0.10, direction = 'pos', day = 7) num_obs <- length(x[[2]]) - if(max_anoms < 1/num_obs){ + if (max_anoms < 1/num_obs) { max_anoms <- 1/num_obs } # -- Setup for longterm time series # If longterm is enabled, break the data into subset data frames and store in all_data - if(longterm){ + if (longterm) { # Pre-allocate list with size equal to the number of piecewise_median_period_weeks chunks in x + any left over chunk # handle edge cases for daily and single column data period lengths - if(gran == "day"){ + if (gran == "day") { # STL needs 2*period + 1 observations num_obs_in_period <- period*piecewise_median_period_weeks + 1 num_days_in_period <- (7*piecewise_median_period_weeks) + 1 @@ -195,62 +196,62 @@ AnomalyDetectionTs <- function(x, max_anoms = 0.10, direction = 'pos', # Store last date in time series last_date <- x[[1]][num_obs] - all_data <- vector(mode="list", length=ceiling(length(x[[1]])/(num_obs_in_period))) + all_data <- vector(mode = "list", length = ceiling(length(x[[1]])/(num_obs_in_period))) # Subset x into piecewise_median_period_weeks chunks - for(j in seq(1,length(x[[1]]), by=num_obs_in_period)){ + for (j in seq(1, length(x[[1]]), by = num_obs_in_period)) { start_date <- x[[1]][j] end_date <- min(start_date + lubridate::days(num_days_in_period), x[[1]][length(x[[1]])]) # if there is at least 14 days left, subset it, otherwise subset last_date - 14days - if(difftime(end_date, start_date, units = "days") == as.difftime(num_days_in_period, units="days")){ + if (difftime(end_date, start_date, units = "days") == as.difftime(num_days_in_period, units = "days")) { all_data[[ceiling(j/(num_obs_in_period))]] <- subset(x, x[[1]] >= start_date & x[[1]] < end_date) - }else{ - all_data[[ceiling(j/(num_obs_in_period))]] <- subset(x, x[[1]] > (last_date-lubridate::days(num_days_in_period)) & x[[1]] <= last_date) + } else { + all_data[[ceiling(j/(num_obs_in_period))]] <- subset(x, x[[1]] > (last_date - lubridate::days(num_days_in_period)) & x[[1]] <= last_date) } } - }else{ + } else { # If longterm is not enabled, then just overwrite all_data list with x as the only item all_data <- list(x) } # Create empty data frames to store all anoms and seasonal+trend component from decomposition - all_anoms <- data.frame(timestamp=numeric(0), count=numeric(0)) - seasonal_plus_trend <- data.frame(timestamp=numeric(0), count=numeric(0)) + all_anoms <- data.frame(timestamp = numeric(0), count = numeric(0)) + seasonal_plus_trend <- data.frame(timestamp = numeric(0), count = numeric(0)) # Detect anomalies on all data (either entire data in one-pass, or in 2 week blocks if longterm=TRUE) - for(i in 1:length(all_data)) { + for (i in 1:length(all_data)) { anomaly_direction = switch(direction, - "pos" = data.frame(one_tail=TRUE, upper_tail=TRUE), # upper-tail only (positive going anomalies) - "neg" = data.frame(one_tail=TRUE, upper_tail=FALSE), # lower-tail only (negative going anomalies) - "both" = data.frame(one_tail=FALSE, upper_tail=TRUE)) # Both tails. Tail direction is not actually used. + "pos" = data.frame(one_tail = TRUE, upper_tail = TRUE), # upper-tail only (positive going anomalies) + "neg" = data.frame(one_tail = TRUE, upper_tail = FALSE), # lower-tail only (negative going anomalies) + "both" = data.frame(one_tail = FALSE, upper_tail = TRUE)) # Both tails. Tail direction is not actually used. # detect_anoms actually performs the anomaly detection and returns the results in a list containing the anomalies # as well as the decomposed components of the time series for further analysis. - s_h_esd_timestamps <- detect_anoms(all_data[[i]], k=max_anoms, alpha=alpha, num_obs_per_period=period, use_decomp=TRUE, use_esd=FALSE, - one_tail=anomaly_direction$one_tail, upper_tail=anomaly_direction$upper_tail, verbose=verbose) + s_h_esd_timestamps <- detect_anoms(all_data[[i]], k = max_anoms, alpha = alpha, num_obs_per_period = period, use_decomp = TRUE, use_esd = FALSE, + one_tail = anomaly_direction$one_tail, upper_tail = anomaly_direction$upper_tail, verbose = verbose) # store decomposed components in local variable and overwrite s_h_esd_timestamps to contain only the anom timestamps data_decomp <- s_h_esd_timestamps$stl s_h_esd_timestamps <- s_h_esd_timestamps$anoms # -- Step 3: Use detected anomaly timestamps to extract the actual anomalies (timestamp and value) from the data - if(!is.null(s_h_esd_timestamps)){ + if (!is.null(s_h_esd_timestamps)) { anoms <- subset(all_data[[i]], (all_data[[i]][[1]] %in% s_h_esd_timestamps)) } else { - anoms <- data.frame(timestamp=numeric(0), count=numeric(0)) + anoms <- data.frame(timestamp = numeric(0), count = numeric(0)) } # Filter the anomalies using one of the thresholding functions if applicable - if(threshold != "None"){ + if (threshold != "None") { # Calculate daily max values - periodic_maxs <- tapply(x[[2]],as.Date(x[[1]]),FUN=max) + periodic_maxs <- tapply(x[[2]], as.Date(x[[1]]), FUN = max) # Calculate the threshold set by the user - if(threshold == 'med_max'){ + if (threshold == 'med_max') { thresh <- median(periodic_maxs) - }else if (threshold == 'p95'){ + } else if (threshold == 'p95') { thresh <- quantile(periodic_maxs, .95) - }else if (threshold == 'p99'){ + } else if (threshold == 'p99') { thresh <- quantile(periodic_maxs, .99) } # Remove any anoms below the threshold @@ -265,20 +266,20 @@ AnomalyDetectionTs <- function(x, max_anoms = 0.10, direction = 'pos', seasonal_plus_trend <- seasonal_plus_trend[!duplicated(seasonal_plus_trend[[1]]), ] # -- If only_last was set by the user, create subset of the data that represent the most recent day - if(!is.null(only_last)){ - start_date <- x[[1]][num_obs]-lubridate::days(7) - start_anoms <- x[[1]][num_obs]-lubridate::days(1) - if(gran == "day"){ + if (!is.null(only_last)) { + start_date <- x[[1]][num_obs] - lubridate::days(7) + start_anoms <- x[[1]][num_obs] - lubridate::days(1) + if (gran == "day") { #TODO: This might be better set up top at the gran check breaks <- 3*12 num_days_per_line <- 7 } else { - if(only_last == 'day'){ + if (only_last == 'day') { breaks <- 12 - }else{ + } else { # We need to change start_date and start_anoms for the hourly only_last option - start_date <- lubridate::floor_date(x[[1]][num_obs]-lubridate::days(2), "day") - start_anoms <- x[[1]][num_obs]-lubridate::hours(1) + start_date <- lubridate::floor_date(x[[1]][num_obs] - lubridate::days(2), "day") + start_anoms <- x[[1]][num_obs] - lubridate::hours(1) breaks <- 3 } } @@ -295,70 +296,87 @@ AnomalyDetectionTs <- function(x, max_anoms = 0.10, direction = 'pos', anom_pct <- (length(all_anoms[[2]]) / num_obs) * 100 # If there are no anoms, then let's exit - if(anom_pct == 0){ - if(verbose) message("No anomalies detected.") - return (list("anoms"=data.frame(), "plot"=plot.new())) + if (anom_pct == 0) { + if (verbose) message("No anomalies detected.") + return(list("anoms" = data.frame(), "plot" = plot.new())) } - if(plot){ + if (plot) { # -- Build title for plots utilizing parameters set by user - plot_title <- paste(title, round(anom_pct, digits=2), "% Anomalies (alpha=", alpha, ", direction=", direction,")", sep="") - if(longterm){ - plot_title <- paste(plot_title, ", longterm=T", sep="") + plot_title <- paste(title, round(anom_pct, digits = 2), "% Anomalies (alpha=", alpha, ", direction=", direction,")", sep = "") + if (longterm) { + plot_title <- paste(plot_title, ", longterm=T", sep = "") } # -- Plot raw time series data - color_name <- paste("\"", title, "\"", sep="") + color_name <- paste("\"", title, "\"", sep = "") alpha <- 0.8 - if(!is.null(only_last)){ - xgraph <- ggplot2::ggplot(x_subset_week, ggplot2::aes_string(x="timestamp", y="count")) + ggplot2::theme_bw() + ggplot2::theme(panel.grid.major = ggplot2::element_blank(), panel.grid.minor = ggplot2::element_blank(), text=ggplot2::element_text(size = 14)) - xgraph <- xgraph + ggplot2::geom_line(data=x_subset_week, ggplot2::aes_string(colour=color_name), alpha=alpha*.33) + ggplot2::geom_line(data=x_subset_single_day, ggplot2::aes_string(color=color_name), alpha=alpha) - week_rng = get_range(x_subset_week, index=2, y_log=y_log) - day_rng = get_range(x_subset_single_day, index=2, y_log=y_log) - yrange = c(min(week_rng[1],day_rng[1]), max(week_rng[2],day_rng[2])) - xgraph <- add_day_labels_datetime(xgraph, breaks=breaks, start=as.POSIXlt(min(x_subset_week[[1]]), tz="UTC"), end=as.POSIXlt(max(x_subset_single_day[[1]]), tz="UTC"), days_per_line=num_days_per_line) - xgraph <- xgraph + ggplot2::labs(x=xlabel, y=ylabel, title=plot_title) - }else{ - xgraph <- ggplot2::ggplot(x, ggplot2::aes_string(x="timestamp", y="count")) + ggplot2::theme_bw() + ggplot2::theme(panel.grid.major = ggplot2::element_line(colour = "gray60"), panel.grid.major.y = ggplot2::element_blank(), panel.grid.minor = ggplot2::element_blank(), text=ggplot2::element_text(size = 14)) - xgraph <- xgraph + ggplot2::geom_line(data=x, ggplot2::aes_string(colour=color_name), alpha=alpha) - yrange <- get_range(x, index=2, y_log=y_log) - xgraph <- xgraph + ggplot2::scale_x_datetime(labels=function(x) ifelse(as.POSIXlt(x, tz="UTC")$hour != 0,strftime(x, format="%kh", tz="UTC"), strftime(x, format="%b %e", tz="UTC")), - expand=c(0,0)) - xgraph <- xgraph + ggplot2::labs(x=xlabel, y=ylabel, title=plot_title) + if (!is.null(only_last)) { + xgraph <- ggplot2::ggplot(x_subset_week, ggplot2::aes_string(x = "timestamp", y = "count")) + + ggplot2::theme_bw() + + ggplot2::theme(panel.grid.major = ggplot2::element_blank(), + panel.grid.minor = ggplot2::element_blank(), + text = ggplot2::element_text(size = 14)) + xgraph <- xgraph + + ggplot2::geom_line(data = x_subset_week, ggplot2::aes_string(colour = color_name), alpha = alpha*.33) + + ggplot2::geom_line(data = x_subset_single_day, ggplot2::aes_string(color = color_name), alpha = alpha) + week_rng <- get_range(x_subset_week, index = 2, y_log = y_log) + day_rng <- get_range(x_subset_single_day, index = 2, y_log = y_log) + yrange <- c(min(week_rng[1], day_rng[1]), max(week_rng[2], day_rng[2])) + xgraph <- add_day_labels_datetime(xgraph, breaks = breaks, start = as.POSIXlt(min(x_subset_week[[1]]), tz = "UTC"), end = as.POSIXlt(max(x_subset_single_day[[1]]), tz = "UTC"), days_per_line = num_days_per_line) + xgraph <- xgraph + + ggplot2::labs(x = xlabel, y = ylabel, title = plot_title) + } else { + xgraph <- ggplot2::ggplot(x, ggplot2::aes_string(x = "timestamp", y = "count")) + + ggplot2::theme_bw() + + ggplot2::theme(panel.grid.major = ggplot2::element_line(colour = "gray60"), + panel.grid.major.y = ggplot2::element_blank(), + panel.grid.minor = ggplot2::element_blank(), + text = ggplot2::element_text(size = 14)) + xgraph <- xgraph + + ggplot2::geom_line(data = x, ggplot2::aes_string(colour = color_name), alpha = alpha) + yrange <- get_range(x, index = 2, y_log = y_log) + xgraph <- xgraph + + ggplot2::scale_x_datetime(labels = function(x) ifelse(as.POSIXlt(x, tz = "UTC")$hour != 0, strftime(x, format = "%kh", tz = "UTC"), strftime(x, format = "%b %e", tz = "UTC")), + expand = c(0,0)) + xgraph <- xgraph + + ggplot2::labs(x = xlabel, y = ylabel, title = plot_title) } # Add anoms to the plot as circles. # We add zzz_ to the start of the name to ensure that the anoms are listed after the data sets. - xgraph <- xgraph + ggplot2::geom_point(data=all_anoms, ggplot2::aes_string(color=paste("\"zzz_",title,"\"",sep="")), size = 3, shape = 1) + xgraph <- xgraph + + ggplot2::geom_point(data = all_anoms, ggplot2::aes_string(color = paste("\"zzz_", title, "\"", sep = "")), size = 3, shape = 1) # Hide legend - xgraph <- xgraph + ggplot2::theme(legend.position="none") + xgraph <- xgraph + + ggplot2::theme(legend.position = "none") # Use log scaling if set by user - xgraph <- xgraph + add_formatted_y(yrange, y_log=y_log) - + xgraph <- xgraph + + add_formatted_y(yrange, y_log = y_log) } # Fix to make sure date-time is correct and that we retain hms at midnight - all_anoms[[1]] <- format(all_anoms[[1]], format="%Y-%m-%d %H:%M:%S") + all_anoms[[1]] <- format(all_anoms[[1]], format = "%Y-%m-%d %H:%M:%S") # Store expected values if set by user - if(e_value) { - anoms <- data.frame(timestamp=all_anoms[[1]], anoms=all_anoms[[2]], - expected_value=subset(seasonal_plus_trend[[2]], as.POSIXlt(seasonal_plus_trend[[1]], tz="UTC") %in% all_anoms[[1]]), - stringsAsFactors=FALSE) + if (e_value) { + anoms <- data.frame(timestamp = all_anoms[[1]], anoms = all_anoms[[2]], + expected_value = subset(seasonal_plus_trend[[2]], as.POSIXlt(seasonal_plus_trend[[1]], tz = "UTC") %in% all_anoms[[1]]), + stringsAsFactors = FALSE) } else { - anoms <- data.frame(timestamp=all_anoms[[1]], anoms=all_anoms[[2]], stringsAsFactors=FALSE) + anoms <- data.frame(timestamp = all_anoms[[1]], anoms = all_anoms[[2]], stringsAsFactors = FALSE) } - # Make sure we're still a valid POSIXlt datetime. + # Make sure we're still a valid POSIXct datetime. # TODO: Make sure we keep original datetime format and timezone. - anoms$timestamp <- as.POSIXlt(anoms$timestamp, tz="UTC") + anoms$timestamp <- as.POSIXct(anoms$timestamp, tz = "UTC") # Lastly, return anoms and optionally the plot if requested by the user - if(plot){ - return (list(anoms = anoms, plot = xgraph)) + if (plot) { + return(list(anoms = anoms, plot = xgraph)) } else { - return (list(anoms = anoms, plot = plot.new())) + return(list(anoms = anoms, plot = plot.new())) } }