我正在处理大量的时间序列数据,如下所示:
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
唯一(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
是否是执行此分析的正确选择?有没有人做过类似的事情来创建只有异常的人口图?
答案 0 :(得分: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)