From 86c4abe554bc43d350d0f881e5e7872eb184f277 Mon Sep 17 00:00:00 2001 From: omri374 Date: Sun, 1 Sep 2019 15:47:55 +0300 Subject: [PATCH 1/4] multi brush --- server.R | 47 +++++++++++++++++++++++++++++++++++------------ ui.R | 2 ++ 2 files changed, 37 insertions(+), 12 deletions(-) diff --git a/server.R b/server.R index 107056e..c3dcdf8 100644 --- a/server.R +++ b/server.R @@ -5,7 +5,6 @@ library(parsedate) # for cases when the provided date wasn't in a specific patte library(DT) library(ggplot2) - ## Extend the max file upload size options(shiny.maxRequestSize=150*1024^2) @@ -23,6 +22,23 @@ server <- function(input,output, session) { # Whether the first column holds a numeric value (TRUE), or a date value (FALSE) numericTimestamp <- reactiveVal(value = F,label = 'numericTimestamp') + selectedPoints <- reactiveVal(value = data.frame(),label='selectedPoints') + brushed <- reactive(brushedPoints(getTimeFilteredCategoryDataset(), input$user_brush)) + + observeEvent(input$add, { + selectedPoints(selectedPoints() %>% bind_rows(brushed())) + }) + + observeEvent(input$delete, { + if (dim(selectedPoints())[1] > 0) { + selectedPoints(selectedPoints()%>% anti_join(brushed())) + } + }) + + observeEvent(input$category,{ + brushed(NULL) + }) + ####---- Time-Series data handling ----#### ## Read CSV input file @@ -62,10 +78,11 @@ server <- function(input,output, session) { ## Get time-series dataset from file upload getDataset <- reactive({ - if(is.null(input$timeseriesfile)) return(NULL) + if(is.null(input$timeseriesfile)) return(NULL) dataset <- tryReadFile() + validate( need(nrow(dataset) > 0, "Input file is empty"), need(('date' %in% names(dataset)),"date column not found. Consider renaming your timestamp column to date"), @@ -303,6 +320,12 @@ server <- function(input,output, session) { panel.grid.minor = element_blank(), text = element_text(size = 14)) + + + if (dim(selectedPoints())[1] > 0) { + g <- g + geom_point(aes(date, value), data = selectedPoints(), color = "red") + } + g },message = "Rendering plot...") }) @@ -311,16 +334,16 @@ server <- function(input,output, session) { ## Capture the selected points on the graph - selectedPoints <- reactive({ - user_brush <- input$user_brush - pts <- brushedPoints(getTimeFilteredCategoryDataset(), user_brush, xvar = "date", yvar = "value") - if(is.null(pts)) return(NULL) - if(hasCategories()){ - pts %>% select(date, category, value) - } else { - pts %>% select(date, value) - } - }) + #selectedPoints <- reactive({ + # user_brush <- input$user_brush + # pts <- brushedPoints(getTimeFilteredCategoryDataset(), user_brush, xvar = "date", yvar = "value") + # if(is.null(pts)) return(NULL) + # if(hasCategories()){ + # pts %>% select(date, category, value) + # } else { + # pts %>% select(date, value) + # } + #}) ## Plot showing all categories output$allplot <- renderPlot({ diff --git a/ui.R b/ui.R index 5d555c9..60b610e 100644 --- a/ui.R +++ b/ui.R @@ -63,6 +63,8 @@ body <- dashboardBody( h2('Time Series for labeling:'), h5("Graph might take a few moments to load"), plotOutput("plot", brush = "user_brush"), + actionButton("add", "Add selected points"), + actionButton("delete", "Remove selected points"), h2('Selected points:'), dataTableOutput("summaryTable"), h2('Inspect raw data:'), From e9948475262c8ee9a74c386bd634f640b9a336b9 Mon Sep 17 00:00:00 2001 From: omri374 Date: Mon, 2 Sep 2019 10:13:49 +0300 Subject: [PATCH 2/4] multi brush --- multi_brush.R | 73 +++++++++++++++++++++++++++++++++++++++++++++++++++ server.R | 29 ++++++-------------- 2 files changed, 81 insertions(+), 21 deletions(-) create mode 100644 multi_brush.R diff --git a/multi_brush.R b/multi_brush.R new file mode 100644 index 0000000..2c1d909 --- /dev/null +++ b/multi_brush.R @@ -0,0 +1,73 @@ +library(ggplot2) +library(dplyr) +library(shiny) +#library(Cairo) # For nicer ggplot2 output when deployed on Linux +#library(data.table) + +cols <- c("mpg", "cyl", "disp", "hp", "wt", "am", "gear") +mtcars2 <- mtcars %>% select(cols) + +ui <- fluidPage( + fluidRow( + column(width = 10, + plotOutput("plot1", height = 300, + brush = "user_brush") + + + ), + column(width = 2, + br(), + actionButton("add", "Add Points"), + br(), + br(), + actionButton("delete", "Delete Points") + ) + ), + fluidRow( + column(width = 6, + h4("Brushed points"), + dataTableOutput("summaryTable") + ) + ) +) + + +server <- function(input, output) { + + dataset <- reactive({ + mtcars2 + }) + + selectedPoints <- reactive(value = data.frame(),label='selectedPoints') + brushed <- reactive(brushedPoints(dataset(), input$user_brush)) + #brushed <- reactiveVal(value = brushedPoints(dataset(),input$user_brush),label='brushed') + ### Using `observeEvent` to Add or Delete Points ------- + #points <- data.frame() + #makeReactiveBinding("points") + + observeEvent(input$add, { + selectedPoints(selectedPoints() %>% bind_rows(brushed())) + }) + + observeEvent(input$delete, { + if (dim(selectedPoints())[1] > 0) { + selectedPoints(selectedPoints()%>% anti_join(brushed())) + } + }) + ### ---------------------------------------------------- + + output$plot1 <- renderPlot({ + p2 <- ggplot(dataset(), aes(wt, mpg)) + geom_point() + if (dim(selectedPoints())[1] > 0) { + p2 <- p2 + geom_point(aes(wt, mpg), data = selectedPoints(), color = "red") + } + return(p2) + }) + + output$summaryTable <- DT::renderDataTable(expr = selectedPoints(), selection = 'single',server = F) + + +} + +shinyApp(ui, server) + diff --git a/server.R b/server.R index c3dcdf8..68bbc0d 100644 --- a/server.R +++ b/server.R @@ -23,7 +23,9 @@ server <- function(input,output, session) { numericTimestamp <- reactiveVal(value = F,label = 'numericTimestamp') selectedPoints <- reactiveVal(value = data.frame(),label='selectedPoints') - brushed <- reactive(brushedPoints(getTimeFilteredCategoryDataset(), input$user_brush)) + brushed <- reactive({ + brushedPoints(getTimeFilteredCategoryDataset(), input$user_brush) + }) observeEvent(input$add, { selectedPoints(selectedPoints() %>% bind_rows(brushed())) @@ -35,10 +37,6 @@ server <- function(input,output, session) { } }) - observeEvent(input$category,{ - brushed(NULL) - }) - ####---- Time-Series data handling ----#### ## Read CSV input file @@ -175,6 +173,9 @@ server <- function(input,output, session) { if(is.null(dataset)) return(NULL) if(is.null(input$slider)) return(NULL) + + session$resetBrush("input$user_brush") + selectedPoints(data.frame()) dataset %>% filter(date >= input$slider[1], date <= input$slider[2]) }) @@ -293,6 +294,7 @@ server <- function(input,output, session) { ## Select input for categories, based on the categories found in the time series dataset output$category <- renderUI({ + if(hasCategories()==TRUE){ req(input$timeseriesfile) dataset <- getTimeSeriesDataset() @@ -329,22 +331,7 @@ server <- function(input,output, session) { g },message = "Rendering plot...") }) - - - - - ## Capture the selected points on the graph - #selectedPoints <- reactive({ - # user_brush <- input$user_brush - # pts <- brushedPoints(getTimeFilteredCategoryDataset(), user_brush, xvar = "date", yvar = "value") - # if(is.null(pts)) return(NULL) - # if(hasCategories()){ - # pts %>% select(date, category, value) - # } else { - # pts %>% select(date, value) - # } - #}) - + ## Plot showing all categories output$allplot <- renderPlot({ From 41701d080cbbb6a85a1aafeb3f02a0070fbe8d8f Mon Sep 17 00:00:00 2001 From: omri374 Date: Mon, 2 Sep 2019 10:15:16 +0300 Subject: [PATCH 3/4] removed unnecessary file --- multi_brush.R | 73 --------------------------------------------------- 1 file changed, 73 deletions(-) delete mode 100644 multi_brush.R diff --git a/multi_brush.R b/multi_brush.R deleted file mode 100644 index 2c1d909..0000000 --- a/multi_brush.R +++ /dev/null @@ -1,73 +0,0 @@ -library(ggplot2) -library(dplyr) -library(shiny) -#library(Cairo) # For nicer ggplot2 output when deployed on Linux -#library(data.table) - -cols <- c("mpg", "cyl", "disp", "hp", "wt", "am", "gear") -mtcars2 <- mtcars %>% select(cols) - -ui <- fluidPage( - fluidRow( - column(width = 10, - plotOutput("plot1", height = 300, - brush = "user_brush") - - - ), - column(width = 2, - br(), - actionButton("add", "Add Points"), - br(), - br(), - actionButton("delete", "Delete Points") - ) - ), - fluidRow( - column(width = 6, - h4("Brushed points"), - dataTableOutput("summaryTable") - ) - ) -) - - -server <- function(input, output) { - - dataset <- reactive({ - mtcars2 - }) - - selectedPoints <- reactive(value = data.frame(),label='selectedPoints') - brushed <- reactive(brushedPoints(dataset(), input$user_brush)) - #brushed <- reactiveVal(value = brushedPoints(dataset(),input$user_brush),label='brushed') - ### Using `observeEvent` to Add or Delete Points ------- - #points <- data.frame() - #makeReactiveBinding("points") - - observeEvent(input$add, { - selectedPoints(selectedPoints() %>% bind_rows(brushed())) - }) - - observeEvent(input$delete, { - if (dim(selectedPoints())[1] > 0) { - selectedPoints(selectedPoints()%>% anti_join(brushed())) - } - }) - ### ---------------------------------------------------- - - output$plot1 <- renderPlot({ - p2 <- ggplot(dataset(), aes(wt, mpg)) + geom_point() - if (dim(selectedPoints())[1] > 0) { - p2 <- p2 + geom_point(aes(wt, mpg), data = selectedPoints(), color = "red") - } - return(p2) - }) - - output$summaryTable <- DT::renderDataTable(expr = selectedPoints(), selection = 'single',server = F) - - -} - -shinyApp(ui, server) - From 1515e42f618d2c73bff116f6cabe63ef799e54c6 Mon Sep 17 00:00:00 2001 From: omri374 Date: Mon, 2 Sep 2019 14:58:22 +0300 Subject: [PATCH 4/4] updates to readme, help and assets --- README.md | 33 +++++++++++--------- assets/selected.png | Bin 67604 -> 32917 bytes server.R | 72 +++++++++++++++++++++++++++----------------- ui.R | 11 ++++--- 4 files changed, 70 insertions(+), 46 deletions(-) diff --git a/README.md b/README.md index af68e0d..8de8d2b 100644 --- a/README.md +++ b/README.md @@ -74,29 +74,34 @@ Which would result in the shiny server app running on port 3838. ## Instructions of use 1. Import time series CSV file. Assumed structure: -- date (`"%Y-%m-%d %H:%M:%S"`). TagAnomaly will attempt to infer the date from other patterns as well, using the *parsedate* package -- category (optional) +- date ("%Y-%m-%d %H:%M:%S") +- category - value -2. (Optional) Import raw data time series CSV file. - -If the original time series is an aggreation over time windows, this time series is the raw values themselves. This way we could dive deeper into an anomalous value and see what it is comprised of. +2. (Optional) Import raw data time series CSV file. If the original time series is an aggreation over time windows, this time series is the raw values themselves. This way we could dive deeper into an anomalous value and see what it is comprised of. Assumed structure: -- date (`"%Y-%m-%d %H:%M:%S"`). TagAnomaly will attempt to infer the date from other patterns as well, using the *parsedate* package -- category (optional) -- content +- date ("%Y-%m-%d %H:%M:%S") +- category +- value -2. Select category (optional, if exists) +2. Select category (if exists) 3. Select time range on slider -4. Select points on plot that look anomalous. -Optional (1): click on one time range on the table below the plot to see raw data on this time range -Optional (2): Open the `All Categories` tab to see how other time series behave on the same time range. -5. Once you decide that these are actual anomalies, save the resulting table to csv by clicking on `Download labels set` and continue to the next category. +4. Inspect your time series: +(1): click on one time range on the table below the plot to see raw data on this time range +(2): Open the "All Categories" tab to see how other time series behave on the same time range. + +4.Select points on plot that look anomalous. + +5. Click "Add selected points" to add the marked points to the candidate list. + +7. Once you decide that these are actual anomalies, save the resulting table to csv by clicking on "Download labels set" and continue to the next category. #### Current limitations/issues -It is currently impossible to have multiple selections on one plot. A workaround is to select one area, download the csv and select the next area. Each downloaded CSV has a random string so files won't override each other. Once labeling is finished, one option is to run the provided [prep_labels.py](https://github.com/Microsoft/TagAnomaly/blob/master/prep_labels.py) file in order to concatenate all of TagAnomaly's output file to one CSV. +Points added but not saved will be lost in case the date slider or categories are changed, hence it is difficult to save multiple points from a complex time series. Once all segments are labeled, one can run the provided [prep_labels.py](https://github.com/Microsoft/TagAnomaly/blob/master/prep_labels.py) file in order to concatenate all of TagAnomaly's output file to one CSV. + + # Contributing This project welcomes contributions and suggestions. Most contributions require you to agree to a diff --git a/assets/selected.png b/assets/selected.png index 1de6e3be4b9e204039d3762fb341c4104254c780..59628161ff841d8d4cfc2d70974d01b5e723d3eb 100644 GIT binary patch literal 32917 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 bind_rows(brushed())) }) + # Update selected points when the user clicks 'Remove' observeEvent(input$delete, { if (dim(selectedPoints())[1] > 0) { selectedPoints(selectedPoints()%>% anti_join(brushed())) } }) - ####---- Time-Series data handling ----#### + ####---- Time-Series data injestion and handling ----#### - ## Read CSV input file + + getDataset <- reactive({ + ## Get time-series dataset from file upload + + if(is.null(input$timeseriesfile)) return(NULL) + dataset <- tryReadFile() + + + validate( + need(nrow(dataset) > 0, "Input file is empty"), + need(('date' %in% names(dataset)),"date column not found. Consider renaming your timestamp column to date"), + need(('value' %in% names(dataset)),"value column not found. Consider renaming your value column to value") + + ) + dataset + }) + tryReadFile <- function() { + ## Read CSV input file from the user provided path out <- tryCatch( { read.csv(input$timeseriesfile$datapath,stringsAsFactors = F) @@ -60,6 +83,7 @@ server <- function(input,output, session) { } padMissingDates <- function(dataset,padValue = 0, timeSeriesGapValue){ + ## Interpolate missing time/date values category <- dataset[1,'category'] %>% unlist() pad <- data.frame(date = seq(from = min(dataset$date),to = max(dataset$date),by = timeSeriesGapValue)) @@ -73,25 +97,12 @@ server <- function(input,output, session) { dataset } - - ## Get time-series dataset from file upload - getDataset <- reactive({ - - if(is.null(input$timeseriesfile)) return(NULL) - dataset <- tryReadFile() - - - validate( - need(nrow(dataset) > 0, "Input file is empty"), - need(('date' %in% names(dataset)),"date column not found. Consider renaming your timestamp column to date"), - need(('value' %in% names(dataset)),"value column not found. Consider renaming your value column to value") - - ) - dataset - }) + getTimeSeriesDataset <- reactive({ + ### Turn dataset into a time series by transforming the date column into POSIXct. + ### If dataset is numeric, turn numericTimestamp flag to TRUE. dataset <- getDataset() if(is.null(dataset)) return(NULL) @@ -137,8 +148,9 @@ server <- function(input,output, session) { dataset }) - ## Get a dataset for a specific category + getCategoryDataset <- reactive({ + ## Get a dataset for a specific category ts <- getTimeSeriesDataset() if(is.null(ts)) return(NULL) @@ -158,8 +170,9 @@ server <- function(input,output, session) { dataset }) - ## Get the entire dataset, filtered by the slider range + getTimeFilteredDataset <- reactive({ + ## Get the entire dataset, filtered by the slider range dataset <- getTimeSeriesDataset() if(is.null(dataset)) return(NULL) if(is.null(input$slider)) return(NULL) @@ -167,8 +180,9 @@ server <- function(input,output, session) { dataset %>% filter(date >= input$slider[1], date <= input$slider[2]) }) - ## Get category dataset, filtered by the slider range + getTimeFilteredCategoryDataset <- reactive({ + ## Get category dataset, filtered by the slider range dataset <- getCategoryDataset() if(is.null(dataset)) return(NULL) if(is.null(input$slider)) return(NULL) @@ -181,9 +195,11 @@ server <- function(input,output, session) { ####---- Raw data handling ----#### - ## Get raw data (an additional dataset for which the time-series dataset is an aggregation) - ## See R/create_sample_data.R for a script that creates demo time-series and raw datasets + getRawData <- reactive({ + ## Get raw data (an additional dataset for which the time-series dataset is an aggregation) + ## See R/create_sample_data.R for a script that creates demo time-series and raw datasets + cate <- input$category if(is.null(input$rawfile)) return(NULL) @@ -210,8 +226,9 @@ server <- function(input,output, session) { raw }) - ## get raw data for a sample selected by the user + getRawDataForSample <- reactive({ + ## get raw data for a sample selected by the user lastclicked <- input$summaryTable_rows_selected if(is.null(lastclicked)) return(NULL) @@ -468,6 +485,7 @@ server <- function(input,output, session) { ####---- Data output ----#### ## download selected points + output$mydownload <- downloadHandler( filename = function(){ random_string <- paste0(paste0(sample(LETTERS,2 , TRUE),collapse=''),sample(999, 1, TRUE), paste0(sample(LETTERS,2 , TRUE),collapse=''),collapse = '') @@ -477,9 +495,9 @@ server <- function(input,output, session) { } else{ paste0(gsub(".csv",replacement = "",input$timeseriesfile$name),'-',random_string,'-labels.csv') } - }, - content = function(file) { + }, content = function(file) { write.csv(selectedPoints(),file) } ) + } \ No newline at end of file diff --git a/ui.R b/ui.R index 60b610e..0e69f8b 100644 --- a/ui.R +++ b/ui.R @@ -23,10 +23,11 @@ header <- dashboardHeader(title = 'Taganomaly - Anomaly detection labeling tool' - value

2. Select category (if exists)

3. Select time range on slider

- 4.Select points on plot that look anomalous. -
Optional (1): click on one time range on the table below the plot to see raw data on this time range -
Optional (2): Open the "All Categories" tab to see how other time series behave on the same time range. -
5. Once you decide that these are actual anomalies, save the resulting table to csv by clicking on "Download labels set" and continue to the next category.

' + 4.Select points on plot that look anomalous.

+ 5. Click "Add selected points" to add the marked points to the candidate list.

+b
Optional (1): click on one time range on the table below the plot to see raw data on this time range +
Optional (2): Open the "All Categories" tab to see how other time series behave on the same time range.

+ 7. Once you decide that these are actual anomalies, save the resulting table to csv by clicking on "Download labels set" and continue to the next category.

' ))) ) @@ -65,7 +66,7 @@ body <- dashboardBody( plotOutput("plot", brush = "user_brush"), actionButton("add", "Add selected points"), actionButton("delete", "Remove selected points"), - h2('Selected points:'), + h2('Currently marked points:'), dataTableOutput("summaryTable"), h2('Inspect raw data:'), h5('Select a point or more on the graph, then select a record on the \"Selected Points\" table to see raw data'),