2017-07-20 3 views
1

Je suis à la recherche d'un paquet pour détecter le motif par exemple la saisonnalité. J'ai un dataframe avec deux colonnes: Jour (Date) et Visites.R détecter le motif comme la saisonnalité

Et quand je trace les données, je vois que les visites sur le site sont en mois d'été plus élevé que les autres mois. Et ce schéma que je peux voir sur 10 ans.

Le problème est que je veux analyser la saisonnalité avec des données provenant de centaines de sites Web.

Veuillez me fournir un exemple pour détecter ce modèle sur les séries temporelles?

+0

Peut-être voir la meilleure réponse ici: https://stats.stackexchange.com/questions/57705/identify-seasonality-in-time-series-data – Florian

+0

Découvrez la fonction stl(). – Odysseus210

+0

https://cran.r-project.org/view=TimeSeries – ulfelder

Répondre

1

Facebook a publié le package prophet pour simplifier l'analyse des séries chronologiques. Il y a des tonnes d'autres façons de rechercher la saisonnalité, mais je pense que prophet est le plus facile à utiliser sans peaufiner. Je recommande de lire documentation de Facebook.

D'abord, créons un échantillon de vos données.

library(tidyverse) 
website <- 
    tibble(date = seq(as.Date('2015/01/01'), as.Date('2017/01/01'), by = "day"), 
     visits = round(rnorm(732, mean = 327, sd = 100))) 

Augmente le trafic du site pendant l'été.

library(lubridate) 
website <- 
    mutate(website, ifelse(month(date) %in% c(6, 7, 8), visits + 10, visits)) 

Maintenant pour les calculs prophet!

library(prophet) 
website <- website %>% 
    rename(ds = date, y = visits) 
m <- prophet(website) 
future <- make_future_dataframe(m, periods = 365) 
forecast <- predict(m, future) 

Visualisez les résultats.

plot(m, forecast) 

enter image description here

Il ressemble vraiment à il y a plus de trafic en été, mais il est difficile d'être certain. Heureusement, prophet a une fonction pour examiner la saisonnalité quotidienne et hebdomadaire.

prophet_plot_components(m, forecast) 

enter image description here

Voir cette augmentation dans le tableau "annuel"? Vous avez certainement plus de trafic de site Web en été que le reste de l'année!

Mise à jour

En réponse aux commentaires, voici un moyen rapide et facile à tester une saisonnalité mensuelle dans chaque site Web. Il applique un test anova à chaque groupe. Cet exemple donne un effet saisonnier au site Web B, que vous pouvez voir dans les colonnes statistic et p.value.

d'abord créer les données de démonstration ...

library(tidyverse) 
library(lubridate) 
library(purrr) 
library(broom) 

website <- 
    tibble(
    site = c(rep("A", 732), rep("B", 732), rep("C", 732)), 
    date = rep(seq(
     as.Date('2015/01/01'), as.Date('2017/01/01'), by = "day" 
    ), 3), 
    visits = rep(round(rnorm(
     732, mean = 327, sd = 100 
    )), 3) 
) %>% 
    mutate(month = month(date)) 

website <- 
    mutate(website, visits = ifelse(month %in% c(6,7,8) & 
          site == "B", visits + 1000, visits)) 

maintenant utiliser les merveilles du tidyverse pour exécuter le test dans chaque groupe ...

website %>% 
    split(.$site) %>% 
    map(~ tidy(aov(visits ~ month, data = .))) 

#$A 
#  term df  sumsq meansq statistic p.value 
#1  month 1 3645.896 3645.896 0.3529069 0.5526563 
#2 Residuals 730 7541662.108 10331.044  NA  NA 

#$B 
#  term df  sumsq meansq statistic p.value 
#1  month 1 1086355 1086355.5 5.426011 0.02011086 
#2 Residuals 730 146155160 200212.5  NA   NA 

#$C 
#  term df  sumsq meansq statistic p.value 
#1  month 1 3645.896 3645.896 0.3529069 0.5526563 
#2 Residuals 730 7541662.108 10331.044  NA  NA 

Notez que ce n'est pas l'idéal méthode pour effectuer l'analyse des séries temporelles, mais il répond à la question spécifique que vous posez.

+0

C'est une réponse géniale merci !! C'est un paquet très intéressant! :) Y at-il une possibilité d'obtenir une valeur pour la saisonnalité d'un site Web? Donc, ce site a une saisonnalité et l'autre non? Dans l'intrigue annuelle intéressante: est-ce la solution de plott sur les trois années sans prévision (2015-2017)? Je demande parce qu'il y a un 01 dans le lettrage. – user860480

+0

Cherchez-vous à répondre à la question «Lequel de ces sites ont plus de trafic en été que le reste de l'année? Parce qu'il y a une approche très simple que je peux vous montrer là-bas. De plus, vous avez dit que vous n'aviez que deux colonnes dans vos données, alors comment savoir quel point de données fait référence à quel site Web? Heureux d'éditer ma réponse une fois que vous me donnerez plus d'informations. Et n'oubliez pas de sélectionner cette réponse en cochant la case sous le score si c'est votre préféré. –

+0

Oui, je cherche la réponse "Lequel de ces sites ont plus de trafic dans QUELQUES mois, par exemple en été ou en décembre?" C'est très simple de répondre à cette question avec une valeur pour décider oui ou non? J'ai trois colonnes: site web, date et visites. Mais à cause de la forme ts de la prévision du paquet, j'utilise uniquement les colonnes date et visite. Je suis vers excité par ta réponse! Et si votre solution fonctionne, j'utilise la case à cocher pour sélectionner votre réponse! – user860480