Dies ist eine SQL-Version des Dashboard-Berichts für die Gesamtstimmung.
Für diesen Bericht ist das Plugin Discourse AI und die Aktivierung von Sentiment Analysis erforderlich.
Dieser Dashboard-Bericht vergleicht die Anzahl der als positiv oder negativ eingestuften Beiträge mit der “Sentiment”-KI über einen bestimmten Zeitraum.
Durch die Nutzung der Sentiment-Analyse kategorisiert der Bericht Beiträge basierend auf einem definierten Schwellenwert, der angepasst werden kann, als positiv oder negativ. Diese Kategorisierung wird dann verwendet, um die Gesamtstimmung für jeden Tag innerhalb des angegebenen Datumsbereichs zu berechnen. Dieser Bericht ist besonders nützlich, um die allgemeine Stimmung oder das Gefühl der Community-Diskussionen zu bestimmten Zeiten zu verstehen.
-- [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)
Erklärung der SQL-Abfrage
Die SQL-Abfrage arbeitet, indem sie die folgenden Schritte ausführt:
- Parameterdefinition: Sie beginnt mit der Definition von drei Parametern:
:start_dateund:end_datezur Angabe des Datumsbereichs für die Analyse.:thresholdzur Festlegung des Mindestwerts für die Klassifizierung von Stimmungen als positiv oder negativ. Der Standardwert für den:thresholdist auf 60 gesetzt, um dem Dashboard-Bericht zu entsprechen.
- Datenauswahl und Verknüpfung:
- Die Abfrage wählt Daten aus der Tabelle
classification_resultsaus, die die Ergebnisse der Sentiment-Analyse von Beiträgen speichert. - Sie verknüpft
classification_resultsmit der Tabelleposts, um Beiträge basierend auf ihrem Erstellungsdatum zu filtern und stellt sicher, dass die Analyse nur für Beiträge durchgeführt wird (cr.target_type = 'Post'). - Weitere Verknüpfungen mit den Tabellen
topicsundcategoriesstellen sicher, dass die Analyse auf reguläre Beiträge in bestimmten Kategorien beschränkt ist.
- Die Abfrage wählt Daten aus der Tabelle
- Sentiment-Klassifizierung:
- Für jeden Beitrag prüft sie den Sentiment-Score aus der Tabelle
classification_results. Wenn der Score für positive Stimmung den Schwellenwert überschreitet, zählt sie den Beitrag als positiv. Ebenso zählt sie einen Beitrag als negativ, wenn sein Score für negative Stimmung den Schwellenwert überschreitet.
- Für jeden Beitrag prüft sie den Sentiment-Score aus der Tabelle
- Aggregation:
- Die Abfrage gruppiert dann die Ergebnisse nach Tag, basierend auf dem
created_at-Zeitstempel jedes Beitrags. Für jeden Tag berechnet sie:- Die Gesamtzahl der positiven Beiträge.
- Die Gesamtzahl der negativen Beiträge.
- Die Gesamtstimmung, die die Differenz zwischen der Gesamtzahl der positiven und negativen Beiträge ist.
- Die Abfrage gruppiert dann die Ergebnisse nach Tag, basierend auf dem
Beispielergebnisse
| 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 |