Google Analytics4 と エクセルを連携させて、
自動でレポートを作成したい!
WEBやマーケティングに携わっている人の中には、毎日Google Analyticsをチェックしている人も少なくないのではないでしょうか。
僕も経験がありますが、けっこう手間がかかってしんどい作業ですよね。
それがもし、自動化できたらどうでしょうか。
実は、Pythonを使えば思っているよりも簡単にできちゃうんです!
今回は、それらの応用編として、PythonとGA4に連携しつつ、エクセルにレポートを自動で書き込んでいけるようにしたいと思います。
- Pythonとエクセルの連携方法
- PythonでGA4のレポートを取得する方法
- GA4のレポートをエクセルに記載する方法
最初に注意点ですが、今回は、GA4のレポーティングを扱います。
それ以前のバージョン(ユニバーサルと呼ばれるGA3のこと)は方法が異なるのでご注意ください。
環境
OS | Mac 10.15.4 |
Python | python 3.9 |
仮想環境 | Poetry |
Homebrew | 8.0.19 Homebrew |
最初に、おさらい記事のご紹介
もっと基本的なことから教えて欲しい!そんな人は以下の記事を参考にしてください。
PythonとGA4の連携 おさらい
PythonとGA4の連携方法については、以下の記事で詳しく解説しています。
Pythonとエクセルの連携 おさらい
Pythonとエクセルの連携方法については、以下の記事で詳しく解説しています。
エクセルデータの準備
上記でご紹介している「Pythonとエクセルの連携」記事と同様、test.xlsxを準備して、以下のように記入しました。
左から順番に、以下のヘッダーを作成しています。
- 日付(date)
- ユーザー数(activeUser)
- 新規ユーザー(newUser)
- コンバージョン(conversions)
ちょっとだけ手間を省けるように、エクセルデータを用意しています。
よければ、こちらからダウンロードできます。
Pythonスクリプト:Python×GA4、エクセル
冒頭に、PythonとGA4の連携、およびPythonとエクセルの連携のためのインポートをしています。
(くどいですが、詳しくは冒頭にご紹介したリンクを参考にしてください。)
from google.analytics.data_v1beta import BetaAnalyticsDataClient
from google.analytics.data_v1beta.types import DateRange
from google.analytics.data_v1beta.types import Dimension
from google.analytics.data_v1beta.types import Metric
from google.analytics.data_v1beta.types import RunReportRequest
import os
import openpyxl as op
os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = 'creds_ga2.json'
ちなみに、Google App Scriptのjsonファイル名は、以下の画像の通りcreds_ga2.jsonという名前で保存しています。
Pythonスクリプト:GA4とエクセルの連携
まずGA4とエクセルの連携を以下のように記載しています。
def sample_run_report(property_id="xxxxxxxxxx"):
client = BetaAnalyticsDataClient()
wb = op.load_workbook('test.xlsx')
sheet = wb.get_sheet_by_name('Sheet')
#最大行
maxRow = sheet.max_row + 1
#最大列
maxClm = sheet.max_column + 1
request = RunReportRequest(
property=f"properties/{xxxxxxxxxx}",
dimensions=[Dimension(name="date")],
metrics=[Metric(name="activeUsers"),Metric(name="newUsers"),Metric(name="conversions")],
date_ranges=[DateRange(start_date="yesterday", end_date="yesterday")],
)
response = client.run_report(request)
print("Report result:")
for row in response.rows:
print(row.metric_values[0].value, row.metric_values[1].value, row.metric_values[2].value)
sheet.cell(maxRow,column=1).value = row.dimension_values[0].value
sheet.cell(maxRow,column=2).value = int(row.metric_values[0].value)
sheet.cell(maxRow,column=3).value = int(row.metric_values[1].value)
sheet.cell(maxRow,column=4).value = int(row.metric_values[2].value)
maxRow += 1
wb.save("test.xlsx")
if __name__ == '__main__':
sample_run_report()
以下は補足の情報です。適宜参考にしてください。
プロパティIDの調べ方
一番上の行のproperty_idには、ご自身のGA4プロパティIdを記入します。
GA4の左側の歯車のマークから確認ができます。
sheetの変数にはシート名を記入
4行目のsheetの変数には、エクセルファイルのシート名を記入します。
以下の画像の部分です。
(画像では、sheet1になってますがご自身のシート名を入れてください!)
最大行の表示
Pythonでは、エクセルの最大列、最大行を以下のように表すことができます。
- エクセルの最大行:max_row
- エクセルの最大列 : max_column
ので、レポートの更新をするたびに一番下の空白の行に記載するために、+1をして、最大行の変数を作成しています。
#最大行
maxRow = sheet.max_row + 1
#最大列
maxClm = sheet.max_column + 1
GA4のRequest変数をさらに詳しく
上記のrequestの変数をさらに詳しくみていきます。
GA4のAPIでは、DimensionとMetricsを設定することで、レポートを作成することができます。
request = RunReportRequest(
property=f"properties/{xxxxxxxxxx}",
dimensions=[Dimension(name="date")],
metrics=[Metric(name="activeUsers"),Metric(name="newUsers"),Metric(name="conversions")],
date_ranges=[DateRange(start_date="yesterday", end_date="yesterday")],
)
3行目のDimensionsでは、date(日付)を取得。
4行目のMetricsから、
- ユーザー数(activeUser)
- 新規ユーザー(newUser)
- コンバージョン(conversions)
の3つを取得しています。
これからはリスト形式で取得することが可能です。
最後に、5行目のdate_ranges(日にちの範囲)は、希望の範囲をしてしてください。(ここでは昨日分のみにしています。)
記載例はこんな感じです。(下記では、21年9月1日から9月30日までの範囲を指定できます)
date_ranges=[DateRange(start_date="2021-09-01", end_date="2021-09-30")
dimensions &metricsの一覧
ちなみに、Googleがしっかりとdimensions &metricsの一覧を公開しています。
レポート内容をカスタマイズしたい場合はこちらを参考にしてみてください。
エクセルにGA4のレポートを自動入力
最後に、上記で取得したGA4のレポート内容をエクセルに転記していきます。
response = client.run_report(request)
print("Report result:")
for row in response.rows:
print(row.metric_values[0].value, row.metric_values[1].value, row.metric_values[2].value)
sheet.cell(maxRow,column=1).value = row.dimension_values[0].value #日付
sheet.cell(maxRow,column=2).value = int(row.metric_values[0].value) #アクティブユーザー数
sheet.cell(maxRow,column=3).value = int(row.metric_values[1].value) #新規ユーザー数
sheet.cell(maxRow,column=4).value = int(row.metric_values[2].value) #コンバージョン数
maxRow += 1
wb.save("test.xlsx")
以下は補足の情報です。適宜参考にしてください。
行には、maxRowを指定する
以下の通りで、行を指定する引数には、maxRowを入力して、
レポートをいつでも一番下の行に更新するようにしていできます。
sheet.cell(maxRow,column=1).value = row.dimension_values[0].value
responceの中身はリスト形式で抽出される
for文でrequestの中身を取り出すとリスト形式になっています。
なので、ここでは以下のように指定する必要があります。
- 日付:row.dimension_values[0] ※dimensionから取り出します!
- アクティブユーザー:row.metrics_values[0] ※metricsから取り出します![1]以降も同様です。
エクセルのデータ保存
最後にエクセルデータを保存します。
wb.save("test.xlsx")
Pythonスクリプトまとめ
ここまでの流れを踏まえて完成したスクリプトです。
from google.analytics.data_v1beta import BetaAnalyticsDataClient
from google.analytics.data_v1beta.types import DateRange
from google.analytics.data_v1beta.types import Dimension
from google.analytics.data_v1beta.types import Metric
from google.analytics.data_v1beta.types import RunReportRequest
import os
import openpyxl as op
os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = 'creds_ga2.json'
def sample_run_report(property_id="xxxxxxxxxx"):
client = BetaAnalyticsDataClient()
wb = op.load_workbook('test.xlsx')
sheet = wb.get_sheet_by_name('Sheet')
#最大行
maxRow = sheet.max_row + 1
#最大列
maxClm = sheet.max_column + 1
request = RunReportRequest(
property=f"properties/{xxxxxxxxxx}",
dimensions=[Dimension(name="date")],
metrics=[Metric(name="activeUsers"),Metric(name="newUsers"),Metric(name="conversions")],
date_ranges=[DateRange(start_date="yesterday", end_date="yesterday")],
)
response = client.run_report(request)
print("Report result:")
for row in response.rows:
print(row.metric_values[0].value, row.metric_values[1].value, row.metric_values[2].value)
sheet.cell(maxRow,column=1).value = row.dimension_values[0].value
sheet.cell(maxRow,column=2).value = int(row.metric_values[0].value)
sheet.cell(maxRow,column=3).value = int(row.metric_values[1].value)
sheet.cell(maxRow,column=4).value = int(row.metric_values[2].value)
maxRow += 1
wb.save("test.xlsx")
if __name__ == '__main__':
sample_run_report()
実行後のエクセル
最後に実行結果を確認してみます!
Python実行後の結果は以下でした。
Report result:
9 9 0
では、エクセルに自動で記録されているかを確認します。
やった!ちゃんとエクセルにレポートが記録されてる!
ちなみに、サイトのコンバージョンは設定しなかったので、コンバージョン数は0でした!笑
(しかし、PV数はおかげさまでかなり増えています!ありがとうございます(^ ^))
cronでスクリプト実行を自動化
さらにcronを使えば、レポートを自動で記録してくれるだけでなく、スクリプトの自動実行まで可能です。
毎日、毎週、定期的にスクリプトを実行するのも意外とストレスですよね。
そんなストレスから解消してくれるかもしれません。
よければ、こちの記事も参考にしてみてください。
まとめ
毎日のようにGAのレポートに時間を使っている人には、涙が出るほど嬉しい機能ではないでしょうか。
Pythonを使ってGA4のレポートを取得して、さらにそのまま自動でエクセルに記述する方法をご紹介しました。
僕が現場で実際に使っているレポート自動化の一部抜粋を
以下の記事でご紹介しているので、興味があればそちらも参考にしてみください。
それでは、ぜひ、マーケティング業務やサイト解析に活かしてみてください。
コメント