1

我正在处理一个大的时间序列数据,它看起来像:

ProcesID ProcessName  StartDate  EndDate   Duration
   10       httpd      1/1/2012   1/2/1012  12 Hours
   11       ftp        1/1/2012   1/2/1012  10 Hours
   12       snmp       1/1/2012   1/2/1012  5 Hours
   13       email      1/1/2012   1/2/1012  2 Hours
   14       java       1/1/2012   1/2/1012  5 Hours
   15       perl       1/1/2012   1/2/1012  7 Hours
   20       php        1/1/2012   1/2/1012  6 Hours

unique( x$ProcessName) 的数量大于 500。我无法绘制每个ProcessName. 我想选择anamolies并绘制它们。

我确实尝试了样本:

 y<-x[sample(nrow(x), 50, prob = NULL),]

 ggplot(subset(x, ProcessName %in% y$ProcessName), 
       aes(StartDate, Duration, group=ProcessName)) + geom_point()

我不确定sample执行此分析是否是正确的选择?有没有人做过类似的事情来从一个仅针对异常的人口创建图表?

4

1 回答 1

1

与其说是答案,不如说是评论,我会首先查看进程运行时间超过该进程的第 75 个百分位的那些日子。这些只是虚拟数据,因此不太可能像您的数据那样“解决”问题,但您可以将其用作您自己数据的框架。我希望您会看到一些进程在特定日期运行繁重。您可能希望将数据分成 50 个进程的组,然后绘制它们。一次对所有 500 多个进行实际审查都太过分了。

如果您想将某一天与前一天进行比较,我会考虑使用该功能diff()

基本上,该图表显示了每个进程在哪一天运行的时间超过了它的第 75 个百分位。

library(plyr)
library(ggplot2)
dat <- data.frame(ProcessID=factor(sample(1:50,10000,replace=TRUE)),
                  StartDate=as.Date(sample(1:5,10000,replace=TRUE), origin="2012-01-01"),
                  Duration=round(rexp(10000,rate=2)*6))

fourq.dat <- ddply(dat, .(ProcessID), summarize, fourq_hours = quantile(Duration)[4])
dat <- merge(dat,fourq.dat)
dat$plot <- ifelse(dat$Duration > dat$fourq_hours,1,0)

dat <- subset(dat, plot == 1)

ggplot(dat, aes(StartDate, Duration)) + geom_point() + facet_wrap(~ProcessID)
于 2012-10-16T19:15:30.033 回答