Il est rare d’avoir des données propres ou sous une forme directement exploitable. Dans ce chapitre vous allez donc apprendre à modifier les données d’une table, mais aussi à manipuler du texte et à modifier une image !
Modifiez les données comprises dans une table
Les tableaux de données que vous avez importées dans R peuvent être sans erreur, directement dans un format exploitable ou pas…
Il faut donc pouvoir modifier les données en fonction de ses besoins.
Reprenez les données de mixité de genre dans les entreprises d’EDF, importées dans le chapitre précédent.
Ouvrez le tableau de données en cliquant dessus dans l’onglet Environment ou en utilisant le code View(mixite_groupe_edf)
dans la console, et faites-le défiler.
Vous verrez que sur la dernière ligne, la valeur tri
est notée NA
.
Afin de remplacer cette valeur manquante par 65, il faut localiser la cellule et lui indexer sa valeur. Le premier chiffre entre crochets donne la ligne, le deuxième la colonne.
mixite_groupe_edf <- read.csv2("data_raw/mixite-dans-le-groupe-edf.csv")
mixite_groupe_edf[65, 1] <- 65
Il est aussi possible d’utiliser les noms de lignes ou colonnes quand il y en a ; par exemple mixite_groupe_edf[65, "tri"] <- 65
donne le même résultat.
Une dernière possibilité est d’utiliser le dollar $. En effet, le $ permet de descendre d’un niveau et les tableaux sont traités comme des assemblages de colonnes, donc mixite_groupe_edf$tri[65] <- 65
donne le même résultat.
OK, c’est intéressant mais si je ne veux garder que les colonnes en français, je fais comment ?
De la même manière, vous allez pouvoir sélectionner toutes les lignes de plusieurs colonnes en ne mettant rien avant la virgule, et les colonnes d’intérêt listées après.
# avec le nom des colonnes
mixite_groupe_edf_fr <- mixite_groupe_edf[, c("tri", "annee", "perimetre_juridique", "perimetre_spatial", "indicateur", "valeur_de_l_indicateur", "unite", "methode_de_consolidation")]
# ou la position des colonnes
mixite_groupe_edf_fr <- mixite_groupe_edf[, c(1:3, 5, 7, 9, 10, 12)]
Donc si je comprends bien, pour afficher toutes les colonnes de la ligne 3 je peux faire mixite_groupe_edf_fr[3,]
?
Tout à fait !
Vous pouvez aussi sélectionner plusieurs lignes en utilisant la fonction c()
, comme ceci :
mixite_groupe_edf_fr[c(1:3, 6:9,11), ]
Manipulez du texte dans RStudio
Le texte travaillé ici est celui que vous avez importé depuis le site Kering Foundation. Si vous l’avez affiché au chapitre précédent, vous avez peut-être remarqué que les différents éléments de la liste sont collés bout à bout.
Pour récupérer les informations, vous utilisez le package {string}
qui permet de manipuler facilement des chaînes de caractères :
Séparez les phrases les unes des autres grâce à la fonction
str_split()
et en indiquant \\. comme motif de séparation. Mettezsimplify = TRUE
pour que les phrases apparaissent séparées.Extrayez les nombres contenus dans les phrases en utilisant la fonction
str_extract()
et[:digit:]+
comme argument du motif. La fonctionstr_extract_all()
permet d’obtenir tous les contenus correspondant au motif alors questr_extract()
s’arrête à la première occurrence.Extrayez les mots fille et garçon pour savoir le genre concerné par le pourcentage. Attention, pour éviter la sensibilité à la casse, pensez à appliquer la fonction
str_to_lower()
pour tout mettre en minuscules.Concaténez les informations avec la fonction
str_c()
, en gardant le même nombre de colonnes et de lignes. Attention, les valeurs manquantes prennent le dessus sur les autres, il faut donc les remplacer par du vide.
install.packages(stringr)
library(stringr)
stereotype_genre_chiffres_cles_phrases <-
str_split(
stereotype_genre_chiffres_cles,
"\\.",
simplify = TRUE
)
str_c(
stereotype_genre_chiffres_cles_phrases |>
str_extract(pattern = "[:digit:]+%"),
stereotype_genre_chiffres_cles_phrases |>
str_to_lower() |>
str_extract(pattern = "fille|garçon"),
sep = " "
)
# les NA prennent le dessus sur les autres, il faut donc les remplacer par rien
str_c(
stereotype_genre_chiffres_cles_phrases |>
str_extract(pattern = "[:digit:]+%") |>
str_replace_na(""),
stereotype_genre_chiffres_cles_phrases |>
str_to_lower() |>
str_extract(pattern = "fille|garçon") |>
str_replace_na(""),
sep = " "
)
Maintenant que vous avez vu qu’on pouvait manipuler le texte dans RStudio, attaquons-nous aux images.
Modifiez une image dans RStudio
Convertissez en PNG
Le logo d’OpenClassrooms que vous avez ouvert dans votre session R est un format JPEG.
Vous pouvez la convertir en PNG grâce à la fonction image_convert()
du package {magick}
:
install.packages("magick")
library(magick)
logo_oc <- image_read("img/logo_oc.jpeg")
logo_oc_png <- image_convert(logo_oc, format = "png")
logo_oc_png
Sélectionnez une partie de l’image
Grâce à la fonction image_crop()
du package {magick}
, il est possible de ne sélectionner qu’une partie de l’image en lui donnant les valeurs finales de la largeur (premier chiffre avant x) et de la hauteur (deuxième chiffre après le x).
Il faut aussi lui indiquer la position du point de départ à partir de l’angle en haut et à gauche. Si on veut commencer à un point situé à 50 pixels à gauche et 100 pixels vers le bas, il faut écrire +50+100
.
Voici comment isoler le centre du logo : centre_logo_oc <- image_crop(logo_oc_png, "350X350+25+25")
Lisez un texte sur une image
Grâce à l’association avec le package {tesseract}
, le package {magick}
peut extraire du texte contenu dans une image avec la fonction image_ocr()
.
Appliqué sur le centre du logo, nous obtenons deux p. Vous pouvez utiliser la fonction cat()
pour mieux le voir.
install.packages("tesseract")
image_ocr(centre_logo_oc)
cat(image_ocr(centre_logo_oc))
Je m’attendais à trouver un “C” ou un “O”...
Oui c’est normal, l’image est à l’envers !
Pivotez une image
Pour faire pivoter une image avec le package {magick}
, il y a plusieurs possibilités :
L’incliner selon un angle avec la fonction
image_rotate()
. La valeur de l’inclinaison se met avec l’argumentdegrees
.L’inverser verticalement avec la fonction
image_flip()
, c’est-à-dire la refléter en bas.L’inverser horizontalement avec la fonction
image_flop()
, c’est-à-dire la refléter à gauche. C’est ce que nous allons utiliser sur le logo d’OpenClassrooms.
image_flop(centre_logo_oc) |>
image_ocr() |>
cat()
À vous de jouer
Contexte
Vous allez dans cette partie travailler sur les exemples montrés dans le cours. Ainsi vous allez pouvoir modifier vous-même les données contenues dans un tableau, web-scraper une page web et même lire du texte sur une image !
Consignes
Vous devez donc :
Modifier les données contenues dans un tableau.
Récupérer les informations essentielles depuis une page web.
Lire le texte contenu dans une image.
Corrigé
En résumé
R permet de manipuler plusieurs types d’objets.
Il est possible de modifier la nature des objets et ainsi de passer d’un texte à une table ou d'une image à un texte.
Pour enregistrer une manipulation, il faut l’associer à un nouveau nom.
La manipulation d’image est facile avec le package
{magick}
.Le texte est facilement manipulable grâce au package
{stringr}
.
Vous avez bien travaillé dans R, il vous reste à apprendre à sortir votre travail de R !