2017-07-20 15 views
1

私は季節性のパターンを検出するパッケージを探しています。私は、Day(Date)とVisitsの2つのカラムを持つデータフレームを持っています。Rは季節性のようなパターンを検出します

私がデータをプロットすると、ウェブサイトでの訪問回数が他の月よりも夏のほうが多いことがわかります。そしてこのパターンは10年以上見られます。

問題は、何百ものウェブサイトのデータで季節性を分析したいということです。

timeseriesでこのパターンを検出する例を教えてください。

+0

トップの回答が表示される場合があります。https://stats.stackexchange.com/questions/57705/identify-seasonality-in-time-series-data – Florian

+0

stl()関数をご覧ください。 – Odysseus210

+0

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

答えて

1

Facebookはprophetパッケージをリリースし、時系列解析を簡素化しました。季節性を探すには他にもたくさんの方法がありますが、prophetは調整なしで使うのが一番簡単だと思います。 Facebookのdocumentationを読むことをお勧めします。

まず、データのサンプルを作成しましょう。

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

夏にウェブサイトのトラフィックを増やしましょう。

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

prophetの計算が完了しました。

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

結果を視覚化します。

plot(m, forecast) 

enter image description here

より多くのトラフィックは、夏にありますようにそれは間違いなく見えますが、それは、あることは難しいです。幸いにも、prophetには、毎日と毎週の季節性を調べる機能があります。

prophet_plot_components(m, forecast) 

enter image description here

"毎年" チャートでその増加を参照してください?あなたは間違いなくあなたが今年の残りの年よりも夏に多くのウェブサイトのトラフィックを持っている!

更新

コメントへの応答では、ここでは各ウェブサイト内の任意の毎月の季節をテストするために迅速かつ簡単な方法です。各グループにanovaのテストが適用されます。この例では、WebサイトBに季節的な効果を与えます。これはstatisticp.valueの列に表示されます。

まず

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

さて、これは理想的ではないことを

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 

注...各グループ間でテストを実行するtidyverseの驚異を使用して...デモデータを作成しますメソッドを使って時系列分析を実行しますが、それはあなたが求めている特定の質問に答えます。

+0

すごくお世話になりました!とても面白いパッケージです! :)ウェブサイトの季節性の価値を得る可能性はありますか?だからこのウェブサイトには季節性があり、他のものはそうではありませんか?興味深い年次プロット:予測(3月2015-2017)と3年間のプロット解ですか?私はレタリングに01があるので尋ねます。 – user860480

+0

あなたは「これらのウェブサイトのうち、夏には今年の残りの部分より多くのトラフィックがありますか?」という質問に答えるつもりですか?私はそこにあなたを見せることができる非常に簡単なアプローチがあるからです。また、データには2つの列しかないと言っていますが、どのデータポイントがどのWebサイトを参照しているかをどのように知っていますか?あなたが私に詳細を教えたら、私の答えを編集して幸せです。それがあなたのお気に入りの場合は、スコアの下のチェックボックスを使用してこの回答を選択することを忘れないでください。 –

+0

はい、私は答えを探しています "これらのウェブサイトは、夏や12月など、数ヶ月でトラフィックが増えていますか?これは、はい、いいえを決定するための値でこの質問に答えるのは非常に簡単ですか?私は3つの列を持っています:ウェブサイト、日付と訪問。しかし、パッケージの予測からのts形式のために、私は列の日付と訪問のみを使用します。私はあなたの答えについて大いに興奮しています!あなたのソリューションが機能している場合は、チェックボックスを使用して回答を選択します。 – user860480

関連する問題