Ceci est une version SQL du rapport de tableau de bord pour le sentiment général.
Ce rapport nécessite le plugin Discourse AI et l’activation de l’Analyse des sentiments.
Ce rapport de tableau de bord compare le nombre de publications classées comme positives ou négatives avec l’IA « Sentiment », sur une période spécifiée.
En tirant parti de l’analyse des sentiments, le rapport classe les publications comme positives ou négatives en fonction d’un seuil défini, qui peut être ajusté. Cette classification est ensuite utilisée pour calculer le sentiment général de chaque jour dans la plage de dates donnée. Ce rapport est particulièrement utile pour comprendre l’humeur générale ou le sentiment des discussions de la communauté pendant des périodes spécifiques.
-- [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)
Explication de la requête SQL
La requête SQL fonctionne en effectuant les étapes suivantes :
- Définition des paramètres : Elle commence par définir trois paramètres :
:start_dateet:end_datepour spécifier la plage de dates de l’analyse.:thresholdpour définir le score minimum de classification des sentiments comme positifs ou négatifs. La valeur par défaut du:thresholdest fixée à 60 pour correspondre au rapport de tableau de bord.
- Sélection et jointure des données :
- La requête sélectionne des données de la table
classification_results, qui stocke les résultats de l’analyse des sentiments sur les publications. - Elle joint
classification_resultsavec la tablepostspour filtrer les publications en fonction de leur date de création et s’assure que l’analyse ne concerne que les publications (cr.target_type = 'Post'). - Des jointures supplémentaires avec les tables
topicsetcategoriesgarantissent que l’analyse est limitée aux publications régulières dans des catégories spécifiques.
- La requête sélectionne des données de la table
- Classification des sentiments :
- Pour chaque publication, elle vérifie le score de sentiment de la table
classification_results. Si le score de sentiment positif est supérieur au seuil, elle compte la publication comme positive. De même, elle compte une publication comme négative si son score de sentiment négatif dépasse le seuil.
- Pour chaque publication, elle vérifie le score de sentiment de la table
- Agrégation :
- La requête regroupe ensuite les résultats par jour, en se basant sur l’horodatage
created_atde chaque publication. Pour chaque jour, elle calcule :- Le nombre total de publications positives.
- Le nombre total de publications négatives.
- Le sentiment général, qui est la différence entre le nombre total de publications positives et négatives.
- La requête regroupe ensuite les résultats par jour, en se basant sur l’horodatage
Exemple de résultats
| 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 |