Es posible obtener las vistas totales de una categoría desde el Explorador de Datos sumando las vistas de todos los temas de una categoría:
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
Obtener las vistas totales por etiqueta es similar:
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
También existe una tabla topic_views que podría, en teoría, usarse para dividir las vistas por usuario y fecha. Sin embargo, no he encontrado esa tabla particularmente útil, ya que las consultas agotan el tiempo de espera cuando los temas tienen muchas vistas. También muestra muchas menos vistas por tema porque, si lo entiendo correctamente, no cuenta las vistas anónimas. También creo que topic.views incluye no solo las vistas anónimas sino también el tráfico de bots. Es mucho más de lo que veo en GA.
Hablando de GA, tiene todos los datos que necesitas, pero no es fácil agruparlos por categoría o etiqueta. Lo mejor que puedo hacer es intentar analizar pageTitle para encontrar categorías. Lo estoy haciendo en R usando googleAnalyticsR. Sigue las instrucciones del manual para autorizar tu cuenta de Google y obtener las métricas que deseas. Asegúrate de incluir pageTitle como dimensión. Mis llamadas a la API se ven algo así:
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")
)
La clave para entender lo siguiente es ver que los pageTitles se ajustan a este formato general:
Título del tema - Categoría - Título del sitio
Si el tema no está categorizado, falta la Categoría. También hay un montón de páginas de utilidad (“Últimos temas”, “Nuevos temas”, etc.) que no tienen categorías. (No cuento “Últimos temas [categoría]” como parte de la categoría, aunque podría ser mejor incluirlos). Finalmente, la página de inicio usa Título del sitio - descripción corta del sitio para el título de la página. Sin embargo, no nos interesa ninguna de esas. Así que la expresión regular que estoy usando es:
str_extract(pageTitle,
str_glue(".*? - (.*) - {sitename}"),
group=1)
Poniéndolo todo junto en una función que agrupa por categoría, obtengo algo como esto:
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)
(Obviamente, cambia “Meta Jon” por el nombre de tu propio sitio).
Actualmente no sé cómo extraer datos de GA basados en etiquetas.