TP9
Table des matières
• Lecture des données
• Expressions régulières
• Expression régulière en R
Lecture des données
email_df <- read.csv("email-list.csv")
email_df
Notre simple ensemble de données contient donc une liste de noms et une liste de leurs emails correspondants. Disons que
nous voulons simplement compter la fréquence des domaines de courrier électronique. Mais plusieurs problèmes se posent
avant même que nous puissions essayer. Si nous essayons de compter simplement la colonne des courriels, nous ne
parviendrons pas à obtenir ce que nous voulons puisque chaque email est unique. Et si nous divisons la chaîne à l'adresse "@",
nous n'obtiendrons toujours pas ce que nous voulons, car même les emails ayant les mêmes domaines peuvent avoir des
extensions régionales différentes. Alors comment pouvons-nous facilement et rapidement extraire les données nécessaires ?
Publicité
Expressions régulières
Les expressions régulières sont des expressions génériques qui sont utilisées pour faire correspondre des motifs dans les
chaînes de caractères et le texte. Une façon d'illustrer cela est d'utiliser une simple expression qui peut correspondre à une
chaîne de courrier électronique. Mais avant de l'écrire, voyons comment un courrier électronique est structuré :
$[[email protected]](mailto://[email protected]?cm_mmc=Email_Newsletter-_-Developer_Ed%2BTech-_-
WW_WW-_-SkillsNetwork-Courses-IBMDeveloperSkillsNetwork-RP0101EN-SkillsNetwork-
20900564&cm_mmca1=000026UJ&cm_mmca2=10006555&cm_mmca3=M12345678&cvosrc=email.Newsletter.M12345
678&cvo_campaign=000026UJ&cm_mmc=Email_Newsletter-_-Developer_Ed%2BTech-_-WW_WW-_-
SkillsNetwork-Courses-IBMDeveloperSkillsNetwork-RP0101EN-SkillsNetwork-
20900564&cm_mmca1=000026UJ&cm_mmca2=10006555&cm_mmca3=M12345678&cvosrc=email.Newsletter.M12345
678&cvo_campaign=000026UJ&cm_mmc=Email_Newsletter-_-Developer_Ed%2BTech-_-WW_WW-_-
SkillsNetwork-Courses-IBMDeveloperSkillsNetwork-RP0101EN-SkillsNetwork-
20900564&cm_mmca1=000026UJ&cm_mmca2=10006555&cm_mmca3=M12345678&cvosrc=email.Newsletter.M12345
678&cvo_campaign=000026UJ)$
Publicité
Ainsi, un email est composé d'une chaîne de caractères suivie d'un symbole "@" et d'une autre chaîne de caractères. Dans les
expressions régulières R, nous pouvons l'exprimer ainsi :
$.+@.+$
Où :
• Le symbole '." correspond à n'importe quel caractère.
• Le symbole '+' répète le symbole précédent une ou plusieurs fois. Ainsi, le symbole ".+" correspondra à n'importe
quelle chaîne de caractères.
• Le symbole '@' correspond uniquement au caractère '@'.
Maintenant, pour notre problème, qui consiste à extraire le domaine d'un courriel en excluant le code url régional, nous avons
besoin d'une expression qui corresponde spécifiquement à ce que nous voulons :
$@.+\\.$
Où le symbole '\.' correspond spécifiquement au caractère '.'
Expressions régulières en R
Examinons maintenant quelques fonctions R qui fonctionnent avec des fonctions R.
Publicité
La fonction grep ci-dessous prend en compte une expression régulière et une liste de chaînes de caractères à rechercher et
renvoie les positions de l'endroit où elles apparaissent dans la liste.
grep("@.+", c("[email protected]" , "not an email", "[email protected]"))
grep possède également un paramètre supplémentaire appelé "value" qui modifie la sortie pour afficher les chaînes de
caractères au lieu des positions de la liste.
grep("@.+", c("[email protected]", "not an email", "[email protected]"), value=TRUE)
La fonction suivante, "gsub", est une fonction de substitution. Elle prend en compte une expression régulière, la chaîne que
vous voulez échanger avec les correspondances et une liste de chaînes avec lesquelles vous voulez effectuer l'échange. La
cellule de code ci-dessous met à jour les e-mails valides avec un nouveau domaine :
gsub("@.+", "@newdomain.com", c("[email protected]", "not an email",
Les fonctions ci-dessous, "regexpr" et "regmatches", fonctionnent conjointement pour extraire les correspondances
trouvées par une expression régulière spécifiée dans "regexpr".
matches <- regexpr("@.*", c("[email protected]", "not an email", "[email protected]"))
Publicité
regmatches(c("[email protected]", "not an email", "[email protected]"), matches)
Cette fonction est en fait parfaite pour notre problème puisque nous avons simplement besoin d'extraire les informations
spécifiques que nous voulons. Utilisons-la donc avec l'expression régulière que nous avons définie ci-dessus et stockons les
chaînes extraites dans une nouvelle colonne de notre dataframe.
matches <- regexpr("@.*\\.", email_df[,'Email'])
email_df[,'Domain'] = regmatches(email_df[,'Email'], matches)
Et voici le Dataframe qui en résulte :
email_df
Maintenant, nous pouvons enfin construire le tableau des fréquences pour les domaines de notre dataframe !
table(email_df[,'Domain'])