PythonでGoogleアナリティクスのデータを解析してみる

:::note info
これは [MIERUNE Advent Calendar 2024](https://qiita.com/advent-calendar/2024/mierune) の17日目の記事です。
昨日は @xinmiao1995  さんによる[QGISで一番遠いところに行こう](https://qiita.com/xinmiao1995/items/c5c772ecec94bace2b88) でした。
:::

## はじめに

MIERUNEではQGISの総合情報サイト「[QGIS LAB by MIERUNE](https://qgis.mierune.co.jp/)」を運用しており、アクセス解析ツールとしてGoogleアナリティクスを利用しています。

Googleアナリティクス上でもさまざまな解析をすることができますが、PythonでGoogleアナリティクスのAPIを使って解析できたら便利かもと思い立ち、実際に試してみた流れを紹介します。

## **Google Cloud Platformでの設定手順**

GoogleアナリティクスのAPIを使用するにはGoogle Cloud Platform（GCP）で、プロジェクトやAPIキー、サービスアカウントを作成する必要があります。

下記のリンクからGoogle Cloudのコンソール画面を開きます。

https://console.cloud.google.com/

初回のログイン時には、利用規約への同意画面が表示されるため、利用規約を確認し、問題なければチェックをいれて同意して続行をクリックしましょう。

### 新規プロジェクトの作成

まず初めに、新規プロジェクトを作成します。

GCPにおけるプロジェクトとは、APIの利用設定や管理を行うための単位で、プロジェクトごとにAPIの設定や認証情報を独立して管理することが可能です。

上部のボタンをクリックし、プロジェクト選択画面が開いたら、「新しいプロジェクト」をクリックします。

![image_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/670401/babcd8a1-5fec-9954-9aac-65960dbef0da.png)


任意のプロジェクト名などを入力し「作成」をクリックします。

![image (1) 1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/670401/a26d7cf8-9e64-eb90-dbbf-0fcc5d3ab928.png)

### APIの有効化・サービスアカウントの作成

続いて、GCPのプロジェクトで「Google Analytics API」を有効にし、サービスアカウントを作成します。サービスアカウントとは、プログラムがGoogle APIを利用するための仮想ユーザーのようなものです。

APIとサービスの検索窓から「analytics」と入力し、「Google Analytics Data API」をクリックします。

![image_(2)_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/670401/f9dbf199-8564-f739-fc46-4acbffd01a58.png)

Google Analytics Data APIの画面が表示されたら、「有効にする」をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/670401/5e702541-62be-e266-7230-ec1158452c6c.png)


「認証情報を作成」をクリックします。

![image_(3)_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/670401/2dbdb9ad-2156-ad91-d5d3-f7e45abbaf7d.png)


「アクセスするデータの種類」を目的に応じて選択し、「次へ」をクリックします。

![image_(1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/670401/bd663590-6c66-38cb-ee9f-742bea469c6d.png)


サービスアカウントを作成画面が開くため、任意の値を入力して「作成して続行」をクリックします。

![image (3) 1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/670401/ed7b05c8-f305-cf77-bc4a-7b5553910511.png)

左のリストから「認証情報」を選択し、「認証情報作成」→「APIキー」を選択します。

![image_(2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/670401/780f53fc-8a1a-c9f0-94b2-972fd7e66f30.png)


APIキーが作成されたら、「APIキーを編集」をクリックします。

![image_(4).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/670401/777ca3ed-2f89-3dca-fbad-d1d1ec3029be.png)


「APIの制限」からキーを制限にチェックを入れ、リストから「Google Analytics Data API」にチェックを入れ、「保存」をクリックします。

![image_(5).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/670401/81ade5e0-4d39-1472-1bfe-3750b2597957.png)



### サービスアカウントの鍵を作成

上記で作成したサービスアカウントに対して、認証情報の鍵を作成します。

左のリストから「IAMと管理」→「サービスアカウント」を選択します。

![image_(6)_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/670401/491a4d22-4837-63a3-6497-b40a6be2e824.png)


上記で作成したサービスアカウントの操作の欄から「鍵を管理」を選択します。

![image_(7).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/670401/bb682c73-f50c-95f6-97f3-0db604bd53d6.png)


「キーを追加」を開き、「新しい鍵を作成」をクリックします。

![image_(9)_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/670401/b8a089b0-5f62-21ae-ceaf-29be153211a8.png)



キーのタイプとして「JSON」を選択し、「作成」をクリックします。

![image_(8).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/670401/56ec3bff-1588-aa5e-2fe7-3a626afadd15.png)


以上で、GCPでの設定は完了です。

## Googleアナリティクスでの設定

続いて、上記手順で作成したサービスアカウントに対して、Googleアナリティクスのアクセス権を付与します。なお、この操作にはGoogleアナリティクスのユーザー管理権限が必要です。

左側のリストから「管理」を選択します。

![image 1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/670401/2920ffb6-f463-bd37-88b7-326134a0bb69.png)

「アカウントのアクセス管理」を選択します。

![image_(1) 1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/670401/84e77240-69cc-ae45-221b-fb93e39d6bf7.png)


右上の「+」ボタンをから「ユーザーを追加」を選択します。
![image_(2) 1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/670401/6fe2c339-3694-3c5b-73cd-419c31160490.png)

メールアドレスを入力する項目があるので、さきほどGCPで作成したサービスアカウントに記載されているメールアドレスを入力し、役割を選択します。
入力が完了したら「追加」をクリックしましょう。

![image_(3).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/670401/9875556e-c51b-b567-7887-2c6c0a7fd02b.png)

最後に、PythonでAPIを操作する際に必要となる「プロパティID」を確認します。検索窓に「プロパティID」と入力すると、上部に表示されるためコピーしておきます。
![image_(4) 1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/670401/2bc0bbba-0a0b-cb6e-223c-0dcb8fe8dc7d.png)

## PythonでGoogleアナリティクスのデータの解析

これで準備が整ったので、ここからPythonでGoogleアナリティクスのデータを取得してみます。今回は、日毎のアクティブユーザー数とページビュー数からを抽出して、月ごとの集計までやってみます。

なお、この記事ではipynbを使用しています。

### ライブラリのインストール

Googleアナリティクスのデータを取得するためのgoogle-analytics-dataと、データ加工のためにpandasをインストールしています。

```python
pip install google-analytics-data
pip install pandas
```

### ライブラリのインポートと初期設定

ライブラリのインポートとして、google.analytics.data_v1betaからは、GoogleアナリティクスのAPIを操作するために必要なクラスをインポートしています。

```python
import os
import pandas as pd
from google.analytics.data_v1beta import BetaAnalyticsDataClient
from google.analytics.data_v1beta.types import (
    DateRange,
    Dimension,
    Metric,
    RunReportRequest,
)
```

まず初めに、GoogleアナリティクスのAPIを使用するにあたって初期設定を行います。GCPで作成した認証情報のJSONファイル（credentials.json）のパスを設定し、環境変数に、認証情報のパスを設定します。これにより、GoogleアナリティクスのAPIクライアントが認証情報を自動的に読み込むことができます。

最後に、上記の手順で取得したGoogleアナリティクスのプロパティIDを設定します。

```python
# 認証ファイルのパス
CREDENTIAL = os.path.join(os.getcwd(), "credentials.json")

# 環境変数にパスを設定
os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = CREDENTIAL

# GA4のプロパティIDを設定
PROPERTY_ID = "プロパティIDを入力"
```

### 日毎のアクティブユーザー数とページビューの集計

では、日毎のアクティブユーザー数とページビューの集計をしてみます。

```python
# クライアントの初期化
client = BetaAnalyticsDataClient()

# APIリクエストを作成
request = RunReportRequest(
    property=f"properties/{PROPERTY_ID}",
    dimensions=[Dimension(name="date")],  
    metrics=[
        Metric(name="activeUsers"), 
        Metric(name="screenPageViews"), 
    ],
    date_ranges=[DateRange(start_date="2024-9-1", end_date="today")],
)

# APIリクエストの実行
response = client.run_report(request)

# レスポンスデータをDataFrameに変換
rows = []
for row in response.rows:
    rows.append({
        "date": row.dimension_values[0].value,
        "active_users": int(row.metric_values[0].value),
        "screen_page_views": int(row.metric_values[1].value),
    })

daily_report_df = pd.DataFrame(rows)

# 日付を昇順にソート
daily_report_df["date"] = pd.to_datetime(daily_report_df["date"], format="%Y%m%d")
ddaily_report_dff = daily_report_df.sort_values(by="date")

# 実行して結果を取得
daily_report_df
```

このコードを実行すると、指定した期間の日次データが取得でき、下図のようなデータフレームとして表示されます。

![image_(5) 1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/670401/63334c3d-5d23-2c5c-f1dc-bf5f794ea954.png)


最後に、先ほど取得した日次データを月ごとに集計してみます。

```python
# 月ごとに集計
monthly_report_df = daily_report_df.resample("M", on="date").sum()
monthly_report_df
```

実行結果として、月次集計データが表示されます。

![image_(6).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/670401/91815c84-1e56-809c-21d8-223469c38754.png)


## おわりに

この記事では、PythonでGoogleアナリティクスのデータを解析する手順について紹介しました。Googleアナリティクスでもさまざまな解析をすることができますが、PythonのAPIを利用することで、より柔軟なデータ分析や自動化が可能になるでしょう。

:::note info
明日は@geo_jagaimoさんによる記事です！お楽しみに！
:::