Rを使用してボラティリティとピークを平均にする。インターネット交通データの比率
-
15-11-2019 - |
質問
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