Pregunta

Tengo datos de tráfico de red en lo siguiente para cada hora de un período de diez días de la siguiente manera en un conjunto de datos 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

Como se ve, también hay repetición de categoría dentro de una sola hora. Necesito calcular la volatilidad y la hora pico a las relaciones de hora promedio de estas diferentes categorías de aplicaciones.

volatilidad : desviación estándar de volúmenes por hora dividida por promedio por hora.

hora pico a AVG. Relación de hora : proporción de volumen de la hora máxima al vol. de la hora promedio para esa aplicación.

Entonces, ¿cómo agrego y calcula estas dos estadísticas para cada categoría? Soy nuevo en R y no tengo mucho conocimiento de cómo agregar y obtener los promedios mencionados.

Entonces, el resultado final se vería algo así, donde primero se agrega el volumen de cada categoría en un solo período de 24 horas al sumar el volumen y luego calcular las dos estadísticas

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

Editar: PlyR me consiguió en cuanto a esto.

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

Pero esto no es lo que esperaba. Quiero las estadísticas por categoría donde todas las horas de los días se agreguen primero en 24 horas sumando los volúmenes y luego se calcula la relación volatilidad y PA. ¿Alguna sugerencia de mejora?

¿Fue útil?

Solución

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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top