自分の備忘録目的ので、そりゃそうだよね?ということがただ確認できる、というもので、特に発見を目的としたエントリーではありません。
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()
月別に集計し直す
Googleトレンドは週単位ですので、これを月あたりの合計値に再集計します。*2
groupby でできる、resample でできるなど、色々と情報はありましたが、上手くいかず、このサイトに従いました。
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()
先程と余り印象は変りません。
月単位のトレンドを取り除きます。
1つ目のブログに従います。satsmodelsというライブラリを使います。
import statsmodels.api as sm
12ヶ月周期があると仮定することで月の変動を取り除けます。
df_ts = sm.tsa.seasonal_decompose(df_m.values,freq=12)
df_ts.plot()
上が元々のデータ。残差が’一番下ですが、残差もそこそこあるようです。。。
季節変動を除いたトレンドを確認
トレンドは「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()
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月は毎年新作映画が公開されますね。
夏って、何でしたっけ?
というわけで落ちもなにもありませんが、以前、RでやったことをPythonでもやってみました。
csvファイルで結果を保存すれば、これで長期的なGoogleトレンドによるトレンドを抜き出しました。
df_trend.to_csv("doraemon_trend.csv")
時系列データはマーケティングでは頻繁に出てくると思うのですが、余り聞かないのは、実際のところ時系列データをそのままモデリングするのは結構たいへんだからだと思います。
とはいえ、ざっくりとしたトレンドと季節変動は分解して図示した方が、頭の整理はされそうな気がします。幸い作業自体は楽なので。