2012-10-11 17 views
1

我與它看起來像一個大的時間序列數據的工作:圖形異常有R

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

你能定義你的意思嗎?我們在談論異常值嗎?如果是這樣,是否會讓它成爲一個非常規的時間? –

+0

如果過程的持續時間激增,則會出現異常情況。我想繪製這些過程數據點。例如, – user1471980

+0

@BrandonBertelsen在1/1/20012處理httpd的持續時間爲12小時。這個過程每天都在運行。比方說,如果這個過程的持續時間是2012年1月30日的20個小時,這是一個異常現象,我想繪製這個過程持續時間等。 – user1471980

回答

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)