Как составить график запросов в секунду из файла веб-журнала, используя R - PullRequest
2 голосов
/ 17 февраля 2011

Я пытаюсь составить график запроса в секунду, используя наши файлы журнала apache.Я записал в журнал простой список отметок времени, по одной записи на запрос.

04: 02: 284:02:284:02:284:02:29...

Я не могу понять, как заставить R распознавать как время и агрегировать в секунду.Спасибо за любую помощь

Ответы [ 3 ]

3 голосов
/ 18 февраля 2011

Пакет lubridate упрощает работу с датами и временем.

Вот пример использования функции lmsridate hms (). hms преобразует строку символов в фрейм данных с отдельными столбцами для часов, минут и секунд. Существуют аналогичные функции для myd (месяц-день-год), dmy (день-месяц-год), мс (минуты-секунды) ... вы получаете точку.

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
1 голос
/ 18 февраля 2011

Мне кажется, что поскольку у вас уже есть отметки времени с точностью до одной секунды, все, что вам нужно сделать, это сделать подсчет частоты отметок времени и построить частоты в исходном порядке времени. . Скажем, timeStamps - это ваш массив меток времени, тогда вы бы сделали:

plot(c( table( timeStamps ) ) )

Я предполагаю, что вы хотите вывести сообщения журнала в каждом интервале в одну секунду в течение определенного периода. Также я предполагаю, что отметки времени HMS находятся в пределах одного дня. Обратите внимание, что функция table производит подсчет частоты своего аргумента.

1 голос
/ 18 февраля 2011

Я не совсем уверен, как сделать это правильно, но это должно быть одним из возможных способов и, возможно, поможет вам.

  1. Вместо строк получите данные как метки времени UNIX из базы данных, которые обозначают количество секунд с 1970-01-01.

  2. Используйте историю (данные), например, для построения гистограммы. Или вы можете использовать команду melt из пакета reshape2 и использовать cast для создания фрейма данных, где один столбец является отметкой времени, а другой столбец определяет количество транзакций в это время.

  3. Используйте as.POSIXlt(your.unix.timestamps, origin="1970-01-01", tz="GMT") для преобразования меток времени в понятные структуры даты и времени R.

  4. Затем добавьте метки на график, используя данные из пункта 3, используя format.

Вот пример:

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

- Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...