# カテゴリとタグレベルでのページビューおよびユニークユーザーの追跡

**URL:** <https://meta.discourse.org/t/tracking-of-pageviews-and-unique-users-at-category-and-tag-level/113469>\
**Category:** Data & reporting\
**Created:** [2019 年 4 月 4 日午後 7:24 UTC](https://meta.discourse.org/t/tracking-of-pageviews-and-unique-users-at-category-and-tag-level/113469 "2019-04-04T19:24:32Z")\
**Posts on this page:** 1\
**Showing post:** 17

<div class="post-metadata">

**Author:** ![jericson](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/jericson/32/116215_2.png) [@jericson](https://meta.discourse.org/u/jericson)\
**Post date:** [2023 年 5 月 5 日午後 11:01 UTC](https://meta.discourse.org/t/tracking-of-pageviews-and-unique-users-at-category-and-tag-level/113469/17 "2023-05-05T23:01:59Z")

</div>

[Data Explorer](https://meta.discourse.org/t/32566?silent=true) を使用すると、カテゴリ内のすべてのトピックのビューを合計することで、_合計_ カテゴリビューを取得できます。

```plaintext
SELECT 
       c.id as category_id, 
       SUM(views) as "total views"
FROM categories c 
JOIN topics t ON t.category_id = c.id
WHERE read_restricted is false
GROUP BY c.id
order by sum(views) desc

```

タグごとの合計ビューを取得するのも同様です。

```plaintext
SELECT tags.name,
       sum(views)
from topics t
     join topic_tags tt on t.id = topic_id
     join tags on tags.id = tt.tag_id
group by tags.name
order by sum(views) desc

```

理論的には、ユーザーと日付でビューを分割するために使用できる `topic_views` テーブルもあります。しかし、トピックにビューが多いとクエリがタイムアウトするため、このテーブルはあまり役に立たないことがわかりました。また、トピックあたりのビュー数が大幅に少なく表示されます。これは、正しく理解していれば、匿名ビューをカウントしていないためです。また、`topic.views` には匿名ビューだけでなく、ボットのトラフィックも含まれる可能性があると思います。これは、GA で表示される数よりもはるかに多いです。

GA について言えば、必要なデータはすべて揃っていますが、カテゴリまたはタグでグループ化するのは簡単ではありません。私ができる最善の方法は、`pageTitle` を解析してカテゴリを見つけようとすることです。これは R で [googleAnalyticsR](https://cran.r-project.org/web/packages/googleAnalyticsR/index.html) を使用して行っています。マニュアルの指示に従って Google アカウントを認証し、必要なメトリクスを取得してください。ディメンションとして `pageTitle` を含めることを忘れないでください。私の API 呼び出しは次のようになります。

```plaintext
ga_this_year <- ga_data(ga_id, 
                        date_range = c("2023-01-01", "2023-05-30" ),
                        metrics=c("screenPageViews","averageSessionDuration", "sessions"), 
                        dimensions = c("pageTitle", "deviceCategory")
                       )

```

次の部分を理解する鍵は、`pageTitles` がこの一般的な形式に適合することを確認することです。

```plaintext
Topic title - Category - Site title

```

トピックがカテゴリ化されていない場合、Category は欠落しています。また、カテゴリがないユーティリティページ（「最新トピック」、「新規トピック」など）も多数あります。（「最新 [カテゴリ] トピック」はカテゴリの一部とは見なしていませんが、含めた方が良いかもしれません。）最後に、ホームページでは `Site title - short site description` がページタイトルとして使用されます。しかし、これらのいずれにも関心はありません。したがって、私が使用している正規表現は次のとおりです。

```plaintext
str_extract(pageTitle,
            str_glue(".*? - (.*) - {sitename}"),
            group=1)

```

これをカテゴリでグループ化する関数にまとめると、次のようになります。

```plaintext
category_views <- function(data, sitename = "Meta Jon") {
  data %>% 
  mutate(category = str_extract(
                                pageTitle,
                                str_glue(".*? - (.*) - {sitename}"),
                                group=1
                                )) %>% 
  group_by(category) %>% 
  summarise(views = sum(screenPageViews)) %>% 
  arrange(desc(views)) #%>% head(20)
}

category_views(ga_this_year)

```

（明らかに、「Meta Jon」を自分のサイトの名前に変更してください。）

現時点では、タグに基づいて GA データを抽出する方法はわかりません。

---

_[View the full topic](https://meta.discourse.org/t/tracking-of-pageviews-and-unique-users-at-category-and-tag-level/113469)._
