CommencerCommencez gratuitement

Nuage comparatif mis à l'échelle

Vous vous souvenez de la « gonflette des notes » sur les scores de polarité des avis de locations ? Parfois, une autre manière de faire émerger un insight consiste à recentrer les scores autour de 0, puis à créer les sous-ensembles du corpus. Cela signifie que certains commentaires auparavant positifs peuvent basculer dans la partie négative, et inversement, puisque la moyenne est ramenée à 0. Cet exercice vous aidera à mettre les scores à l'échelle, puis à re-tracer la comparison.cloud(). Supprimer cette « gonflette » peut révéler des informations supplémentaires.

Précédemment, vous avez appliqué polarity() à bos_reviews$comments et créé une comparison.cloud(). Dans cet exercice, vous allez appliquer scale() au résultat avant de créer la comparison.cloud(). Voyez si cela met en évidence autre chose sur le visuel !

Comme il s'agit surtout d'un exercice de révision, une grande partie du code est déjà là : complétez simplement avec les bons objets et paramètres !

Cet exercice fait partie du cours

<cours>Analyse de sentiments en R</cours>
Voir le cours

Instructions de l’exercice

  • Passez en revue une section de bos_pol$all (préchargé) en indexant [1:6,1:3].
  • Ajoutez une nouvelle colonne nommée scaled_polarity en appliquant scale() à la colonne de score de polarité bos_pol$all$polarity.
  • Pour les commentaires positifs, utilisez subset() lorsque la nouvelle colonne bos_reviews$scaled_polarity est strictement supérieure (>) à zéro.
  • Pour les commentaires négatifs, utilisez subset() lorsque la nouvelle colonne bos_reviews$scaled_polarity est strictement inférieure (<) à zéro.
  • Créez pos_terms à l'aide de paste() sur pos_comments.
  • Créez ensuite neg_terms avec paste() sur neg_comments.
  • Regroupez les documents concaténés, pos_terms et neg_terms, dans un corpus unique appelé all_terms.
  • Suivez le flux de travail habituel de tm en imbriquant VectorSource() dans VCorpus() appliqué à all_terms.
  • Créez la TermDocumentMatrix() en utilisant l'objet all_corpus. Notez qu'il s'agit d'une TDM pondérée TfIdf avec des fonctions de nettoyage de base.
  • Transformez all_tdm en all_tdm_m avec as.matrix(). Puis renommez les colonnes dans le code existant en "positive" et "negative".
  • Enfin ! appliquez comparison.cloud() à la matrice all_tdm_m. Observez les nouveaux mots négatifs les plus fréquents. Peut-être révélerez-vous un insight encore insoupçonné !

Exercice interactif pratique

Essayez cet exercice en complétant ce code d’exemple.

# Review
___

# Scale/center & append
bos_reviews$___ <- scale(___)

# Subset positive comments
pos_comments <- subset(bos_reviews$comments, ___)

# Subset negative comments
neg_comments <- subset(bos_reviews$comments, ___)

# Paste and collapse the positive comments
pos_terms <- paste(___, collapse = " ")

# Paste and collapse the negative comments
neg_terms <- paste(___, collapse = " ")

# Organize
all_terms<- c(___, ___)

# VCorpus
all_corpus <- ___(VectorSource(___))

# TDM
all_tdm <- TermDocumentMatrix(
  ___, 
  control = list(
    weighting = weightTfIdf, 
    removePunctuation = TRUE, 
    stopwords = stopwords(kind = "en")
  )
)

# Column names
___ <- as.matrix(___)
colnames(all_tdm_m) <- c("___", "___")

# Comparison cloud
comparison.cloud(
  ___, 
  max.words = 100,
  colors = c("darkgreen", "darkred")
)
Modifier et exécuter le code