Comment compter la fréquence des valeurs dans une table de valeurs ? Quelle est la fréquence d’apparition des mots dans un texte ?
Comment exclure une liste de mots du comptage ?
Voici une méthode pour compter la fréquence de mots-clés ou valeurs dans une liste de valeurs, table de données, ou texte, tout en permettant d’exclure certains mots de l’analyse.
Pour cela, j’ai utilisé Excel et PowerQuery pour fractionner une liste de valeurs en lignes de 1 seul mot, puis j’ai regroupé les mots identiques et compté le nombre d’occurrences.
Regarder la vidéo
Requête PowerQuery FrequenceMotsCles
La requête PowerQuery ‘FrequenceMotsCles’ permet de fractionner toutes les données en lignes de 1 seul mot. Puis elle regroupe toutes les occurrences et compte le nombre de lignes de chaque mot :
// FrequenceMotsCles let Source = Excel.CurrentWorkbook(){[Name=txtSource]}[Content], TypeTexte = Table.TransformColumnTypes(Source,{{"Valeur", type text}}), FiltreVides = Table.SelectRows(TypeTexte, each [Valeur] <> null and [Valeur] <> ""), SplitEspace = Table.ExpandListColumn(Table.TransformColumns(FiltreVides, {{"Valeur", Splitter.SplitTextByDelimiter(" ", QuoteStyle.None), let itemType = (type nullable text) meta [Serialized.Text = true] in type {itemType}}}), "Valeur"), SplitPoint = Table.ExpandListColumn(Table.TransformColumns(SplitEspace, {{"Valeur", Splitter.SplitTextByDelimiter(".", QuoteStyle.Csv), let itemType = (type nullable text) meta [Serialized.Text = true] in type {itemType}}}), "Valeur"), TexteMinuscules = Table.TransformColumns(SplitPoint,{{"Valeur", Text.Lower, type text}}), FiltresVide2 = Table.SelectRows(TexteMinuscules, each [Valeur] <> null and [Valeur] <> ""), Grouper = Table.Group(FiltresVide2, {"Valeur"}, {{"Nombre", each Table.RowCount(_), Int64.Type}}), JoinExclure = Table.NestedJoin(Grouper, {"Valeur"}, TableExclusion, {"Mots à exclure"}, "TableExclusion", JoinKind.LeftAnti), SupprCol = Table.RemoveColumns(JoinExclure,{"TableExclusion"}), Trier = Table.Sort(SupprCol,{{"Nombre", Order.Descending}}) in Trier
Charger les données dans PowerQuery
Mes données sources sont une liste de réponses à un sondage, et une liste de mots à exclure, que j’ai chargé dans PowerQuery (via le chargement à partir d’une table Excel).
Le but est de récupérer tous les mots dans chaque ligne de la liste de gauche ci-dessous, puis d’en exclure les mots dans la liste de droite :
Extraire chaque mot de chaque ligne dans une liste
Nous utilisons pour cette étape la fonction Fractionner la colonne avec pour délimiteur un espace.
La particularité est qu’au lieu de fractionner les données en colonnes, comme c’est le cas par défaut, nous allons dans les options avancées sélectionner le fractionnement en lignes.
Ne pas oublier de cocher également “Chaque occurrence du délimiteur” :
Le résultat est une colonne avec un seul mot par ligne :
Utiliser ‘Regrouper par’ pour compter les occurrences
Avant cela, nous allons transformer le texte en minuscules pour ne pas à avoir de mots en doublon à cause de la présence de majuscules.
TexteMinuscules = Table.TransformColumns(SplitPoint,{{"Valeur", Text.Lower, type text}}),
Puis on utilise la fonction Regrouper par :
Les options par défaut ci-dessous sont conservées :
- On sélectionne le champs à regrouper “Valeur”
- On regroupe avec l’opération “Compter les lignes”, c’est cette opération qui permet de compter le nombre d’occurrences de chaque valeur dans la liste
On obtient le résultat souhaité suivant :
Exclure une liste de mots
Il est nécessaire de supprimer certains mots comme les particules (le, la, de, etc.) qui viendraient sinon perturber l’analyse.
Par la suite, on pourra affiner les mots à exclure en complétant la liste dans Excel.
Nous avons au préalable chargé la liste des mots à exclure TableExclusion dans Power Query :
Maintenant nous pouvons revenir dans la requête FrequenceMotsCles, pour réaliser une jointure de tables entre la requête principale et la requête de mots à exclure.
Pour cela, on utilise la fonction Combiner -> Fusionner des requêtes :
On va configurer la jointure de table comme ceci :
- Sélectionner la colonne Valeur de la table principale
- Sélectionner la table TableExclusion, et la colonne Mots à exclure
- Sélectionner le type de jointure Gauche opposée comme dans l’image ci-dessous
Différents types de jointure de table dans PowerQuery sont disponibles. La jointure Gauche opposée correspondant dans notre cas où l’on souhaite uniquement conserver les valeurs de la table de gauche (notre table principale de valeurs) qui ne sont pas présente dans la table de droite (notre table d’exclusion) :
Une fois la jointure faite, on peut contrôler que les mots à exclure ont bien disparu :
Chargement de la table dans Excel et résultat final
Enfin, on peut charger la table dans Excel en cliquant sur Fermer et Charger du menu PowerQuery.
On peut visualiser le résultat par exemple dans un graphique en Histogramme comme ci-dessous, et afficher le Top 10 des mots-clés ou valeurs apparaissant dans nos données.
👇 Téléchargez le fichier Excel en exemple pour récupérer la requête PowerQuery !
📥Téléchargement
Téléchargez le classeur Excel pour ce tutoriel. Seuls votre adresse e-mail et nom vous seront demandés dans la prochaine étape. Vous recevrez le lien de téléchargement par e-mail.
Compter la fréquence de mots-clés ou valeurs dans des données
Envoyer le lien de téléchargement à :
Maîtrisez l’essentiel des formules Excel
Enfin, transformez-vous en Expert d’Excel. Devenez un membre essentiel de votre équipe qui obtient des résultats rapidement. Obtenez une sécurité de l’emploi et une mobilité ascendante imbattable. Tout ce qu’il vous faut, c’est construire à partir de vos connaissances actuelles d’Excel, étape par étape. Pour cela, rejoignez le programme 👏👏 :
🥇 FORMULES EXCEL ULTIMES (2 MODULES OFFERTS)
Merci beaucoup pour touts ces renseignements.