Aller au contenu principal

Analyse de Sentiment sur X

Comprendre ce que votre audience pense vraiment

L’analyse de sentiment transforme des milliers de posts en une lecture claire de la perception de votre marque, de vos concurrents ou de votre secteur. Avec X Search et les capacités de raisonnement de Grok, vous pouvez dépasser la simple classification positif/négatif pour comprendre les nuances émotionnelles, les frustrations latentes et les signaux d’alerte.

5
niveaux de sentiment
API
temps réel
JSON
sortie structurée
Multi
dimensions analysées

Les dimensions du sentiment en marketing

L’analyse de sentiment marketing va au-delà du binaire positif/négatif. Voici les dimensions pertinentes :

Échelle de sentiment à 5 niveaux

  1. Très positif : enthousiasme, recommandation active, amour de marque
  2. Positif : satisfaction, approbation, intérêt
  3. Neutre : mention factuelle, partage d’information
  4. Négatif : déception, critique, frustration
  5. Très négatif : colère, appel au boycott, crise

Dimensions complémentaires

  • Intention d’achat : le post indique-t-il une intention d’achat ou de désabonnement ?
  • Influence : le post vient-il d’un compte influent ou d’un consommateur lambda ?
  • Viralité : le post a-t-il un potentiel de propagation ?
  • Urgence : le signal nécessite-t-il une réaction rapide ?

Analyser le sentiment avec X Search et Grok

Analyse de sentiment sur votre marque

def analyser_sentiment_marque(marque, periode_jours=7):
    from datetime import datetime, timedelta

    today = datetime.now().strftime("%Y-%m-%d")
    start = (datetime.now() - timedelta(days=periode_jours)).strftime("%Y-%m-%d")

    response = client.responses.create(
        model="grok-4.20-reasoning",
        input=f"""Analyse le sentiment des conversations sur X
        à propos de {marque} entre le {start} et le {today}.

        Pour chaque thème de conversation identifié, fournis :
        1. Le thème (ex: "service client", "qualité produit")
        2. Le sentiment dominant (échelle 1-5)
        3. Le volume estimé de la conversation
        4. Les verbatims les plus représentatifs
        5. Les comptes les plus influents dans la discussion
        6. L'évolution du sentiment sur la période

        Synthèse finale :
        - Score de sentiment global (1-5)
        - Top 3 des points positifs
        - Top 3 des points négatifs
        - Alertes éventuelles""",
        tools=[{
            "type": "x_search",
            "from_date": start,
            "to_date": today
        }]
    )
    return response.output_text

Analyse comparative du sentiment

Comparez la perception de votre marque avec celle de vos concurrents :

def sentiment_comparatif(marques, periode_jours=30):
    from datetime import datetime, timedelta

    today = datetime.now().strftime("%Y-%m-%d")
    start = (datetime.now() - timedelta(days=periode_jours)).strftime("%Y-%m-%d")

    response = client.responses.create(
        model="grok-4.20-reasoning",
        input=f"""Compare le sentiment sur X pour ces marques :
        {', '.join(marques)}

        Période : {start} à {today}

        Pour chaque marque, évalue :
        - Score de sentiment global (1-5, avec décimale)
        - Thèmes positifs dominants
        - Thèmes négatifs dominants
        - Forces perçues par le public
        - Faiblesses perçues par le public

        Tableau comparatif final avec classement par sentiment.
        Identifie les opportunités de positionnement pour la
        première marque de la liste.""",
        tools=[{"type": "x_search", "from_date": start, "to_date": today}]
    )
    return response.output_text

Obtenir des résultats structurés en JSON

Pour intégrer l’analyse de sentiment dans un pipeline de données, demandez une sortie JSON :

def sentiment_structure(marque, periode_jours=7):
    from datetime import datetime, timedelta

    today = datetime.now().strftime("%Y-%m-%d")
    start = (datetime.now() - timedelta(days=periode_jours)).strftime("%Y-%m-%d")

    response = client.responses.create(
        model="grok-4.20-reasoning",
        input=f"""Analyse le sentiment sur X à propos de {marque}.
        Période : {start} à {today}.

        Réponds UNIQUEMENT en JSON valide avec cette structure :
        {{
          "marque": "{marque}",
          "periode": "{start} - {today}",
          "score_global": 3.7,
          "distribution": {{
            "tres_positif": 15,
            "positif": 35,
            "neutre": 30,
            "negatif": 15,
            "tres_negatif": 5
          }},
          "themes": [
            {{
              "nom": "service client",
              "score": 2.1,
              "volume": "élevé",
              "tendance": "stable"
            }}
          ],
          "alertes": ["description alerte si applicable"],
          "recommandations": ["action recommandée"]
        }}""",
        tools=[{"type": "x_search", "from_date": start, "to_date": today}]
    )
    return response.output_text

Suivi de l’évolution du sentiment dans le temps

L’analyse ponctuelle est utile, mais c’est le suivi dans le temps qui révèle les tendances. Comparez les résultats semaine après semaine :

def evolution_sentiment(marque, nb_semaines=4):
    from datetime import datetime, timedelta
    import json

    historique = []
    for i in range(nb_semaines, 0, -1):
        end = (datetime.now() - timedelta(weeks=i-1)).strftime("%Y-%m-%d")
        start = (datetime.now() - timedelta(weeks=i)).strftime("%Y-%m-%d")

        response = client.responses.create(
            model="grok-4.20-reasoning",
            input=f"""Score de sentiment sur X pour {marque}
            du {start} au {end}.
            Réponds avec un JSON : {{"semaine": "{start}",
            "score": X.X, "volume": N, "theme_dominant": "..."}}""",
            tools=[{
                "type": "x_search",
                "from_date": start,
                "to_date": end
            }]
        )
        historique.append(response.output_text)

    return historique

Détecter les crises de réputation

L’analyse de sentiment est votre premier système d’alerte en cas de crise :

def detecter_crise(marque, seuil_negatif=40):
    resultat = sentiment_structure(marque, periode_jours=1)

    # Parser le JSON
    import json
    data = json.loads(resultat)

    pct_negatif = (data["distribution"]["negatif"] +
                   data["distribution"]["tres_negatif"])

    if pct_negatif > seuil_negatif:
        return {
            "alerte": True,
            "niveau": "CRITIQUE" if pct_negatif > 60 else "IMPORTANT",
            "score": data["score_global"],
            "themes_negatifs": [t for t in data["themes"] if t["score"] < 2.5],
            "recommandation": "Réunion de crise recommandée"
        }
    return {"alerte": False, "score": data["score_global"]}

Points clés à retenir

  • L’analyse de sentiment dépasse le positif/négatif : évaluez l’intention, l’influence et l’urgence
  • Utilisez une échelle à 5 niveaux pour capturer les nuances
  • Demandez des sorties JSON structurées pour alimenter vos dashboards
  • Suivez l’évolution du sentiment dans le temps, pas seulement les snapshots ponctuels
  • Comparez systématiquement votre sentiment avec celui de vos concurrents
  • Configurez des seuils d’alerte pour détecter les crises de réputation dès leur émergence