class: center, middle, inverse, title-slide # STRINGR, un package de TIDYVERSE ## Cours FAS1002 ### par Stéphanie Lapierre ### 23 novembre 2021 --- class: center, middle <center><img src="https://d33wubrfki0l68.cloudfront.net/45fd04ad9cdb2159fea08d07dbc11e742d68e4e3/df327/css/images/hex/stringr.png" height="350px" /></center> ### « Strings are not glamorous, high-profile components of R, but they do play a big role in many data cleaning and preparation tasks. » [stringr, tidyverse](https://stringr.tidyverse.org/) --- background-image: url(https://d33wubrfki0l68.cloudfront.net/45fd04ad9cdb2159fea08d07dbc11e742d68e4e3/df327/css/images/hex/stringr.png) background-position: 1040px 40px background-size: 80px ## Chaîne de caractère Selon GeeksforGeeks > Les chaînes de caractères (_string_) sont essentiellement un ensemble de caractères. Un ou plusieurs caractères inclus dans une paire de guillemets simples ou doubles correspondants peuvent être considérés comme une chaîne de caractères dans R. Les chaînes représentent un contenu textuel et peuvent contenir des nombres, des espaces et des caractères spéciaux. [(Tranduction libre)](https://www.geeksforgeeks.org/r-strings/) <br /> ```r string <- "Voici une chaîne de caractère" ``` <br /> ```r string2 <- 'Pour inclure une "citation", on utilise les guillemets simples.' ``` --- background-image: url(https://d33wubrfki0l68.cloudfront.net/45fd04ad9cdb2159fea08d07dbc11e742d68e4e3/df327/css/images/hex/stringr.png) background-position: 1040px 40px background-size: 80px ## *stringr* #### Un *package* de Tidyverse Le *package stringr* fournit un ensemble de fonctions pour faciliter le travail avec les chaînes de caractères. Bâti à partir de *stringi*, il offre les fonctions les plus importantes et les plus utilisées pour manipuler les chaînes de caractères. <br /> #### Astuce Si aucune fonction de *stringr* ne répond à vos besoins, les chances sont que vous trouviez ce que vous cherchez dans *stringi*. --- background-image: url(https://d33wubrfki0l68.cloudfront.net/45fd04ad9cdb2159fea08d07dbc11e742d68e4e3/df327/css/images/hex/stringr.png) background-position: 1040px 40px background-size: 80px ## Des fonctions qui commencent par `str_` .pull-left[ * `str_c` * `str_conv` * `str_count` * `str_detect` * `str_dup` * `str_ends` * `str_extract` et `str_extract_all` * `str_flatten` * `str_glue` * `str_glue_data` * `str_interp` * `str_length` * `str_locate` et `str_locate_all` * `str_match` et `str_match_all` * `str_order` * `str_pad` * `str_remove` et `str_remove_all` * `str_replace` et `str_replace_all` ] .pull-right[ * `str_replace_na` * `str_sort` * `str_split` * `str_split_fixed` * `str_squish` * `str_starts` * `str_sub` * `str_sub<-` * `str_subset` * `str_to_lower` et `str_to_upper` * `str_to_sentence` * `str_to_title` * `str_trim` * `str_trunc` * `str_view` et `str_view_all` * `str_which` * `str_wrap` ] --- background-image: url(https://d33wubrfki0l68.cloudfront.net/45fd04ad9cdb2159fea08d07dbc11e742d68e4e3/df327/css/images/hex/stringr.png) background-position: 1040px 40px background-size: 80px ### Base R contre *stringr* <br /> Bien que R offre un ensemble de fonctions pour travailler avec les chaînes de caractères, on reproche à ces fonctions de manquer de cohérence et d'être plus difficiles à apprendre. <br /> ####Pourquoi utiliser *stringr*? * La structure des fonctions et des arguments est cohérente et consistante. Le premier argument d'une fonction est toujours le vecteur sur lequel on travaille. C'est d'ailleurs ce qui fait que *stringr* est particulièrement adapté pour l'utilisation des pipes (%>%). * Simplifie les opérations. * Les résultats des fonctions de *stringr* peuvent facilement être réutilisés. Le package permet notamment de s'assurer que les données manquantes demeurent des données manquantes. --- class: inverse center middle # Exploration et nettoyage des données --- background-image: url(https://d33wubrfki0l68.cloudfront.net/45fd04ad9cdb2159fea08d07dbc11e742d68e4e3/df327/css/images/hex/stringr.png) background-position: 1040px 40px background-size: 80px ### Exploration des chaînes de caractères La fonction `str_length` permet d'évaluer la longueur d'une chaine de caractères. ```r x <- c("mercure", "vénus", "terre", "mars", "jupiter", "saturne", "uranus", "neptune", NA) str_length(x) ``` ``` ## [1] 7 5 5 4 7 7 6 7 NA ``` <br /> Note : Dans Base R, ce résultat aurait été obtenu avec la fonction `nchar()`. ```r x <- c("mercure", "vénus", "terre", "mars", "jupiter", "saturne", "uranus", "neptune", NA) nchar(x) ``` ``` ## [1] 7 5 5 4 7 7 6 7 NA ``` --- background-image: url(https://d33wubrfki0l68.cloudfront.net/45fd04ad9cdb2159fea08d07dbc11e742d68e4e3/df327/css/images/hex/stringr.png) background-position: 1040px 40px background-size: 80px ### Pour gérer les majuscules et les minuscules *stringr* dispose de quatre fonctions pour nous aider à convertir les majuscules et les minuscules. <br /> La fonction `str_to_upper` pour mettre tous les caractères en majuscule. ```r x <- c("lEs dOnNéEs pArLeNt d'ElLeS-MêMeS") str_to_upper(x) ``` ``` ## [1] "LES DONNÉES PARLENT D'ELLES-MÊMES" ``` --- background-image: url(https://d33wubrfki0l68.cloudfront.net/45fd04ad9cdb2159fea08d07dbc11e742d68e4e3/df327/css/images/hex/stringr.png) background-position: 1040px 40px background-size: 80px ### Pour gérer les majuscules et les minuscules *stringr* dispose de quatre fonctions pour nous aider à convertir les majuscules et les minuscules. <br /> La fonction `str_to_lower` pour mettre tous les caractères en minuscule. ```r x <- c("lEs dOnNéEs pArLeNt d'ElLeS-MêMeS") str_to_lower(x) ``` ``` ## [1] "les données parlent d'elles-mêmes" ``` --- background-image: url(https://d33wubrfki0l68.cloudfront.net/45fd04ad9cdb2159fea08d07dbc11e742d68e4e3/df327/css/images/hex/stringr.png) background-position: 1040px 40px background-size: 80px ### Pour gérer les majuscules et les minuscules *stringr* dispose de quatre fonctions pour nous aider à convertir les majuscules et les minuscules. <br /> La fonction `str_to_sentence` pour mettre une majuscule au début de la phrase. ```r x <- c("vous voyez! lEs dOnNéEs pArLeNt d'ElLeS-MêMeS") str_to_sentence (x) ``` ``` ## [1] "Vous voyez! Les données parlent d'elles-mêmes" ``` --- background-image: url(https://d33wubrfki0l68.cloudfront.net/45fd04ad9cdb2159fea08d07dbc11e742d68e4e3/df327/css/images/hex/stringr.png) background-position: 1040px 40px background-size: 80px ### Pour gérer les majuscules et les minuscules *stringr* dispose de quatre fonctions pour nous aider à convertir les majuscules et les minuscules. <br /> La fonction `str_to_title` pour mettre des majuscules dans un titre. ```r x <- c("lEs dOnNéEs pArLeNt d'ElLeS-MêMeS") str_to_title(x) ``` ``` ## [1] "Les Données Parlent D'elles-Mêmes" ``` --- background-image: url(https://d33wubrfki0l68.cloudfront.net/45fd04ad9cdb2159fea08d07dbc11e742d68e4e3/df327/css/images/hex/stringr.png) background-position: 1040px 40px background-size: 80px ### Pour gérer les majuscules et les minuscules ####Astuce Chaque langue comporte ces propres particularités. Afin de permettre à R d'exécuter correctement les manipulations demandées, l'argument `locale` permet d'indiquer la langue des caractères. Par défaut, les fonctions de *stringr* utilisent "en" pour anglais. Par exemple, dans l'alphabet hawaïen, le *e* vient avec le *b*. ```r x <- c("apple", "eggplant", "banana") str_sort(x, locale = "en") # En anglais ``` ``` ## [1] "apple" "banana" "eggplant" ``` ```r str_sort(x, locale = "haw") # En hawaïen ``` ``` ## [1] "apple" "eggplant" "banana" ``` --- background-image: url(https://d33wubrfki0l68.cloudfront.net/45fd04ad9cdb2159fea08d07dbc11e742d68e4e3/df327/css/images/hex/stringr.png) background-position: 1040px 40px background-size: 80px ### Pour extraire ou remplacer des caractères <br /> La fonction `str_sub` pour extraire une partie des caractères. Cette fonction est composée de trois arguments, soit le vecteur, la position de départ et la position de fin. ```r x <- c("mercure", "vénus", "terre", "mars", "jupiter", "saturne", "uranus", "neptune", NA) # Le 3e caractère str_sub(x, 3, 3) ``` ``` ## [1] "r" "n" "r" "r" "p" "t" "a" "p" NA ``` ```r # Du 2e caractère à l'avant-dernier caractère str_sub(x, 2, -2) ``` ``` ## [1] "ercur" "énu" "err" "ar" "upite" "aturn" "ranu" "eptun" NA ``` --- background-image: url(https://d33wubrfki0l68.cloudfront.net/45fd04ad9cdb2159fea08d07dbc11e742d68e4e3/df327/css/images/hex/stringr.png) background-position: 1040px 40px background-size: 80px ### Pour extraire ou remplacer des caractères La fonction `str_sub` peut aussi être utilisée pour modifier un caractère. ```r x <- c("mercure", "vénus", "terre", "mars", "jupiter", "saturne", "uranus", "neptune", NA) # Remplacer le troisième caractère par un point d'interrogation str_sub(x, 3, 3) <- "?" x ``` ``` ## [1] "me?cure" "vé?us" "te?re" "ma?s" "ju?iter" "sa?urne" "ur?nus" ## [8] "ne?tune" NA ``` --- background-image: url(https://d33wubrfki0l68.cloudfront.net/45fd04ad9cdb2159fea08d07dbc11e742d68e4e3/df327/css/images/hex/stringr.png) background-position: 1040px 40px background-size: 80px ### Pour combiner des caractères La fonction `str_c` permet de combiner des caractères. ```r str_c("mercure", "vénus", "terre", "mars", "jupiter", "saturne", "uranus", "neptune") ``` ``` ## [1] "mercurevénusterremarsjupitersaturneuranusneptune" ``` <br /> En ajoutant l'argument `sep`, on indique par quoi séparer les caractères. ```r str_c("mercure", "vénus", "terre", "mars", "jupiter", "saturne", "uranus", "neptune", sep = " et ") ``` ``` ## [1] "mercure et vénus et terre et mars et jupiter et saturne et uranus et neptune" ``` --- class: inverse center middle # Les espaces --- background-image: url(https://d33wubrfki0l68.cloudfront.net/45fd04ad9cdb2159fea08d07dbc11e742d68e4e3/df327/css/images/hex/stringr.png) background-position: 1040px 40px background-size: 80px ### Pour gérer les espaces *stringr* dispose de trois fonctions ajouter, enlever ou modifier les espaces. La fonction `str_pad` permet d'obtenir une chaîne de caractères d'une longueur déterminer en ajoutant des espaces supplémentaires à gauche, à droite ou des deux côtés. ```r x <- c("données") str_pad(x, 20, "left") # Par défaut, les espaces sont ajoutés à gauche ``` ``` ## [1] " données" ``` ```r str_pad(x, 20, "right") ``` ``` ## [1] "données " ``` ```r str_pad(x, 20, "both") ``` ``` ## [1] " données " ``` --- background-image: url(https://d33wubrfki0l68.cloudfront.net/45fd04ad9cdb2159fea08d07dbc11e742d68e4e3/df327/css/images/hex/stringr.png) background-position: 1040px 40px background-size: 80px ### Pour gérer les espaces *stringr* dispose de trois fonctions ajouter, enlever ou modifier les espaces. La fonction `str_trim` permet d'éliminer d'une chaîne de caractères toutes les espaces superflues à gauche, à droite ou des deux côtés. ```r x <- c(" a", "b ", " c ") str_trim(x, "left") ``` ``` ## [1] "a" "b " "c " ``` ```r str_trim(x, "right") ``` ``` ## [1] " a" "b" " c" ``` ```r str_trim(x, "both") # Par défaut, les espaces sont enlevés des deux côtés ``` ``` ## [1] "a" "b" "c" ``` --- background-image: url(https://d33wubrfki0l68.cloudfront.net/45fd04ad9cdb2159fea08d07dbc11e742d68e4e3/df327/css/images/hex/stringr.png) background-position: 1040px 40px background-size: 80px ### Pour gérer les espaces *stringr* dispose de trois fonctions ajouter, enlever ou modifier les espaces. La fonction `str_wrap` permet d'ajuster le format d'une chaîne de caractères pour obtenir un paragraphe. ```r x <- c("Illud tamen te esse admonitum volo, primum ut qualis es talem te esse omnes existiment ut, quantum a rerum turpitudine abes, tantum te a verborum libertate seiungas; deinde ut ea in alterum ne dicas, quae cum tibi falso responsa sint, erubescas.") cat(str_wrap(x, width = 80)) ``` ``` ## Illud tamen te esse admonitum volo, primum ut qualis es talem te esse omnes ## existiment ut, quantum a rerum turpitudine abes, tantum te a verborum libertate ## seiungas; deinde ut ea in alterum ne dicas, quae cum tibi falso responsa sint, ## erubescas. ``` ```r cat(str_wrap(x, width = 50, indent = 4)) ``` ``` ## Illud tamen te esse admonitum volo, primum ## ut qualis es talem te esse omnes existiment ut, ## quantum a rerum turpitudine abes, tantum te a ## verborum libertate seiungas; deinde ut ea in ## alterum ne dicas, quae cum tibi falso responsa ## sint, erubescas. ``` --- class: inverse center middle # À la recherche de *pattern* --- background-image: url(https://d33wubrfki0l68.cloudfront.net/45fd04ad9cdb2159fea08d07dbc11e742d68e4e3/df327/css/images/hex/stringr.png) background-position: 1040px 40px background-size: 80px ### Les expressions régulières Les **expressions régulières** (ou *regexps*) permettent de décrire un *pattern* qui apparait dans une chaîne de caractère. La *cheatsheet* du *package stringr* présente un bon résumé des différents concepts liés aux expressions régulières.  --- background-image: url(https://d33wubrfki0l68.cloudfront.net/45fd04ad9cdb2159fea08d07dbc11e742d68e4e3/df327/css/images/hex/stringr.png) background-position: 1040px 40px background-size: 80px ### Détecter des *patterns* <br /> Les fonctions qui intègrent les expressions régulières ont toutes la même structure `str_...(x, pattern)`. <br /> La fonction `str_detect` permet de savoir si des chaînes de caractères répondent à l'expression régulière testée. ```r x <- c("mercure", "vénus", "terre", "mars", "jupiter", "saturne", "uranus", "neptune", "why") str_detect(x, "[aeiou]") ``` ``` ## [1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE FALSE ``` --- background-image: url(https://d33wubrfki0l68.cloudfront.net/45fd04ad9cdb2159fea08d07dbc11e742d68e4e3/df327/css/images/hex/stringr.png) background-position: 1040px 40px background-size: 80px ### Détecter des *patterns* <br /> Les fonctions qui intègrent les expressions régulières ont toutes la même structure `str_...(x, pattern)`. <br /> La fonction `str_subset` permet d'extraire les chaînes de caractères répondent à l'expression régulière testée. ```r x <- c("mercure", "vénus", "terre", "mars", "jupiter", "saturne", "uranus", "neptune", "why") str_subset(x, "[aeiou]") ``` ``` ## [1] "mercure" "vénus" "terre" "mars" "jupiter" "saturne" "uranus" ## [8] "neptune" ``` --- background-image: url(https://d33wubrfki0l68.cloudfront.net/45fd04ad9cdb2159fea08d07dbc11e742d68e4e3/df327/css/images/hex/stringr.png) background-position: 1040px 40px background-size: 80px ### Détecter des *patterns* <br /> Les fonctions qui intègrent les expressions régulières ont toutes la même structure `str_...(x, pattern)` <br /> La fonction `str_count` permet de compter combien de caractères répondent à l'expression régulière testée. ```r x <- c("mercure", "vénus", "terre", "mars", "jupiter", "saturne", "uranus", "neptune", "why") str_count(x, "[aeiou]") ``` ``` ## [1] 3 1 2 1 3 3 3 3 0 ``` --- background-image: url(https://d33wubrfki0l68.cloudfront.net/45fd04ad9cdb2159fea08d07dbc11e742d68e4e3/df327/css/images/hex/stringr.png) background-position: 1040px 40px background-size: 80px ### Détecter des *patterns* <br /> Les fonctions qui intègrent les expressions régulières ont toutes la même structure `str_...(x, pattern)`. <br /> La fonction `str_locate` permet d'obtenir la position des caractères qui répondent à l'expression régulière testée. ```r x <- c("mercure", "vénus", "terre", "mars", "jupiter", "saturne", "uranus", "neptune", "why") str_locate(x, "[aeiou]") ``` ``` ## start end ## [1,] 2 2 ## [2,] 4 4 ## [3,] 2 2 ## [4,] 2 2 ## [5,] 2 2 ## [6,] 2 2 ## [7,] 1 1 ## [8,] 2 2 ## [9,] NA NA ``` --- background-image: url(https://d33wubrfki0l68.cloudfront.net/45fd04ad9cdb2159fea08d07dbc11e742d68e4e3/df327/css/images/hex/stringr.png) background-position: 1040px 40px background-size: 80px ### Détecter des *patterns* <br /> Les fonctions qui intègrent les expressions régulières ont toutes la même structure `str_...(x, pattern)`. <br /> La fonction `str_extract` permet d'extraire le caractère qui répond répondent à l'expression régulière testée. ```r x <- c("mercure", "vénus", "terre", "mars", "jupiter", "saturne", "uranus", "neptune", "why") str_extract(x, "[aeiou]") ``` ``` ## [1] "e" "u" "e" "a" "u" "a" "u" "e" NA ``` --- background-image: url(https://d33wubrfki0l68.cloudfront.net/45fd04ad9cdb2159fea08d07dbc11e742d68e4e3/df327/css/images/hex/stringr.png) background-position: 1040px 40px background-size: 80px ### Détecter des *patterns* <br /> Les fonctions qui intègrent les expressions régulières ont toutes la même structure `str_...(x, pattern)`. <br /> La fonction `str_match` permet d'extraire des parties de caractères qui correspondent à l'expression régulière testée. ```r x <- c("mercure", "vénus", "terre", "mars", "jupiter", "saturne", "uranus", "neptune", "why") # Extraire les caractères de chaque côté des voyelles str_match(x, "(.)[aeiou](.)") ``` ``` ## [,1] [,2] [,3] ## [1,] "mer" "m" "r" ## [2,] "nus" "n" "s" ## [3,] "ter" "t" "r" ## [4,] "mar" "m" "r" ## [5,] "jup" "j" "p" ## [6,] "sat" "s" "t" ## [7,] "ran" "r" "n" ## [8,] "nep" "n" "p" ## [9,] NA NA NA ``` --- background-image: url(https://d33wubrfki0l68.cloudfront.net/45fd04ad9cdb2159fea08d07dbc11e742d68e4e3/df327/css/images/hex/stringr.png) background-position: 1040px 40px background-size: 80px ### Détecter des *patterns* <br /> Les fonctions qui intègrent les expressions régulières ont toutes la même structure `str_...(x, pattern)`. <br /> La fonction `str_replace` permet de remplacer les caractères qui répondent à l'expression régulière testée. ```r x <- c("mercure", "vénus", "terre", "mars", "jupiter", "saturne", "uranus", "neptune", "why") str_replace(x, "[aeiou]", "?") ``` ``` ## [1] "m?rcure" "vén?s" "t?rre" "m?rs" "j?piter" "s?turne" "?ranus" ## [8] "n?ptune" "why" ``` --- background-image: url(https://d33wubrfki0l68.cloudfront.net/45fd04ad9cdb2159fea08d07dbc11e742d68e4e3/df327/css/images/hex/stringr.png) background-position: 1040px 40px background-size: 80px ### Détecter des *patterns* <br /> Les fonctions qui intègrent les expressions régulières ont toutes la même structure `str_...(x, pattern)`. <br /> La fonction `str_split` permet de séparer les chaînes de caractère. ```r x <- c("mercure, vénus, terre, mars, jupiter, saturne, uranus, neptune") str_split(x, ", ") ``` ``` ## [[1]] ## [1] "mercure" "vénus" "terre" "mars" "jupiter" "saturne" "uranus" ## [8] "neptune" ``` --- class: inverse center middle # *stringr* en application --- background-image: url(https://d33wubrfki0l68.cloudfront.net/45fd04ad9cdb2159fea08d07dbc11e742d68e4e3/df327/css/images/hex/stringr.png) background-position: 1040px 40px background-size: 80px ### Analyse textuelle des données du Titanic .pull-left[ <br /> <img src="images/titanic_by-noaa_unsplash.jpg" alt="" width="65%"/> ] .pull-right[ <br /> <br /> <br /> **Using Stringr and Regex to Extract Features from Textual and Alphanumeric Data in R** Analyse de Matti Fuchs publié le 1<sup>er</sup> février 2020 sur Towards Data Science L'analyse complète est disponible [ici](https://towardsdatascience.com/using-stringr-and-regex-to-extract-features-from-textual-alphanumeric-and-punctuation-data-in-r-2565256c0a77) ] --- background-image: url(https://d33wubrfki0l68.cloudfront.net/45fd04ad9cdb2159fea08d07dbc11e742d68e4e3/df327/css/images/hex/stringr.png) background-position: 1040px 40px background-size: 80px ### Base de données du Titanic ```r library(titanic) df <- titanic_train knitr::kable(head(df, 3), format = "html") ``` <table> <thead> <tr> <th style="text-align:right;"> PassengerId </th> <th style="text-align:right;"> Survived </th> <th style="text-align:right;"> Pclass </th> <th style="text-align:left;"> Name </th> <th style="text-align:left;"> Sex </th> <th style="text-align:right;"> Age </th> <th style="text-align:right;"> SibSp </th> <th style="text-align:right;"> Parch </th> <th style="text-align:left;"> Ticket </th> <th style="text-align:right;"> Fare </th> <th style="text-align:left;"> Cabin </th> <th style="text-align:left;"> Embarked </th> </tr> </thead> <tbody> <tr> <td style="text-align:right;"> 1 </td> <td style="text-align:right;"> 0 </td> <td style="text-align:right;"> 3 </td> <td style="text-align:left;"> Braund, Mr. Owen Harris </td> <td style="text-align:left;"> male </td> <td style="text-align:right;"> 22 </td> <td style="text-align:right;"> 1 </td> <td style="text-align:right;"> 0 </td> <td style="text-align:left;"> A/5 21171 </td> <td style="text-align:right;"> 7.2500 </td> <td style="text-align:left;"> </td> <td style="text-align:left;"> S </td> </tr> <tr> <td style="text-align:right;"> 2 </td> <td style="text-align:right;"> 1 </td> <td style="text-align:right;"> 1 </td> <td style="text-align:left;"> Cumings, Mrs. John Bradley (Florence Briggs Thayer) </td> <td style="text-align:left;"> female </td> <td style="text-align:right;"> 38 </td> <td style="text-align:right;"> 1 </td> <td style="text-align:right;"> 0 </td> <td style="text-align:left;"> PC 17599 </td> <td style="text-align:right;"> 71.2833 </td> <td style="text-align:left;"> C85 </td> <td style="text-align:left;"> C </td> </tr> <tr> <td style="text-align:right;"> 3 </td> <td style="text-align:right;"> 1 </td> <td style="text-align:right;"> 3 </td> <td style="text-align:left;"> Heikkinen, Miss. Laina </td> <td style="text-align:left;"> female </td> <td style="text-align:right;"> 26 </td> <td style="text-align:right;"> 0 </td> <td style="text-align:right;"> 0 </td> <td style="text-align:left;"> STON/O2. 3101282 </td> <td style="text-align:right;"> 7.9250 </td> <td style="text-align:left;"> </td> <td style="text-align:left;"> S </td> </tr> </tbody> </table> --- background-image: url(https://d33wubrfki0l68.cloudfront.net/45fd04ad9cdb2159fea08d07dbc11e742d68e4e3/df327/css/images/hex/stringr.png) background-position: 1040px 40px background-size: 80px ### Prédicteur de la survie ```r head(df$Name, 12) ``` ``` ## [1] "Braund, Mr. Owen Harris" ## [2] "Cumings, Mrs. John Bradley (Florence Briggs Thayer)" ## [3] "Heikkinen, Miss. Laina" ## [4] "Futrelle, Mrs. Jacques Heath (Lily May Peel)" ## [5] "Allen, Mr. William Henry" ## [6] "Moran, Mr. James" ## [7] "McCarthy, Mr. Timothy J" ## [8] "Palsson, Master. Gosta Leonard" ## [9] "Johnson, Mrs. Oscar W (Elisabeth Vilhelmina Berg)" ## [10] "Nasser, Mrs. Nicholas (Adele Achem)" ## [11] "Sandstrom, Miss. Marguerite Rut" ## [12] "Bonnell, Miss. Elizabeth" ``` <br /> **Question** : Est-ce qu'une personne issue de la noblesse ou une jeune femme célibataire a eu plus de change de survivre? Pour répondre à cette question, on peut extraire le titre de civilité de la variable *Name*. --- background-image: url(https://d33wubrfki0l68.cloudfront.net/45fd04ad9cdb2159fea08d07dbc11e742d68e4e3/df327/css/images/hex/stringr.png) background-position: 1040px 40px background-size: 80px ### Extraction du titre de civilité Pour éviter les problèmes ou les mauvaises surprises, on met en minuscule tous les noms. ```r df$lcName = str_to_lower(df$Name) head(df$lcName, 15) ``` ``` ## [1] "braund, mr. owen harris" ## [2] "cumings, mrs. john bradley (florence briggs thayer)" ## [3] "heikkinen, miss. laina" ## [4] "futrelle, mrs. jacques heath (lily may peel)" ## [5] "allen, mr. william henry" ## [6] "moran, mr. james" ## [7] "mccarthy, mr. timothy j" ## [8] "palsson, master. gosta leonard" ## [9] "johnson, mrs. oscar w (elisabeth vilhelmina berg)" ## [10] "nasser, mrs. nicholas (adele achem)" ## [11] "sandstrom, miss. marguerite rut" ## [12] "bonnell, miss. elizabeth" ## [13] "saundercock, mr. william henry" ## [14] "andersson, mr. anders johan" ## [15] "vestrom, miss. hulda amanda adolfina" ``` --- background-image: url(https://d33wubrfki0l68.cloudfront.net/45fd04ad9cdb2159fea08d07dbc11e742d68e4e3/df327/css/images/hex/stringr.png) background-position: 1040px 40px background-size: 80px ### Extraction du titre de civilité <br /> Il faut maintenant utiliser une expression régulière afin de pouvoir extraire le titre de civilité. On a vu que les titres de civilité sont précédés d'un espace et se termine par un point. <br /> L'expression régulière est composée de trois parties. 1. `(?<=\\s)` indique que la chaîne de caractères qu'on recherche est précédée (?<=) d'un espace (\\s). 1. `[[:alpha:]]+` indique que la chaîne de caractères qu'on recherche est composés d'une ou plusieurs (+) lettres ([[:alpha:]]). 1. `(?=\\.)` indique que la chaîne de caractères qu'on recherche précède (?=) un point (\\.). <br /> ** (?<=\\s)[[:alpha:]]+(?=\\.) ** --- background-image: url(https://d33wubrfki0l68.cloudfront.net/45fd04ad9cdb2159fea08d07dbc11e742d68e4e3/df327/css/images/hex/stringr.png) background-position: 1040px 40px background-size: 80px ### Extraction du titre de civilité ```r df$title = str_extract( df$lcName, "(?<=\\s)[[:alpha:]]+(?=\\.)" ) df$title <- as.factor(df$title) df_title <- data.frame(summary(df$title)) ``` --- background-image: url(https://d33wubrfki0l68.cloudfront.net/45fd04ad9cdb2159fea08d07dbc11e742d68e4e3/df327/css/images/hex/stringr.png) background-position: 1040px 40px background-size: 80px ### Extraction du titre de civilité ```r df_title ``` ``` ## summary.df.title. ## capt 1 ## col 2 ## countess 1 ## don 1 ## dr 7 ## jonkheer 1 ## lady 1 ## major 2 ## master 40 ## miss 182 ## mlle 2 ## mme 1 ## mr 517 ## mrs 125 ## ms 1 ## rev 6 ## sir 1 ``` --- background-image: url(https://d33wubrfki0l68.cloudfront.net/45fd04ad9cdb2159fea08d07dbc11e742d68e4e3/df327/css/images/hex/stringr.png) background-position: 1040px 40px background-size: 80px ### Répartition des titres de civilité des passagers du Titanic ```r ggplot(data.frame(table(df$title)),aes(x=reorder(Var1, -Freq),y=Freq))+ geom_col(fill='darkgreen')+ labs(x="Titre de civilité",y="Nombre") ``` <img src="stringr_files/figure-html/unnamed-chunk-30-1.png" width="100%" /> --- class: center, middle # Merci! --- background-image: url(https://d33wubrfki0l68.cloudfront.net/45fd04ad9cdb2159fea08d07dbc11e742d68e4e3/df327/css/images/hex/stringr.png) background-position: 1040px 40px background-size: 80px ### Références utiles * [stringr](https://stringr.tidyverse.org/index.html) - *présentation du package* * [stringr, Reference](https://stringr.tidyverse.org/reference/index.html) - *ensemble des fonctions de stringr* * [stringr, Cheatsheet](https://raw.githubusercontent.com/rstudio/cheatsheets/main/strings.pdf) * [R for Data Science, Strings (chapter 14)](https://r4ds.had.co.nz/strings.html) * [Introduction to stringr](https://cran.r-project.org/web/packages/stringr/vignettes/stringr.html)