
Manipuler les chaînes de caractères sur R en Data Science
Lorsque nous analysons des données en Data Science, nous ne travaillons pas uniquement avec des chiffres. Nous nous retrouvons souvent à traiter des données sous forme de chaînes de caractères. Comme défini par Per Christensson (2006), une chaîne de caractères est un type de données utilisé en programmation, qui est utilisé pour représenter du texte plutôt que des nombres. Il est composé d’un ensemble de caractères pouvant également contenir des espaces, des chiffres et de nombreux symboles utilisés dans le travail quotidien (tirets, symboles monétaires, etc.).
Par conséquent, il semble évident que si nous voulons effectuer des analyses de données efficaces, il est nécessaire de savoir jouer avec les chaînes de caractères. Pour explorer cela, nous décidons d’utiliser R (https://www.r-project.org/). En effet, R est l’outil leader en Data Science. R est bien plus qu’un outil statistique, c’est un langage de programmation : nous pouvons créer nos propres objets, fonctions et packages.
Même si certains d’entre nous peuvent affirmer qu’il est peu intuitif en tant que langage de programmation (à la différence de Java ou Python, par exemple), R peut se révéler très précieux si nous savons comment l’utiliser.
Surtout, R concentre de nombreux avantages qui méritent toujours d’être rappelés. Facile d’installation, il est cross-platform : vous pouvez donc l’utiliser sur n’importe quel système d’exploitation. De plus, R est gratuit : vous pouvez l’utiliser dans n’importe quelle entreprise sans avoir à acheter une license. Il est également open-source : n’importe qui peut examiner le code source et potentiellement corriger des bugs et / ou ajouter des fonctionnalités.
Avec R, le principal type de chaînes de caractères à utiliser prend la forme de « strings ».
Dans cet article, nous décrirons certains des outils les plus utiles en Data Science que nous utilisons de manière régulière pour gérer et traiter les chaînes de caractères. À titre d’exemple pratique, nous utiliserons la base de données «state» qui accompagne R par défaut (et qui représente les ensembles de données relatifs aux 50 États des États-Unis d’Amérique).
is.character() and as.character()
Avant de commencer à travailler sur des strings, il est recommandé de vérifier si nous allons vraiment travailler avec des strings. Nous pouvons le faire avec la fonction «is.character()».
Si, par exemple, nous devons convertir «state.area» (vecteur numérique des zones d’état – en miles carrés) en strings, nous pouvons facilement appliquer la fonction «as.character()».
tolower() and toupper()
Comme la plupart des langages de programmation, R trouve des différences entre les majuscules et les minuscules. Les fonctions «tolower()» et «toupper()» nous aident à comprendre ce problème.
nchar()
Il est possible que nous puissions avoir besoin de connaître la longueur de nos chaînes de caractères. La fonction «nchar()» nous permet de compter le nombre de caractères (de tous types) dans une chaîne spécifique.
Par exemple, nous pourrions être intéressés à ne récupérer que les états composés de 6 lettres :
str_count()
Dans la même veine que la fonction «nchar()», nous introduisons une autre fonction qui nous permet d’obtenir le nombre d’occurrences d’un caractère spécifique dans une ou plusieurs chaînes : «str_count()». Voici un exemple pratique de la fonction considérant le caractère «k» (juste en minuscule):
grep()
Renversons le problème maintenant. Supposons que cette fois, nous devons sélectionner les états qui contiennent la lettre «w», à la fois en majuscule et en minuscule (comme nous l’avons déjà vu, R peut faire la différence entre les majuscules et les minuscules). La fonction «grep()» fonctionne parfaitement dans ce scénario :
Puisque nous recherchions les états contenant à la fois «w» et «W», nous avons défini l’argument «pattern» avec les deux caractères, «wW». Remarquez la différence lors de la définition de l’argument « value » sur « FALSE » ou sur « TRUE » : dans le premier cas, nous obtenons les positions de l’élément dans le vecteur « state.name » des chaînes de caractères qui correspondent à notre recherche, dans le second nous avons directement leur «value».
paste()
Pendant que nous travaillons sur des chaînes de caractères, nous pourrions avoir besoin de combiner plusieurs strings en une seule chaîne. La fonction «paste()» recupère un ou plusieurs objets R, les convertit en caractères, puis les concatène pour ne former qu’une seule chaîne de caractères.
Dans l’exemple ci-dessus, nous avons combiné des objets de 5 caractères et les avons séparés par une virgule et un espace. Comme nous pouvons le voir, l’argument «sep» est une chaîne de caractères utilisée comme séparateur. D’un autre côté, si nous voulons combiner des chaînes qui appartiennent à un seul vecteur de caractères, nous utiliserons l’argument «collapse» :
Maintenant, remarquons la différence entre ces exemples suivants :
Dans le premier cas, grâce à « sep« , nous combinons chaque élément du vecteur « statesWith6characters » avec la chaîne unique « is a state », séparée uniquement par un espace. En conséquence, nous avons un nouveau vecteur de caractères, toujours formé de 5 éléments qui sont désormais la combinaison entre chaque élément de «statesWith6characters» et «is a state». Dans le second exemple, nous combinons toujours chaque élément de «statesWith6characters» avec «is a state» (là encore séparé par un espace), mais cette fois nous créons un seul élément de chaîne, et non pas un vecteur.
Afin d’obtenir un résultat plus clair, nous pouvons travailler avec les deux arguments «sep» et «collapse» de cette manière :
strsplit()
La fonction opposée de «paste()» est «strsplit()». «Strsplit()» nous permet de diviser une ou plusieurs chaînes en chaînes plus courtes.
Remarquez l’utilisation de l’argument «split» comme délimiteur dans le fractionnement des chaînes : comme un seul espace dans le premier cas, comme la lettre «w» dans le second.
sub() and gsub()
Nous pourrions également avoir la nécessité de remplacer un caractère particulier dans une chaîne de caractères. Pour cela, il existe les fonctions «sub()» et «gsub()».
Nous pouvons facilement vérifier la différence entre les deux fonctions: tandis que «sub ()» remplace uniquement la première occurrence d’un pattern dans une chaîne de caractères (le premier «a» dans notre exemple), «gsub ()» remplace toutes les occurrences (donc , tous les «A» contenus dans la chaîne «AlAbAmA»).
substr()
Supposons, cette fois, que nous n’ayons pas besoin de remplacer des caractères particuliers, mais que nous avons juste besoin d’extraire une partie spécifique d’une chaîne. Avec la fonction «substr()», nous pouvons, par exemple, extraire les 4 premières lettres de tous les noms des états. Voici comment cela fonctionne:
Comme nous pouvons le voir dans l’exemple ci-dessus, nous avons 4 cas particuliers: « New », « New », « New », « New ». Ces éléments correspondent simplement à « New Hampshire », « New Jersey », « New Mexico », « New York » : dans toutes ces chaînes de caractères, la 4ème lettre est représentée par un espace qui, dans ce contexte, est évidemment considéré comme un caractère. Nous pouvons le souligner encore mieux si nous considérons les 5 premières lettres :
References:
- Christensson, Per. “String Definition.” TechTerms. (2006). Accessed Nov 23, 2015. http://techterms.com/definition/string.
- R Documentation, US State Facts and Figures – https://stat.ethz.ch/R-manual/R-devel/library/datasets/html/state.html
- Sanchez, G. (2013) Handling and Processing Strings in R – Trowchez Editions. Berkeley, 2013 – http://www.gastonsanchez.com/Handling and Processing Strings in R.pdf
- Ulrich, Joshua. “Why Use R?” (2010) – http://www.r-bloggers.com/why-use-r/