Este é um relatório SQL do Painel de Sentimento Geral.
Este relatório requer o plugin Discourse AI e a Análise de Sentimento habilitados.
Este relatório do painel compara o número de posts classificados como positivos ou negativos com a IA de “Sentimento”, durante um período especificado.
Ao alavancar a análise de sentimento, o relatório categoriza os posts como positivos ou negativos com base em um limite definido, que pode ser ajustado. Essa categorização é então usada para calcular o sentimento geral de cada dia dentro do intervalo de datas fornecido. Este relatório é particularmente útil para entender o humor geral ou o sentimento das discussões da comunidade durante períodos 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)
Explicação da Consulta SQL
A consulta SQL opera realizando as seguintes etapas:
- Definição de Parâmetros: Começa definindo três parâmetros:
:start_datee:end_datepara especificar o intervalo de datas para a análise.:thresholdpara definir a pontuação mínima para classificar sentimentos como positivos ou negativos. O valor padrão para o:thresholdé definido como 60 para corresponder ao relatório do painel.
- Seleção e Junção de Dados:
- A consulta seleciona dados da tabela
classification_results, que armazena os resultados da análise de sentimento em posts. - Ela une
classification_resultscom a tabelapostspara filtrar posts com base em sua data de criação e garante que a análise seja apenas para posts (cr.target_type = 'Post'). - Junções adicionais com as tabelas
topicsecategoriesgarantem que a análise seja limitada a posts regulares em categorias específicas.
- A consulta seleciona dados da tabela
- Classificação de Sentimento:
- Para cada post, ele verifica a pontuação de sentimento da tabela
classification_results. Se a pontuação de sentimento positivo for maior que o limite, ele conta o post como positivo. Da mesma forma, ele conta um post como negativo se sua pontuação de sentimento negativo exceder o limite.
- Para cada post, ele verifica a pontuação de sentimento da tabela
- Agregação:
- A consulta então agrupa os resultados por dia, com base no timestamp
created_atde cada post. Para cada dia, ela calcula:- O número total de posts positivos.
- O número total de posts negativos.
- O sentimento geral, que é a diferença entre o número total de posts positivos e negativos.
- A consulta então agrupa os resultados por dia, com base no timestamp
Exemplo de Resultados
| date | 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 |