如何在任何时间点绘制同时运行的作业的数量

时间:2016-11-03 20:37:30

标签: r datetime plot process

我有一些关于特定工作的数据;重要的部分是每个特定工作的开始时间和结束时间。 我想绘制聚合(计数)的同时作业,x轴是时间,y轴是在特定时间点运行的作业数。

由于这是我开始使用R,我开始使用一些预处理步骤,例如合并日期和时间列,转换为POSIXlt,计算timediffs()等等。 现在我有点卡住了。我不需要代码,但我会很感激任何暗示如何实现这一点。

具体来说,我真的不知道如何将作业的处理时间用作一个过程,而不仅仅是使用起点

这是我的数据框:

'data.frame':   10000 obs. of  7 variables:
 $ Process_name         : Factor 
 $ Process_start        : POSIXlt, format: "2009-12-23 03:44:38" 
 $ Process_end          : POSIXlt, format: "2009-12-23 03:44:42" 
 $ Process_duration(s)  : Class 'difftime'  atomic [1:10000] 4 75 1 2 1 
 $ ProcessIncludedInJob : Factor

我想知道在特定时间点同时运行的作业数量。工作是一个运行一段时间的过程。在运行期间,另一项工作可以同时启动和运行。我想计算并绘制这种情况以供进一步分析。我的第一种方法是在x上绘制日期,例如使用y轴的startdate或enddate。但由于每个工作都是一个过程,而不仅仅是一个时间点(开始或结束),我无法看到有多少工作同时运行。所以我想我必须以某种方式使用Jobstart列和Jobduration列。

1 个答案:

答案 0 :(得分:1)

我在这里草拟一个大纲,但我们真的需要你发布可重现的数据( please!):

  • 在任何时间t, [5 , [ "x1" -> [100, 150, 400] ] [3 , [ ["x2" -> [160, 200]], ["x4" -> [300]] ] 。 (这总是一个0到n之间的整数)
  • 转换为num_running_processes = number of started processes - number of ended processes。注意'结束< t',而不是'< ='。

  • 现在你真的不需要将你的时间间隔分为时间间隔(例如1分钟,或5秒或其他),因为你知道df$num_running_processes <- sum(Process_start <= t) - sum(Process_end < t)只会改变价值在Process_start或Process_end中的任何一组时间。

  • 所以你的时间轴可以是集合联盟:num_running_processes。你有一个非统一的时间轴,这没关系。请注意,它也是无序的,即新进程可以在前一个进程结束之前开始。 (我们通过按时间轴排序数据框来重新排序)
  • 还计算另一列df$t <- union(Process_start, Process_end),如上所述
  • 在按时间轴df$num_running_processes绘制,排序或排序数据框之前(dplyr库非常适合进行这些操作)