Python日記

GA4とエクセルを連携して、PV数とコンバージョン数を自動入力する方法

2021年6月26日

GA4とエクセルを連携して、PV数とコンバージョン数を自動入力する方法

先日、PythonとGA4の連携、および、

Pythonとエクセルの連携の方法をお伝えしました。

そちらの内容は以下の2つを参照してください

今回は、それらの応用編として、PythonとGA4に連携しつつ、

エクセルにレポートを自動で書き込んでいけるようにしたいと思います。

GAのレポート作成をしている方には涙が出るほど、便利なスキルです!

環境

Mac 11.4

python 3.9

仮想環境:Poetry

エクセルの準備

上記のエクセルの記事と同様、test.xlsxを準備して、

以下のように記入しました。

エクセル 日付(date) ユーザー数(activeUser) 新規ユーザー(newUser) コンバージョン(conversions)

左から、日付(date)、ユーザー数(activeUser)、

新規ユーザー(newUser)、コンバージョン(conversions)です。

必要であれば、エクセルデータはこちらからダウンロードできます。

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'

(jsonファイル名は、前回の記事同様、creds_ga2.jsonという名前で保存しています。)

ファイル ga.py creds_ga2.json

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()

一番上の行のproperty_idには、ご自身のGA4プロパティIdを記入します。

GA4の左側の歯車のマークから確認ができます。

GA4管理 プロパティの設定 プロパティID

こちらも前回の通り、

エクセルファイル名を、test.xlsx、シート名をSheetにしています。

最大行の表示

    #最大行
    maxRow = sheet.max_row + 1

    #最大列
    maxClm = sheet.max_column + 1

Pythonでは、エクセルの最大列、最大行を以下のように表すことができます。

エクセルの最大行:max_row

エクセルの最大列 : max_column + 1

ここでの最大行は、すでに記入がされています。(1行目にはもう記入がある)

エクセル 日付(date) ユーザー数(activeUser) 新規ユーザー(newUser) コンバージョン(conversions)

そのため、max_row+1として、2行目から記述をできるようにしました。

レポートから必要なデータの記述

GA4では、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")],
    )

今回は、Dimensionから、dateを。

Metricsから、activeUsers、newUsers、conversionsの3つを、

同じリストに入れるかたちで設定しました。

date_ranges(日にちの範囲)は昨日分のみにしています。

dimensions &metricsの一覧

ちなみに、Googleがしっかりとdimensions &metricsの一覧を公開しています。

こちらも参考にしてみてください。

[sanko href="https://developers.google.com/analytics/devguides/reporting/data/v1/api-schema" title="API Dimensions & Metrics" site="Google Analytics公式サイト" target="_blank"]

エクセルに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")

部分解説

これが日付です。「最大行の次の行」の1列目に入力をしていしています。

dimensionリストのはじめのデータをとってきています。

sheet.cell(maxRow,column=1).value = row.dimension_values[0].value

これがアクティブユーザー数です。「最大行の次の行」の2列目に入力をしていしています。

metricsリストのはじめのデータをとってきています。

sheet.cell(maxRow,column=2).value = int(row.metric_values[0].value)

そして以下、2番目、3番目と続けています。

以下は、次のデータが後に続くときのために、+1をしています。

例えば、日付の範囲が、複数にまたがるときなどには必要です。

maxRow += 1

最後にエクセルデータを保存します。

    wb.save("test.xlsx")

スクリプトまとめ

ここまでの流れをふまえて完成したスクリプトです。

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

では、その通り、エクセルが記録されているかを確認します。

以下の通り、無事にレポートが表示されていました。

エクセル 日付(date):20210625 ユーザー数(activeUser):9 新規ユーザー(newUser):9 コンバージョン(conversions):0

(このデータを取得したサイトのコンバージョンは設定しなかったので0でした。)

cronでスクリプト実行を自動化

さらに、cronを使えば、自動でレポート作成だけでなく、

スクリプトの自動実行まで可能です。

毎日、毎週、定期的にスクリプトを実行するのも意外とストレスですよね。

よければ、こちの記事も参考にしてみてください。

まとめ

Pythonを使って、GA4のレポート、さらにそのまま自動でエクセルに記述するという、

応用編を紹介しました。

取得したいデータが多ければ多いほど、業務効率ができ、

データ分析が一気に楽になるはずです。

ぜひ、マーケティング業務やサイト解析に活かしてください。

関連記事

-Python日記
-,