如何使用R从Web日志文件中绘制每秒请求数

时间:2011-02-17 20:53:18

标签: r

我正在尝试使用我们的apache日志文件来每秒绘制请求。 我已经将日志按下到一个简单的时间戳列表,每个请求一个条目。

4时02分28秒
4时02​​分28秒
4时02​​分28秒
4时02​​分29秒
...

我无法弄清楚如何让R识别为时间和聚合到每秒。 谢谢你的帮助

3 个答案:

答案 0 :(得分:3)

使用rubridate软件包可以非常轻松地处理日期和时间。

这是一个例子,使用了lubridate的hms()函数。 hms将字符串转换为具有单独列的数据帧,包括小时,分钟和秒。 myd(月 - 日 - 年),dmy(日 - 月 - 年),ms(分 - 秒)有类似的功能......你明白了。

library(lubridate)
data <- c("04:02:28", "04:02:28", "04:02:28", "04:02:29")
times <- hms(data)
times$second

[1] 28 28 28 29

此时,时间是一个直接的数据框,您可以隔离任何所需的列:

str(times)

Classes 'period' and 'data.frame':  4 obs. of  6 variables:
 $ year  : num  0 0 0 0
 $ month : num  0 0 0 0
 $ day   : num  0 0 0 0
 $ hour  : num  4 4 4 4
 $ minute: num  2 2 2 2
 $ second: num  28 28 28 29

答案 1 :(得分:1)

我不确定,如何正确地做到这一点,但这应该是一种可能的方式,也许可以帮助你。

  1. 取代字符串,将数据作为UNIX时间戳从数据库中获取,表示1970-01-01的秒数。

  2. 使用hist(数据)绘制直方图。或者您可以使用melt包中的reshape2命令并使用cast创建数据框,其中一列是时间戳,另一列确定当时的事务数。

  3. 使用as.POSIXlt(your.unix.timestamps, origin="1970-01-01", tz="GMT")将时间戳转换为R可理解的日期时间结构。

  4. 然后使用format使用第3点的数据为地块添加标签。

  5. 以下是一个例子:

    # original data
    data.timestamps = c(1297977452, 1297977452, 1297977453, 1297977454, 1297977454, 1297977454, 1297977455, 1297977455)
    data.unique.timestamps = unique(data.timestamps)
    
    # get the labels
    data.labels = format(as.POSIXlt(data.unique.timestamps, origin="1970-01-01", tz="GMT"), "%H:%M:%S")
    
    # plot the histogram without axes
    hist(data.timestamps, axes=F)
    
    # add axes manually
    axis(2)
    axis(1, at=unique(data.timestamps), labels=data.labels)
    

    - 希望这有帮助

答案 2 :(得分:1)

在我看来,既然您已经有一秒钟的时间戳,那么您需要做的就是对时间戳进行频率计数,并在原始时间顺序中绘制频率 。说timeStamps是你的时间戳数组,然后你会这样做:

plot(c( table( timeStamps ) ) )

我假设您想在一段时间内以每一秒的间隔绘制日志消息。另外我假设HMS时间戳在一天之内。请注意,table函数会生成其参数的频率计数。