Pergunta

Tenho dados de tráfego de rede a seguir para cada hora de um período de dez dias, como segue em um conjunto de dados 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 visto, também há repetições de categoria em uma única hora.Preciso calcular a volatilidade e a relação entre horário de pico e hora média dessas diferentes categorias de aplicativos.

Volatilidade:Desvio padrão dos volumes horários dividido pela média horária.

Horário de pico em média.proporção de horas:Relação entre o volume da hora máxima e o vol.da hora média para essa aplicação.

Então, como agrego e calculo essas duas estatísticas para cada categoria?Sou novo em R e não tenho muito conhecimento de como agregar e obter as médias conforme mencionado.

Portanto, o resultado final seria mais ou menos assim, onde primeiro o volume de cada categoria é agregado em um único período de 24 horas, somando o volume e depois calculando as duas estatí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 levou até aqui.

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

Mas não era isso que eu esperava.Quero as estatísticas por categoria onde todas as horas dos dias são agregadas primeiro em 24 horas, somando os volumes e depois calculando a volatilidade e o índice de PA.Alguma sugestão para melhoria?

Foi útil?

Solução

Você precisaria fazer isso em duas etapas (usando o plyr pacote):Primeiro, como você apontou, pode haver vários combos Dia-Hora para a mesma categoria, então primeiro agregamos, para cada categoria, seus totais dentro de cada Hora, independente do dia:

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

Então você obtém suas estatísticas:

> 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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top