Este es un informe de panel SQL para el sentimiento general.
Este informe requiere el plugin Discourse AI y Análisis de Sentimiento habilitados.
Este informe de panel compara el número de publicaciones clasificadas como positivas o negativas con la IA de “Sentimiento”, durante un período específico.
Al aprovechar el análisis de sentimiento, el informe clasifica las publicaciones como positivas o negativas según un umbral definido, que se puede ajustar. Esta categorización se utiliza luego para calcular el sentimiento general de cada día dentro del rango de fechas dado. Este informe es particularmente útil para comprender el estado de ánimo o el sentimiento general de las discusiones de la comunidad durante momentos específicos.
-- [params]
-- date :start_date = 2024-01-13
-- date :end_date = 2024-02-14
-- double :threshold = 0.60
SELECT
DATE_TRUNC('day', p.created_at)::DATE AS date,
COUNT(CASE WHEN (classification->>'positive')::float > :threshold THEN 1 ELSE NULL END) AS positive_sentiment_posts,
COUNT(CASE WHEN (classification->>'negative')::float > :threshold THEN 1 ELSE NULL END) AS negative_sentiment_posts,
COUNT(CASE WHEN (classification->>'positive')::float > :threshold THEN 1 ELSE NULL END) - COUNT(CASE WHEN (classification->>'negative')::float > :threshold THEN 1 ELSE NULL END) AS overall_sentiment
FROM
classification_results AS cr
INNER JOIN posts p ON p.id = cr.target_id AND cr.target_type = 'Post'
INNER JOIN topics t ON t.id = p.topic_id
INNER JOIN categories c ON c.id = t.category_id
WHERE
t.archetype = 'regular' AND
p.user_id > 0 AND
cr.model_used = 'cardiffnlp/twitter-roberta-base-sentiment-latest' AND
(p.created_at > :start_date AND p.created_at < :end_date)
GROUP BY
DATE_TRUNC('day', p.created_at)
Explicación de la consulta SQL
La consulta SQL opera realizando los siguientes pasos:
- Definición de parámetros: Comienza definiendo tres parámetros:
:start_datey:end_datepara especificar el rango de fechas para el análisis.:thresholdpara establecer la puntuación mínima para clasificar los sentimientos como positivos o negativos. El valor predeterminado para:thresholdse establece en 60 para que coincida con el informe del panel.
- Selección y unión de datos:
- La consulta selecciona datos de la tabla
classification_results, que almacena los resultados del análisis de sentimiento en las publicaciones. - Une
classification_resultscon la tablapostspara filtrar las publicaciones según su fecha de creación y asegura que el análisis sea solo para publicaciones (cr.target_type = 'Post'). - Uniones adicionales con las tablas
topicsycategoriesaseguran que el análisis se limite a publicaciones regulares en categorías específicas.
- La consulta selecciona datos de la tabla
- Clasificación de sentimiento:
- Para cada publicación, verifica la puntuación de sentimiento de la tabla
classification_results. Si la puntuación de sentimiento positivo es mayor que el umbral, cuenta la publicación como positiva. De manera similar, cuenta una publicación como negativa si su puntuación de sentimiento negativo excede el umbral.
- Para cada publicación, verifica la puntuación de sentimiento de la tabla
- Agregación:
- La consulta luego agrupa los resultados por día, basándose en la marca de tiempo
created_atde cada publicación. Para cada día, calcula:- El número total de publicaciones positivas.
- El número total de publicaciones negativas.
- El sentimiento general, que es la diferencia entre el número total de publicaciones positivas y negativas.
- La consulta luego agrupa los resultados por día, basándose en la marca de tiempo
Resultados de ejemplo
| fecha | positive_sentiment_posts | negative_sentiment_posts | overall_sentiment |
|---|---|---|---|
| 2024-01-13 | 10 | 21 | -11 |
| 2024-01-14 | 11 | 20 | -9 |
| 2024-01-15 | 23 | 7 | 16 |
| 2024-01-16 | 27 | 10 | 17 |
| 2024-01-17 | 47 | 22 | 25 |