En utilisant R pour obtenir une volatilité et une pic à la moyenne.Ratio de données de trafic Internet

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

Question

J'ai des données de trafic réseau dans ce qui suit pour chaque heure d'une période de dix jours comme suit dans un jeu de données 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

Comme on le voit, il y a une répétition de catégorie en une seule heure également. Je dois calculer la volatilité et l'heure de pointe jusqu'à des ratios d'heures moyenne de ces différentes catégories d'applications.

volatilité : écart type des volumes horaires divisés par la moyenne horaire.

heure de pointe à avg. ratio heure : rapport du volume de l'heure maximale au vol. de l'heure moyenne pour cette application.

Alors, comment puis-je regrouper et calculer ces deux statistiques pour chaque catégorie? Je suis nouveau pour r et ne pas avoir beaucoup de connaissance de la manière d'agréger et d'obtenir les moyennes comme mentionnées.

Ainsi, le résultat final ressemblerait à ceci, d'abord que le volume de chaque catégorie est agrégé sur une seule période de 24 heures en additionnant le volume, puis en calculant les deux statistiques

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

EDIT: Plym vous m'a fait aussi loin que ceci.

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

Mais ce n'est pas ce que j'espérais. Je souhaite les statistiques par catégorie où toutes les heures des jours sont agrégées d'abord en 24 heures en additionnant les volumes, puis le ratio volatilité et PA a été calculé. Toute suggestion d'amélioration?

Était-ce utile?

La solution

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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top