広告/統計/アニメ/映画 等に関するブログ

広告/統計/アニメ/映画 等に関するブログ

【備忘録】_PythonでGoogleトレンドの季節変動を取り除いてみる

自分の備忘録目的ので、そりゃそうだよね?ということがただ確認できる、というもので、特に発見を目的としたエントリーではありません。

Googleトレンドから「ドラえもん」のデータを取得

Googleトレンドでエリアを日本に絞り、過去5年の「ドラえもん」の検索数を取得します

Jupyterで季節変動をとる

データの読み込みからプロットまで

こちらを参考に致しました。 data.gunosy.io

必要なパッケージの読み込み。

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline

Googleトレンドでは3行目に列名がありますので、頭2行はスキップして読み込みます

df = pd.read_csv("doraemon.csv",skiprows=2)

renameで列名を英語にします。*1

df = df.rename(columns = {"週":"week","ドラえもん: (日本)":"doraemon"})

脚書は日付は文字列として認識されているので日付データ(dattime)に変換します

df["week"] = pd.to_datetime(df["week"])
week doraemon
0 2012-06-17 21
1 2012-06-24 20
2 2012-07-01 21
3 2012-07-08 22
4 2012-07-15 23

グラフを確認すると緩やかな山型のようです。

plt = df.plot()

f:id:yyhhyy:20170611173006p:plain

月別に集計し直す

Googleトレンドは週単位ですので、これを月あたりの合計値に再集計します。*2

groupby でできる、resample でできるなど、色々と情報はありましたが、上手くいかず、このサイトに従いました。

sinhrks.hatenablog.com

df_m = pd.pivot_table(df,index=pd.Grouper(key="week",freq="M"),values="doraemon",aggfunc=sum)
week
2012-06-30     41
2012-07-31    111
2012-08-31    103
2012-09-30    188
2012-10-31     86
Name: doraemon, dtype: int64

pandasのデータフレームに戻します。

df_m = pd.DataFrame(df_m)
doraemon
week
2012-06-30 41
2012-07-31 111
2012-08-31 103
2012-09-30 188
2012-10-31 86

図示します

df_m.plot()

先程と余り印象は変りません。

f:id:yyhhyy:20170611173738p:plain

月単位のトレンドを取り除きます。

1つ目のブログに従います。satsmodelsというライブラリを使います。

import statsmodels.api as sm

12ヶ月周期があると仮定することで月の変動を取り除けます。

df_ts = sm.tsa.seasonal_decompose(df_m.values,freq=12)
df_ts.plot()

上が元々のデータ。残差が’一番下ですが、残差もそこそこあるようです。。。

f:id:yyhhyy:20170611174257p:plain

季節変動を除いたトレンドを確認

トレンドは「trend」に入っているので、先程のデータの日付のインデックスと併せてデータフレームにします。

df_trend = pd.DataFrame({"trend":df_ts.trend,"date":df_m.index})
df_trend = df_trend.set_index(["date"])
trend
date
2012-06-30 NaN
2012-07-31 NaN
2012-08-31 NaN
2012-09-30 NaN
2012-10-31 NaN

個別に図示するとこうなります。

plt= df_trend.plot()

f:id:yyhhyy:20170611174552p:plain

2014年~2015年の盛り上がりはなんだろう?と思い返すと、あの時、「STAND BY ME ドラえもん」という映画がヒットしましたね。あと、この頃からドラえもんの人形がプロモーションで東京タワーやらなんやらに出没するようになった記憶があります。

月別の変動を確認

同様に今度はトレンドではなく季節変動の方を取り出します

df_seasonal = pd.DataFrame({"seasonal":df_ts.seasonal,"date":df_m.index})
df_seasonal = df_seasonal.set_index(["date"])
seasonal
date
2012-06-30 -14.965972
2012-07-31 -10.278472
2012-08-31 57.315278
2012-09-30 -5.538889
2012-10-31 -29.122222

グラフより表の方がみやすいかもしれません。ドラえもんお盛り上がりは、8月と3月のようです。3月は毎年新作映画が公開されますね。

夏って、何でしたっけ?

f:id:yyhhyy:20170611175012p:plain

というわけで落ちもなにもありませんが、以前、RでやったことをPythonでもやってみました。

yyhhyy.hatenablog.com

csvファイルで結果を保存すれば、これで長期的なGoogleトレンドによるトレンドを抜き出しました。

df_trend.to_csv("doraemon_trend.csv")

時系列データはマーケティングでは頻繁に出てくると思うのですが、余り聞かないのは、実際のところ時系列データをそのままモデリングするのは結構たいへんだからだと思います。

とはいえ、ざっくりとしたトレンドと季節変動は分解して図示した方が、頭の整理はされそうな気がします。幸い作業自体は楽なので。

*1:日本語でも良いのですが豆腐になりがちなので楽をします

*2:月の頭から計測していないので頭と後ろはデータがたりませんね。