統計検定の
昔習った
参考
実装の
単回帰分析とは
| データ分析基礎知識
まず、単回帰分析とは ? を 調べました。 最小二乗法の
意味と 計算方法 - 回帰直線の 求め方
最小二乗法の意味が わからず、 この 記事を 見ました。 Pythonに
よる 時系列分析の 基礎 | Logics of Blue
単回帰ではありませんが、 時系列データの 予測です。 scikit-learn で
線形回帰 (単回帰分析・重回帰分析) – Python で データサイエンス
python 単回帰分析 だと、この 辺の 記事が ヒットします。
前提
Google Search Console の
データの 取得
joshcarty/google-searchconsole: A wrapper for the Google Search Console API. を使用しています。
本線にマージされていませんが、 branch に ある version は、 サービスアカウントを 使った API 接続が できるようになっていますので、 それを 使用しています。 pandas の
Version python3 -m pip list | grep pandas pandas 0.21.1
scikit-learn の
Version % python3 -m pip list | grep scikit-learn scikit-learn 0.19.1
bokeh の
Version % python3 -m pip list | grep bokeh bokeh 0.12.16
手順
以下の
- Google Search Console から
取得した データで、 時系列グラフを 引く。 - LinearRegression で、
Model を 作成する。 - 回帰直線を
描く。 - 回帰直線を
区間を 延長して、 未来の 表示回数を 予測する。
1. Google Search Console から 取得した データで、 時系列グラフを 引く。
%matplotlib inline import pandas as pd import searchconsole # Google Search Console のデータを pandas dataframe として取得 account = searchconsole.authenticate(service_account='./client_secrets.json') web_property = account['https://www.monotalk.xyz/'] report = web_property.query.range('today', days=-90).dimension('date').limit(50000).get() df = report.to_dataframe() # 日付と、impressions を取り出す。 df = df.loc[:,['date','impressions']] # date を 日付型に変換 df['date'] = pd.to_datetime(df['date']) # 日付をindexにする df = df.set_index('date') # julian_date 形式に変換(これは後続処理で数値に変換するために実施) df.index= df.index.to_julian_date() # 描画 df.plot()
<matplotlib.axes._subplots.AxesSubplot at 0x111b75208>
90日分の
GWは、
2. LinearRegression で、 Model を 作成する。
日付を
決定係数が
from sklearn import linear_model clf = linear_model.LinearRegression() # 説明変数 X = df.index - 2458177 # 2次元配列に変換 X = np.reshape(X.values, (X.size, 1)) # 目的変数 Y = df['impressions'] # 2次元配列に変換 Y = np.reshape(Y.values, (Y.size, 1)) # 予測モデルを作成 clf.fit(X, Y) # 回帰係数 print(clf.coef_) # 切片 (誤差) print(clf.intercept_) # 決定係数 print(clf.score(X, Y))
[[ 37.68256666]] [ 5232.76640044] 0.151442359086
3.回帰直線を 描く。
bokeh を
# matplotlib パッケージを読み込み from bokeh.plotting import figure from bokeh.io import output_notebook from bokeh.io import show output_notebook() # figureで新規プロットを作成 p = figure(plot_width=400, plot_height=400) # 回帰直線を表示 p.line(np.asarray(X).reshape(-1), np.asarray(clf.predict(X)).reshape(-1), line_width=2) # 散布図を表示 p.circle(df.index - 2458177, df['impressions'], line_color="navy",# 線の色 fill_color="blue",# 円の色 fill_alpha=0.5) # 透明度 show(p) # 結果を出力
4.回帰直線を 区間を 延長して、 未来の 表示回数を 予測する。
# matplotlib パッケージを読み込み from bokeh.plotting import figure from bokeh.io import output_notebook from bokeh.io import show output_notebook() # 説明変数 X = df.index - 2458177 # 延長する期間分配列を作成 X_append = range(95, 200, 1) # 元の配列に足す X = np.append(X.values, X_append) X = np.reshape(X, (X.size, 1)) # figureで新規プロットを作成 p = figure(plot_width=400, plot_height=400) # 回帰直線を引く p.line(np.asarray(X).reshape(-1), np.asarray(clf.predict(X)).reshape(-1), line_width=2) # 散布図を引く p.circle(df.index - 2458177, df['impressions'], line_color="navy",# 線の色 fill_color="blue",# 円の色 fill_alpha=0.5) # 透明度 show(p) # 結果を出力
Google Search Console から
75-80日後くらいには、
現状の
Webで
統計検定の
以上です。
コメント