Rを使用してボラティリティとピークを平均にする。インターネット交通データの比率

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

質問

Rデータセットでは、10日の期間の各時間ごとに、次のようにネットワークトラフィックデータを持っています。

   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
.

見たように、1時間内にカテゴリの繰り返しもあります。私は、これらの異なるアプリケーションカテゴリの平均時間比率までのボラティリティとピーク時の時間を計算する必要があります。

揮発度:毎時倍数を毎時平均で割った標準偏差

peak to avg。時比:最大時間の量のvol。そのアプリケーションの平均時間の。

それでは、カテゴリごとにこれら2つの統計を集約して計算する方法を教えてください。私はRに慣れており、述べたように平均を集約して入手する方法についての多くの知識を持っていません。

だから、最終結果は、このようなものに見えるようになります。ここで、各カテゴリのボリュームはボリュームを合計してから2つの統計情報を計算することによって1回の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
.

編集:Plyr私はこれまで私を手に入れました。

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の比率を計算しています。改善のための提案?

役に立ちましたか?

解決

You'd need to do it in two stages (using the plyr package): First, as you pointed out, there can be multiple Day-Hour combos for the same category, so we first aggregate, for each category, its totals within each Hour, regardless of the day:

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

Then you get your stats:

> 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