Consulta del explorador de datos para listar los temas con el "tiempo de lectura estimado" más largo?

¡Hola a todos!

¿Es posible crear una consulta del explorador de datos que liste los “top X” temas según el “tiempo de lectura estimado”?

Me encantaría saber qué temas en nuestro Discourse requieren más tiempo para leer :smiley:

(Y fuera de tema, siguiendo este post de @simon, no logro añadir la etiqueta data-explorer a este post.)

Creo que el enfoque que sugerí en ese tema necesita mejorarse. Un problema es que solo los usuarios con nivel TL3 o superior pueden etiquetar publicaciones en Meta. Esto significa que la mayoría de los usuarios del sitio no podrían seguir mis instrucciones. El otro problema es que terminaremos con temas tanto sin respuesta como respondidos que tengan la etiqueta data-explorer. Eso no ayudará mucho a buscar consultas.

Disculpa la respuesta tardía. Me vi envuelto en la pregunta sobre cómo organizar las consultas del Explorador de Datos en el sitio. Usar la etiqueta data-explorer parece la solución ideal, pero los temas que contienen una consulta del Explorador de Datos deberán ser etiquetados por un usuario con estado TL3.

Creo que una consulta similar a la siguiente te proporcionará la información que buscas:

SELECT
topic_id,
category_id,
SUM(total_msecs_viewed) / 60000  AS estimated_minutes_read
FROM topic_users tu
JOIN topics t ON t.id = tu.topic_id
WHERE t.deleted_at IS NULL
AND t.archetype = 'regular'
GROUP BY tu.topic_id, category_id
ORDER BY estimated_minutes_read DESC
LIMIT 100

La instrucción LIMIT 100 en la última línea de la consulta podría ajustarse o eliminarse si deseas que se devuelvan más resultados.

Curiosamente, el tema con, con diferencia, más tiempo de lectura registrado en Meta es Setup DiscourseConnect - Official Single-Sign-On for Discourse (sso). Actualmente alcanza las 126048 minutos.

Hola @simon

¿Es correcta esa fórmula?

Si elijo cuatro o cinco al azar y comparo el resultado de la columna de tiempo de lectura estimado en esta consulta con el tiempo de lectura estimado en el tema mismo, obtengo dos números muy diferentes: :thinking:

¿Parece que esa consulta te muestra los temas que más tiempo se han leído, en lugar de los que más tiempo tardan en leerse?

Ah, eso podría explicar el problema.

¿Adivinaría que total_msecs_viewed es la columna incorrecta para usar aquí?

Puedes utilizar el tiempo promedio que los usuarios tardan en leer el tema.

En ese caso, simplemente cambia la función SUM por AVG; quedaría así:

SELECT
    topic_id,
    category_id,
    AVG(total_msecs_viewed) / 60000  AS estimated_minutes_read
FROM topic_users tu
JOIN topics t ON t.id = tu.topic_id
WHERE t.deleted_at IS NULL
AND t.archetype = 'regular'
GROUP BY tu.topic_id, category_id
ORDER BY estimated_minutes_read DESC
LIMIT 100

Gracias por la sugerencia @michebs, pero me temo que esa tampoco se acerca en absoluto.

Algunos ejemplos:

Lo que dice la consulta Lo que dice el tema
438 61
353 58
335 40
196 24

Pero eso significaría que, en promedio, una persona tarda 438 minutos en leer ese tema principal. Eso parece poco probable. Esto puede sonar tonto, pero ¿hubo suficientes ceros en 60,000?

Edición: ¿O quizás el promedio incluye todas las relecturas de un tema también? Así que una sola lectura sería de 61 minutos, pero en realidad los usuarios pasan un promedio de 438 minutos allí.

Aunque ahora tengo mucha curiosidad por saber cómo se calcula el Tiempo estimado de lectura para el Resumen, ya que idealmente te gustaría que coincidieran. Incluso reducirlos por un factor de diez solo daría una estimación aproximada. :thinking:

Sí, exactamente :blush:

Hice una pequeña búsqueda y encontré esto: "There are 84 replies with an estimated read time of 0 minutes." - #9 by nbianca.

Me cuesta descifrar estas cosas, pero parece que utiliza un cálculo basado en el número de palabras multiplicado por el tiempo (más un tiempo mínimo para cubrir publicaciones sin palabras, como imágenes).

También había esta otra que daba una pista sobre cómo podría llamarse el valor final: (aunque es antiguo, ¿quizás haya cambiado?)

No es de gran ayuda, seguro, pero pensé en compartirlo por si acaso. :slightly_smiling_face:

Espero que encuentres las respuestas que buscas. :crossed_fingers:

He vuelto a examinar esto y parece que (en su forma más simple) es el topic.word_count multiplicado por la configuración de administración de ‘tiempo de lectura por recuento de palabras’ (500 palabras/min por defecto). Así que creo que esta consulta produciría los “temas más largos de leer” principales X:

-- [params]
-- integer :limit = 10

SELECT t.id as topic_id, (t.word_count)/500+1 AS estimated_read_time
FROM topics t
WHERE t.word_count IS NOT NULL
AND t.archetype = 'regular'
ORDER BY t.word_count DESC 
LIMIT :limit

Aunque también existe la alternativa de ‘4 segundos mínimo’: (cantidad de publicaciones x 4)/60. Que está ahí para tener en cuenta los temas de fotos sin recuento de palabras. Así que funciona para ambos y muestra el que sea mayor. Pero aún no he descubierto cómo añadir eso. :slightly_smiling_face:

Desafortunadamente, no tengo un sitio lo suficientemente grande como para probarlo adecuadamente. Pareció funcionar en una pequeña muestra de prueba, pero puede que necesite ajustes. :slightly_smiling_face:

Editar: Añadí un parámetro ‘limit’ para que se acerque más a la especificación del OP. :+1:

¡Por Dios, creo que lo ha conseguido!

@JammyDodger Ejecuté tu consulta, aquí tienes algunas capturas de pantalla como referencia.

Primero, el “top 10”:

Y efectivamente:

:scream: :clap:t2:

Hay un par de números que no coinciden exactamente, ¡pero está realmente cerca!

Parece que definitivamente necesito averiguar cómo agregar la foto. :slightly_smiling_face: Todavía no me he rendido. :crossed_fingers:

Lo he intentado de nuevo. :slightly_smiling_face: No estoy 100% seguro de este, ya que no tengo una muestra lo suficientemente grande para probarlo, pero ha recogido mis temas de prueba. :+1:

-- [params]
-- integer :limit = 10

WITH read_time AS (
SELECT t.id as topic_id,
(t.word_count)/500+1 as word_count_time,
(t.posts_count*4)/60+1 as post_count_time
FROM topics t
WHERE t.word_count IS NOT NULL
AND t.archetype = 'regular'
AND t.deleted_at IS NULL
)

SELECT topic_id, CONCAT (CASE WHEN word_count_time > post_count_time THEN word_count_time ELSE post_count_time END, ' min') AS estimated_reading_time
FROM read_time
ORDER BY estimated_reading_time DESC
LIMIT :limit