Questo è una versione SQL del report della dashboard per il sentiment generale.
Questo report richiede il plugin Discourse AI e Analisi del Sentiment abilitati.
Questo report della dashboard confronta il numero di post classificati come positivi o negativi con l’IA “Sentiment”, in un periodo di tempo specificato.
Sfruttando l’analisi del sentiment, il report categorizza i post come positivi o negativi in base a una soglia definita, che può essere regolata. Questa categorizzazione viene quindi utilizzata per calcolare il sentiment generale per ogni giorno all’interno dell’intervallo di date specificato. Questo report è particolarmente utile per comprendere l’umore generale o il sentiment delle discussioni della community durante periodi specifici.
-- [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)
Spiegazione della Query SQL
La query SQL opera eseguendo i seguenti passaggi:
- Definizione dei Parametri: Inizia definendo tre parametri:
:start_datee:end_dateper specificare l’intervallo di date per l’analisi.:thresholdper impostare il punteggio minimo per classificare i sentimenti come positivi o negativi. Il valore predefinito per:thresholdè impostato a 60 per corrispondere al report della dashboard.
- Selezione e Join dei Dati:
- La query seleziona i dati dalla tabella
classification_results, che memorizza i risultati dell’analisi del sentiment sui post. - Esegue il join di
classification_resultscon la tabellapostsper filtrare i post in base alla loro data di creazione e garantisce che l’analisi sia solo per i post (cr.target_type = 'Post'). - Ulteriori join con le tabelle
topicsecategoriesgarantiscono che l’analisi sia limitata ai post regolari in categorie specifiche.
- La query seleziona i dati dalla tabella
- Classificazione del Sentiment:
- Per ogni post, controlla il punteggio del sentiment dalla tabella
classification_results. Se il punteggio per il sentiment positivo è maggiore della soglia, conta il post come positivo. Allo stesso modo, conta un post come negativo se il suo punteggio di sentiment negativo supera la soglia.
- Per ogni post, controlla il punteggio del sentiment dalla tabella
- Aggregazione:
- La query raggruppa quindi i risultati per giorno, in base al timestamp
created_atdi ciascun post. Per ogni giorno, calcola:- Il numero totale di post positivi.
- Il numero totale di post negativi.
- Il sentiment generale, che è la differenza tra il numero totale di post positivi e negativi.
- La query raggruppa quindi i risultati per giorno, in base al timestamp
Risultati di Esempio
| 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 |