diff --git a/R/aggregateFrequencies.R b/R/aggregateFrequencies.R new file mode 100644 index 0000000..a30d15b --- /dev/null +++ b/R/aggregateFrequencies.R @@ -0,0 +1,253 @@ +#' freqRequestDataBuilder +#' +#' @param groupingType +#' @param dateType +#' @param attribute +#' @param valuesFrom +#' @param maxAmountAttributes +#' @param miningRequestData +#' +#' @return +#' @export +#' +#' @examples +freqRequestDataBuilder <- function(groupingType, dateType, attribute, valuesFrom, maxAmountAttributes, valueSorting, sortingOrder, miningRequestData){ + requestData <- list( + metric = metricFreqBuilder(), + valuesFrom = list( + type = valuesFrom + ), + options = optionsBuilder(maxAmountAttributes, valueSorting, sortingOrder), + miningRequest = miningRequestData + ) + if (groupingType != "null") { + requestData[["grouping"]] <- groupingBuilder(groupingType, dateType, attribute) + } + return(requestData) +} + +#' aggregated frequencies API call +#' +#' @param lanaUrl +#' @param lanaToken +#' @param logId +#' @param dateType +#' @param attribute +#' @param valuesFrom +#' @param groupingType +#' @param maxAmountAttributes +#' @param traceFilterSequence +#' +#' @return +#' @export +#' +#' @examples +freqContentBuilder <- function(lanaUrl, lanaToken, logId, dateType, attribute, valuesFrom, + groupingType, maxAmountAttributes, valueSorting, sortingOrder, traceFilterSequence){ + + miningRequestData <- miningRequestBuilder(logId, traceFilterSequence) + requestData <- freqRequestDataBuilder(groupingType, dateType, attribute, valuesFrom, maxAmountAttributes, valueSorting, sortingOrder, miningRequestData) + content <- aggregateApiCall(lanaUrl, requestData, lanaToken) + return(content) +} + +#' aggregated frequencies without grouping +#' +#' @param lanaUrl +#' @param lanaToken +#' @param logId +#' @param dateType +#' @param valuesFrom +#' @param maxAmountAttributes +#' @param traceFilterSequence +#' +#' @return +#' @export +#' +#' @examples +getFreq <- function(lanaUrl = "cloud-backend.lanalabs.com", lanaToken, logId, dateType = "null", + valuesFrom = "allCases", maxAmountAttributes = 10, valueSorting = "CaseCount", + sortingOrder = "Descending", traceFilterSequence = list()){ + + groupingType <- "null" + freq <- freqContentBuilder(lanaUrl, lanaToken, logId, dateType, attribute = NULL, valuesFrom, groupingType, + maxAmountAttributes, valueSorting, sortingOrder, traceFilterSequence) + return(freq) + +} + +#' aggregated frequencies per year +#' +#' @param lanaUrl +#' @param lanaToken +#' @param logId +#' @param dateType +#' @param valuesFrom +#' @param maxAmountAttributes +#' @param traceFilterSequence +#' +#' @return +#' @export +#' +#' @examples +getFreqYear <- function(lanaUrl = "cloud-backend.lanalabs.com", lanaToken, logId, dateType = "startDate", + valuesFrom = "allCases", maxAmountAttributes = 10, valueSorting = "CaseCount", + sortingOrder = "Descending", traceFilterSequence = list()){ + + groupingType <- "byYear" + freqYear <- freqContentBuilder(lanaUrl, lanaToken, logId, dateType, attribute = NULL, valuesFrom, groupingType, + maxAmountAttributes, valueSorting, sortingOrder, traceFilterSequence) + return(freqYear) + +} + +#' aggregated frequencies per quarter +#' +#' @param lanaUrl +#' @param lanaToken +#' @param logId +#' @param dateType +#' @param valuesFrom +#' @param maxAmountAttributes +#' @param traceFilterSequence +#' +#' @return +#' @export +#' +#' @examples +getFreqQuarter <- function(lanaUrl = "cloud-backend.lanalabs.com", lanaToken, logId, dateType = "startDate", + valuesFrom = "allCases", maxAmountAttributes = 10, valueSorting = "CaseCount", + sortingOrder = "Descending", traceFilterSequence = list()){ + + groupingType <- "byQuarter" + freqQuarter <- freqContentBuilder(lanaUrl, lanaToken, logId, dateType, attribute = NULL, valuesFrom, groupingType, + maxAmountAttributes, valueSorting, sortingOrder, traceFilterSequence) + return(freqQuarter) + +} + +#' aggregated frequencies per month +#' +#' @param lanaUrl +#' @param lanaToken +#' @param logId +#' @param dateType +#' @param valuesFrom +#' @param maxAmountAttributes +#' @param traceFilterSequence +#' +#' @return +#' @export +#' +#' @examples +getFreqMonth <- function(lanaUrl = "cloud-backend.lanalabs.com", lanaToken, logId, dateType = "startDate", + valuesFrom = "allCases", maxAmountAttributes = 10, valueSorting = "CaseCount", + sortingOrder = "Descending", traceFilterSequence = list()){ + + groupingType <- "byMonth" + freqMonth <- freqContentBuilder(lanaUrl, lanaToken, logId, dateType, attribute = NULL, valuesFrom, groupingType, + maxAmountAttributes, valueSorting, sortingOrder, traceFilterSequence) + return(freqMonth) + +} + +#' aggregated frequencies per day of year +#' +#' @param lanaUrl +#' @param lanaToken +#' @param logId +#' @param dateType +#' @param valuesFrom +#' @param maxAmountAttributes +#' @param traceFilterSequence +#' +#' @return +#' @export +#' +#' @examples +getFreqDayofYear <- function(lanaUrl = "cloud-backend.lanalabs.com", lanaToken, logId, dateType = "startDate", + valuesFrom = "allCases", maxAmountAttributes = 10, valueSorting = "CaseCount", + sortingOrder = "Descending", traceFilterSequence = list()){ + + groupingType <- "byDayOfYear" + freqDayofYear <- freqContentBuilder(lanaUrl, lanaToken, logId, dateType, attribute = NULL, valuesFrom, groupingType, + maxAmountAttributes, valueSorting, sortingOrder, traceFilterSequence) + return(freqDayofYear) + +} + +#' aggregated frequencies per day of week +#' +#' @param lanaUrl +#' @param lanaToken +#' @param logId +#' @param dateType +#' @param valuesFrom +#' @param maxAmountAttributes +#' @param traceFilterSequence +#' +#' @return +#' @export +#' +#' @examples +getFreqDayofWeek <- function(lanaUrl = "cloud-backend.lanalabs.com", lanaToken, logId, dateType = "startDate", + valuesFrom = "allCases", maxAmountAttributes = 10, valueSorting = "CaseCount", + sortingOrder = "Descending", traceFilterSequence = list()){ + + groupingType <- "byDayOfWeek" + freqDayofWeek <- freqContentBuilder(lanaUrl, lanaToken, logId, dateType, attribute = NULL, valuesFrom, groupingType, + maxAmountAttributes, valueSorting, sortingOrder, traceFilterSequence) + return(freqDayofWeek) + +} + +#' aggregated frequencies per hour of day +#' +#' @param lanaUrl +#' @param lanaToken +#' @param logId +#' @param dateType +#' @param valuesFrom +#' @param maxAmountAttributes +#' @param traceFilterSequence +#' +#' @return +#' @export +#' +#' @examples +getFreqHourofDay <- function(lanaUrl = "cloud-backend.lanalabs.com", lanaToken, logId, dateType = "startDate", + valuesFrom = "allCases", maxAmountAttributes = 10, valueSorting = "CaseCount", + sortingOrder = "Descending", traceFilterSequence = list()){ + + groupingType <- "byHourOfDay" + freqHourofDay <- freqContentBuilder(lanaUrl, lanaToken, logId, dateType, attribute = NULL, valuesFrom, groupingType, + maxAmountAttributes, valueSorting, sortingOrder, traceFilterSequence) + return(freqHourofDay) + +} + +#' aggregated frequencies per attribute +#' +#' @param lanaUrl +#' @param lanaToken +#' @param logId +#' @param attribute +#' @param valuesFrom +#' @param maxAmountAttributes +#' @param traceFilterSequence +#' +#' @return +#' @export +#' +#' @examples +getFreqAttribute <- function(lanaUrl = "cloud-backend.lanalabs.com", lanaToken, logId, attribute, + valuesFrom = "allCases", maxAmountAttributes = 10, valueSorting = "CaseCount", + sortingOrder = "Descending", traceFilterSequence = list()){ + groupingType <- "byAttribute" + freqAttribute <- freqContentBuilder(lanaUrl, lanaToken, logId, dateType = NULL, attribute, valuesFrom, groupingType, + maxAmountAttributes, valueSorting, sortingOrder, traceFilterSequence) + + return(freqAttribute) +} + + diff --git a/R/aggregateNumeric.R b/R/aggregateNumeric.R new file mode 100644 index 0000000..9e2f1ae --- /dev/null +++ b/R/aggregateNumeric.R @@ -0,0 +1,124 @@ +#' numRequestDataBuilder +#' +#' @param groupingType +#' @param dateType +#' @param attribute +#' @param valuesFrom +#' @param maxAmountAttributes +#' @param miningRequestData +#' +#' @return +#' @export +#' +#' @examples +numRequestDataBuilder <- function(groupingType, dateType, attribute, agg, valuesFrom, maxAmountAttributes, valueSorting, sortingOrder, miningRequestData){ + requestData <- list( + metric = metricNumBuilder(attribute, agg), + valuesFrom = list( + type = valuesFrom + ), + options = optionsBuilder(maxAmountAttributes, valueSorting, sortingOrder), + miningRequest = miningRequestData + ) + if (groupingType != "null") { + requestData[["grouping"]] <- groupingBuilder(groupingType, dateType, attribute) + } + return(requestData) +} + +numContentBuilder <- function(lanaUrl, lanaToken, logId, dateType, attribute, agg, valuesFrom, + groupingType, maxAmountAttributes, valueSorting, sortingOrder, traceFilterSequence){ + + miningRequestData <- miningRequestBuilder(logId = logId, traceFilterSequence = traceFilterSequence) + requestData <- numRequestDataBuilder(groupingType, dateType, attribute, agg, valuesFrom, maxAmountAttributes, + valueSorting, sortingOrder, miningRequestData) + content <- aggregateApiCall(lanaUrl, requestData, lanaToken) + return(content) +} + +#' aggregated numeric attribute per year +#' +#' @param lanaUrl +#' @param lanaToken +#' @param logId +#' @param dateType +#' @param valuesFrom +#' @param maxAmountAttributes +#' @param traceFilterSequence +#' @param attribute +#' @param agg +#' @param valueSorting +#' @param sortingOrder +#' +#' @return +#' @export +#' +#' @examples +getNumericYear <- function(lanaUrl = "cloud-backend.lanalabs.com", lanaToken, logId, attribute, agg, + dateType = "startDate", valuesFrom = "allCases", maxAmountAttributes = 10, + valueSorting = "CaseCount", sortingOrder = "Descending", traceFilterSequence = list()){ + + groupingType <- "byYear" + freqNumericYear <- numContentBuilder(lanaUrl, lanaToken, logId, dateType, attribute, agg, valuesFrom, groupingType, + maxAmountAttributes, valueSorting, sortingOrder, traceFilterSequence) + return(freqNumericYear) + +} + +#' aggregated numeric attribute per quarter +#' +#' @param lanaUrl +#' @param lanaToken +#' @param logId +#' @param dateType +#' @param valuesFrom +#' @param maxAmountAttributes +#' @param traceFilterSequence +#' @param attribute +#' @param agg mean, median, sum, min, max +#' @param valueSorting +#' @param sortingOrder +#' +#' @return +#' @export +#' +#' @examples +getNumericQuarter <- function(lanaUrl = "cloud-backend.lanalabs.com", lanaToken, logId, attribute, agg, + dateType = "startDate", valuesFrom = "allCases", maxAmountAttributes = 10, + valueSorting = "CaseCount", sortingOrder = "Descending", traceFilterSequence = list()){ + + groupingType <- "byQuarter" + freqNumericQuarter <- numContentBuilder(lanaUrl, lanaToken, logId, dateType, attribute, agg, valuesFrom, groupingType, + maxAmountAttributes, valueSorting, sortingOrder, traceFilterSequence) + return(freqNumericQuarter) + +} + +#' aggregated numeric attribute per quarter +#' +#' @param lanaUrl +#' @param lanaToken +#' @param logId +#' @param dateType +#' @param valuesFrom +#' @param maxAmountAttributes +#' @param traceFilterSequence +#' @param attribute +#' @param agg mean, median, sum, min, max +#' @param valueSorting +#' @param sortingOrder +#' +#' @return +#' @export +#' +#' @examples +getNumericQuarter <- function(lanaUrl = "cloud-backend.lanalabs.com", lanaToken, logId, attribute, agg, + dateType = "startDate", valuesFrom = "allCases", maxAmountAttributes = 10, + valueSorting = "CaseCount", sortingOrder = "Descending", traceFilterSequence = list()){ + + groupingType <- "byQuarter" + freqNumericQuarter <- numContentBuilder(lanaUrl, lanaToken, logId, dateType, attribute, agg, valuesFrom, groupingType, + maxAmountAttributes, valueSorting, sortingOrder, traceFilterSequence) + return(freqNumericQuarter) + +} diff --git a/R/aggregateUtils.R b/R/aggregateUtils.R new file mode 100644 index 0000000..6c0e80b --- /dev/null +++ b/R/aggregateUtils.R @@ -0,0 +1,158 @@ +#' options builder +#' +#' @param maxAmountAttributes +#' @param valueSorting +#' @param sortingOrder +#' +#' @return +#' @export +#' +#' @examples +optionsBuilder <- function(maxAmountAttributes, valueSorting, sortingOrder){ + options = list( + maxAmountAttributes = maxAmountAttributes, + valueSorting = valueSorting, + sortingOrder = sortingOrder + ) + return(options) +} + +#' metric builder for numeric attributes +#' +#' @param attribute +#' @param agg +#' +#' @return +#' @export +#' +#' @examples +metricNumBuilder <- function(attribute, agg){ + metric = list( + aggregationFunction = agg, + attribute = attribute, + type = "attribute" + ) + return(metric) +} + +#' metric builder for frequencies +#' +#' @return +#' @export +#' +#' @examples +metricFreqBuilder <- function(){ + metric = list( + type = "frequency" + ) + return(metric) +} + + +#' grouping parameter for time grouping +#' +#' @param dateType +#' @param groupingType +#' +#' @return +#' @export +#' +#' @examples +groupingTime <- function(dateType, groupingType){ + grouping = list( + dateType = dateType, + timeZone = "Europe/Berlin", + type = groupingType + ) + return(grouping) +} + +#' grouping parameter for attribute grouping +#' +#' @param attribute +#' @param groupingType +#' +#' @return +#' @export +#' +#' @examples +groupingAttribute <- function(attribute, groupingType){ + grouping = list( + attribute = attribute, + type = groupingType + ) + return(grouping) +} + +#' grouping builder +#' +#' @param groupingType +#' @param dateType +#' @param attribute +#' +#' @return +#' @export +#' +#' @examples +groupingBuilder <- function(groupingType, dateType, attribute){ + listTime <- c("byYear", "byQuarter", "byMonth", "byDayOfYear", "byDayOfWeek", "byHourOfDay") + if (groupingType == "byAttribute") { + grouping = groupingAttribute(attribute, grouping)} else if (groupingType %in% listTime) { + grouping = groupingTime(dateType, groupingType) + } + return(grouping) +} + +#' mining request builder +#' +#' @param logId +#' @param traceFilterSequence +#' +#' @return +#' @export +#' +#' @examples +miningRequestBuilder <- function(logId, traceFilterSequence){ + miningRequestData <- list( + includeHeader = TRUE, + includeLogId = TRUE, + logId = logId, + edgeThreshold = 1, + traceFilterSequence = traceFilterSequence, + runConformance = FALSE + ) + return(miningRequestData) +} + +#' post aggregate api call to lana +#' +#' @param lanaUrl +#' @param requestData +#' @param lanaToken +#' +#' @return +#' @export +#' +#' @examples +aggregateApiCall <- function(lanaUrl, requestData, lanaToken){ + response <- httr::POST( + paste0("https://", lanaUrl, "/api/v2/aggregate-data"), + body = list(request = jsonlite::toJSON(requestData, auto_unbox = TRUE)), + encode = "multipart", + httr::add_headers( c( + Authorization = lanaToken + )) + ) + c <- httr::content(response) + groupingLabel <- c[["groupingAxisLabel"]] + groupingLabel <- stringr::str_replace_all(groupingLabel, " ", "_") + metricLabel <- c[["metricAxisLabel"]] + metricLabel <- stringr::str_replace_all(metricLabel, " ", "_") + content <- c$chartValues + content <- do.call(rbind.data.frame, content) + content$X.type <- NULL + names(content)[names(content) == "xAxis"] <- groupingLabel + names(content)[names(content) == "yAxis"] <- metricLabel + return(content) +} +