Использование R для получения волатильности и Peak для получения среднего значения.Соотношение данных интернет-трафика

StackOverflow https://stackoverflow.com/questions/5059869

Вопрос

У меня есть данные о сетевом трафике для каждого часа десятидневного периода, как показано ниже в наборе данных R.

   Day   Hour         Volume          Category
    0    00            100            P2P
    0    00            50             email
    0    00            200            gaming
    0    00            200            video
    0    00            150            web
    0    00            120            P2P
    0    00            180            web
    0    00            80             email
    ....
    0    01            150            P2P
    0    01            200            P2P
    0    01             50            Web
    ...
    ...
    10   23            100            web
    10   23            200            email
    10   23            300            gaming
    10   23            300            gaming

Как видно, есть повторения категорий и в течение одного часа.Мне нужно рассчитать волатильность и соотношение часов пиковой нагрузки к средним часам для этих различных категорий приложений.

Волатильность:Стандартное отклонение часовых объемов, разделенное на среднечасовое значение.

Час пик в ср.соотношение часов:Отношение громкости максимального часа к об.среднего часа для этого приложения.

Так как же мне агрегировать и рассчитать эти две статистические данные для каждой категории?Я новичок в R и не имею особых знаний о том, как агрегировать и получать средние значения, как уже упоминалось.

Таким образом, окончательный результат будет выглядеть примерно так: сначала объем для каждой категории агрегируется за один 24-часовой период путем суммирования объема, а затем расчета двух статистических данных.

Category    Volatility      Peak to Avg. Ratio
Web            0.55            1.5
P2P            0.30            2.1
email          0.6             1.7
gaming         0.4             2.9

Редактировать:Плир довел меня до этого.

stats = ddply(
    .data = my_data
    , .variables = .( Hour , Category)
    , .fun = function(x){
        to_return = data.frame(
            volatility = sd((x$Volume)/mean(x$Volume))
            , pa_ratio = max(x$Volume)/mean(x$Volume)
        )
        return( to_return )
    }
)

Но это не то, на что я надеялся.Мне нужна статистика по категориям, где все часы дня сначала объединяются в 24 часа путем суммирования объемов, а затем рассчитываются коэффициент волатильности и PA.Есть предложения по улучшению?

Это было полезно?

Решение

Вам нужно будет сделать это в два этапа (используя plyr упаковка):Во-первых, как вы отметили, для одной и той же категории может быть несколько комбинаций «день-час», поэтому мы сначала агрегируем для каждой категории ее итоговые значения в течение каждого часа, независимо от дня:

df1 <- ddply( df, .(Hour, Category), summarise, Volume = sum(Volume))

Затем вы получите статистику:

> ddply(df1, .(Category), summarise,
+            Volatility = sd(Volume)/mean(Volume),
+            PeakToAvg = max(Volume)/mean(Volume) )

  Category Volatility PeakToAvg
1      P2P  0.3225399  1.228070
2      Web         NA  1.000000
3    email  0.2999847  1.212121
4   gaming  0.7071068  1.500000
5    video         NA  1.000000
6      web  0.7564398  1.534884
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top