Google Analytics の 時系列データを plotly で可視化する


df2gspread で、スプレッドシートのデータを padas の dataframe 化して利用するのか結構便利だったので、前々から使ってみたかった plotly の 入力データとして使えるか試してみました。
結果を以下に記載します。


前提

OS 、Python の version は以下の通りです。

  • OS

    % sw_vers
    ProductName:    Mac OS X
    ProductVersion: 10.12.6
    BuildVersion:   16G1114
    

  • Python

    % python3 -V
    Python 3.6.2
    


参考


必要なライブラリのインストール

df2gspread と、 plotly をインストールします。

python3 -m pip install df2gspread --user
python3 -m pip install plotly --user

手順

以下手順を踏んで、可視化します。

  • Google Analytics からデータをエクスポート

  • df2gspread で データを DataFrame として取り込む

  • plotly で可視化

Google Analytics から データをエクスポート

Google Analytics - Google スプレッドシート アドオン を使って、 1日あたりのPageView 、 Session 、 ユニークユーザー数変遷データを取得します。
設定は以下の通りです。直帰率などの取得していますが、今回は使用しません。
"エクスポート設定"

df2gspread で データを DataFrame として取り込む

df2gspread で スプレッドシートのデータを DataFrame として取り込みます。
start_cell の値は、A15 は、Google Analytics - Google スプレッドシート アドオン を使用したデータの取り込みであれば、基本的にA15 になると思います。
スプレッドシートには、キーのアカウントのアクセス権限が必要になりますので、403エラーになるようであれば、権限を付与してください。

from oauth2client.service_account import ServiceAccountCredentials
def download_as_df():
    from df2gspread import gspread2df as g2d
    # key_file 以下の指定方法だと、notebook と同じディレクトリにあるキーファイルを取得しています。
    key_file = "spreadsheet_api_key.json"
    scope = ['https://spreadsheets.google.com/feeds']
    credentials = ServiceAccountCredentials.from_json_keyfile_name(key_file, scope)    
    # 1brCpWvk2uofc3MEt-ASb2cuZ-u8Zmx-ICxSTltlbVBQ はスプレッドシートのID なのでそれぞれ取得対象のスプレッドシートで変わります。
    df = g2d.download("1cMLBDPbPkoYYX9tXIlHunAA0mt7eBEq2HaHTAxVszh4", wks_name="日次レポート", col_names=True, row_names=False, credentials=credentials, start_cell = 'A15')
    df = df.sort_values(by='ga:date') 
    return df

download_as_df を呼び出し、dataframe として読み込んだ後、グラフ描画のため、不要なカラムの削除と、Indexの付け替えを行います。

import pandas as pd
df = download_as_df()

# datetime に変換する
df["ga:date"] = pd.to_datetime(df["ga:date"])

# ga:date を index として設定する 
df.index = df["ga:date"]

# グラフ描画に不要なカラムの削除   
df = df.drop("ga:date", axis=1)
df = df.drop("ga:avgSessionDuration", axis=1)
df = df.drop("ga:pageviewsPerSession", axis=1)
df = df.drop("ga:bounceRate", axis=1)

# 2016-10-01 から 30日間でデータを絞り込む
span = pd.date_range('2016-10-01', periods=30)
df = df[df.index.isin(span)]

plotly で可視化

import plotly

plotly.offline.init_notebook_mode(connected=False)
plotly.offline.iplot([{
    'x': df.index,
    'y': df[col],
    'name': col
}  for col in df.columns], filename='ga_daily_reports', show_link=False, config={"displaylogo":False, "modeBarButtonsToRemove":["sendDataToCloud"]})

"時系列グラフ"

まとめ

plotly で Google Analytics の時系列データを可視化しました。以下まとめます。

  • スプレッドシート > Pandas DataFrame > plotly への変換は容易にできます。

  • スプレッドシート から Pandas DataFrame に変換後は、多少データの加工が必要でした。

  • Google Analytics 上で可視化が可能なものは、Google Analytics 上で閲覧し、もう少し込み入った可視化、他のデータソースとの統合は、Data Studio を使い、 込み入ったデータ処理が必要な場合は、Python 上での可視化なのかなと思いました。

以上です。

コメント