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
.

보시는 바와 같이 한 시간 이내에 카테고리 반복이 있습니다. 나는 이러한 다양한 응용 프로그램 카테고리의 휘발성과 피크 시간을 평균 시간 비율로 계산해야합니다.

휘발성 : 시간당 볼륨의 표준 편차는 시간당 평균으로 나눈 값입니다.

avg에서 피크 시간. 시간 비율 : 최대 시간의 부피의 비율. 해당 응용 프로그램의 평균 시간의 시간.

그래서 각 카테고리에 대해이 두 통계를 어떻게 집계하고 계산합니까? 나는 새로운 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
.

편집 : 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 )
    }
)
.

그러나 이것은 내가 바라는 것이 아닙니다. 카테고리에 대한 통계를 원합니다. 모든 시간이 볼륨을 합산 한 다음 휘발성 및 PA 비율이 계산하여 모든 시간의 시간이 24 시간으로 집계됩니다. 개선을위한 제안은 무엇입니까?

도움이 되었습니까?

해결책

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