【问题标题】:How to graph requests per second from web log file using R如何使用 R 绘制来自 Web 日志文件的每秒请求数
【发布时间】:2011-02-17 20:53:18
【问题描述】:

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

04:02:28
04:02:28
04:02:28
04:02:29
...

我不太明白如何让 R 识别为时间并聚合到每秒。 感谢您的帮助

【问题讨论】:

  • 附带说明,您可能对Logstalgia 感兴趣,以获得一些有趣的可视化效果

标签: r


【解决方案1】:

lubridate 包使处理日期和时间变得非常容易。

这是一个示例,使用 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

此时,times 是一个直截了当的数据框,您可以隔离任何您希望的列:

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

【讨论】:

  • 我无法让我的数据采用满意的格式,以便 cms() 正常工作。我使用 data
  • 也许您可以使用 dput() 并在上面的问题中从您的数据文件中粘贴一小段摘录,这样我们就可以看到您的格式有什么独特之处?
【解决方案2】:

在我看来,由于您已经拥有一秒粒度的时间戳,您需要做的就是对时间戳进行频率计数并以原始时间顺序绘制频率 。假设timeStamps 是您的时间戳数组,那么您会这样做:

plot(c( table( timeStamps ) ) )

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

【讨论】:

  • 谢谢!这对我有用,我是 R 新手,所以在获取数据时遇到了一些麻烦,我仍然不太确定 c() 和 table() 做了什么,但我很高兴。再次感谢。
【解决方案3】:

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

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

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

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

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

这是一个例子:

# 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)

-- 希望这会有所帮助

【讨论】:

  • 谢谢,我也喜欢这个解决方案。我能够运行您的示例,但收到无法转换为 POSIXlt 类的错误。我认为这是因为当我从文件中读取时它转换为科学记数法
猜你喜欢
  • 2012-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-06
  • 1970-01-01
  • 1970-01-01
  • 2021-11-18
相关资源
最近更新 更多