如何用毫秒精度数据计算R中的数据速率?

时间:2014-10-24 20:13:35

标签: r datetime time

我正在尝试从CSV文件中获取数据:

datetime,bytes
2014-10-24T10:38:49.453565,52594
2014-10-24T10:38:49.554342,86594
2014-10-24T10:38:49.655055,196754
2014-10-24T10:38:49.755772,272914
2014-10-24T10:38:49.856477,373554
2014-10-24T10:38:49.957182,544914
2014-10-24T10:38:50.057873,952914
2014-10-24T10:38:50.158559,1245314
2014-10-24T10:38:50.259264,1743074

并计算字节值的变化率(表示到目前为止下载到文件中的字节数),以准确反映我拍摄样本时的详细时间数据(大约应该是每1个) / 10秒,虽然由于各种原因,我希望这是不完美的。)

例如,在上面的采样中,第二行得到(86594-52594 =)34000个额外字节,在第一行中,在(.554342-.453565 =)。100777秒,因此产生(34000 / 0.100777 =)337,378字节/秒。

第二个例子是最后一行与其前任相比得到(1743074-1245314 =)497760字节(.259264-.158559 =)。100705秒,因此产生(497760 / .100705 =)4,942,753字节/秒

我希望随着时间的推移获得这些费率的图表,我对R来说相当新,并且不太清楚如何得到我想要的。

我发现了一些相关的问题似乎可能让我接近:

但是他们似乎都没有让我在那里......当我尝试使用strptime时,我似乎失去了精确度(即使使用%OS);另外,我只是不确定如何将其绘制为一系列与时间戳相关联的增量...以及那个答案中的内容(第二个链接,AAPL股票增量图的答案)关于{{1} }和diff(...)在概念层面对我有意义,但不够深入,以至于我理解如何在这种情况下应用它。

我想我可能已经接近了,但很想看到别人想出的东西。我有什么选择呢?任何可以显示滚动平均值(超过,比如说,秒或5秒),和/或使用漂亮的SI单位(KB / s,MB / s等)的东西?

编辑:

我认为我可能非常接近(甚至可以回答基本问题):

-nrow(...)

它并不是非常漂亮(特别是y轴标签,以及使用更长的数据文件,它全都塞满尖峰)的事实,但它并没有获得亚秒精度,这可能实际上是正常的对于更大的问题(在更大的图中,你无法分辨,而上面的示例数据,你真的可以),但仍然不是我希望的...所以,输入仍然欢迎。

1 个答案:

答案 0 :(得分:0)

可能的解决方案:

# reading the data
df <- read.table(text="datetime,bytes
2014-10-24T10:38:49.453565,52594
2014-10-24T10:38:49.554342,86594
2014-10-24T10:38:49.655055,196754
2014-10-24T10:38:49.755772,272914
2014-10-24T10:38:49.856477,373554
2014-10-24T10:38:49.957182,544914
2014-10-24T10:38:50.057873,952914
2014-10-24T10:38:50.158559,1245314
2014-10-24T10:38:50.259264,1743074", header=TRUE, sep=",")

# formatting & preparing the data
df$bytes <- as.numeric(df$bytes)
df$datetime <- gsub("T"," ",df$datetime)
df$datetime <- strptime(df$datetime, "%Y-%m-%d %H:%M:%OS")
df$sec <- as.numeric(format(df$datetime, "%OS6"))

# calculating the change in bytes per second 
df$difftime <- c(NA,diff(df$sec))
df$diffbytes <- c(NA,diff(df$bytes))
df$bytespersec <- df$diffbytes / df$difftime

# creating the plot
library(ggplot2)
ggplot(df, aes(x=sec,y=bytespersec/1000000)) +
  geom_line() +
  geom_point() +
  labs(title="Change in bytes\n", x="\nWhen", y="MB/s\n") +
  theme_bw()

给出:

enter image description here