Chargement des librairies

library(tidyverse)
library(stringr)
library(nycflights13)
library(tidytext)

Manipulation de Données Textuelles

Création des données initiales

# Data textuelle
data_textuelle_ex1 <- tibble(
  nom = c("Mr Eric Legrand", "Mme Anabelle Dupont", "Mme Fatou Slaoui"),
  adresse = c("12 rue Archimède", "47 avenue de la Libération", "3 rue des Fleurs"),
  ville = c("Niort", "Poitiers", "Marseille")
)

Exercice 1 : Transformer les colonnes

Transformation en MAJUSCULES

ex1_maj <- data_textuelle_ex1 %>%
  mutate(
    nom = str_to_upper(nom),
    adresse = str_to_upper(adresse),
    ville = str_to_upper(ville)
  )

Transformation en minuscules

ex1_min <- data_textuelle_ex1 %>%
  mutate(
    nom = str_to_lower(nom),
    adresse = str_to_lower(adresse),
    ville = str_to_lower(ville)
  )

Transformation en Casse Titre

ex1_cap <- data_textuelle_ex1 %>%
  mutate(
    nom = str_to_title(nom),
    adresse = str_to_title(adresse),
    ville = str_to_title(ville)
  )

Exercice 2 : concaténer l’adresse et la ville, avec la ville en majuscules

ex2 <- data_textuelle_ex1 %>%
  mutate(adr_ville = paste(adresse, str_to_upper(ville), sep = " "))

Exercice 3 : concaténer le nom, l’adresse et la ville avec : un séparateur sep = “-”

ex3 <- paste(data_textuelle_ex1$nom, 
                      data_textuelle_ex1$adresse, 
                      data_textuelle_ex1$ville, 
                      collapse = "|")

Exercice 4 : À partir de l’adresse complète concaténée précédemment avec le délimiteur “|”, créer une liste issue du découpage selon ce séparateur.

ex4 <- str_split(ex3, pattern = fixed("|"))
print(ex4)
## [[1]]
## [1] "Mr Eric Legrand 12 rue Archimède Niort"                 
## [2] "Mme Anabelle Dupont 47 avenue de la Libération Poitiers"
## [3] "Mme Fatou Slaoui 3 rue des Fleurs Marseille"

Exercice 5 : À partir de la colonne nom, créer trois nouvelles colonnes : genre, prenom et nom

ex5 <- data_textuelle_ex1 %>%
  separate(nom, into = c("genre", "prenom", "nom"), sep = " ")

Text Mining et Analyse Textuelle

Exercice 6 : Saisir La donnée (Corpus de mots)

# Data textuelle
data_textuelle_ex6 <- tibble( id = 1 :3, texte = c( "La data science est un domaine interdisciplinaire.",
                                                    "Le text mining permetd'analyser des documents.",
                                                    "Les ingénieurs utilisent R et Pythonpour le NLP." ) )

Exercice 7 : Nettoyage et Prétraitement du Texte

Application des transformations

ex7 <- data_textuelle_ex6 %>%
  mutate(texte = str_to_lower(texte)) %>%
  mutate(texte = str_remove_all(texte, "[:punct:]")) %>%
  mutate(texte = str_remove_all(texte, "[:digit:]"))

Exercice 8 : Tokenisation avancée

Extraction des tokens

ex8_tokens <- ex7 %>%
  unnest_tokens(word, texte)

Calcul des fréquences

ex8_freq <- ex8_tokens %>%
  count(word, sort = TRUE)

Exercice 9 : Encore de l’Analyse fréquentielle

Définition du corpus

data_textuelle_ex9 <- "Tom was beginning to get very tired of sitting by her sister on the bank, and of having nothing to do : once or twice he had peeped into the book his sister was reading, but it had no pictures or conversations in it, 'and what is the use of a book,' thought Alice 'without pictures or conversation ?'"

Tokenisation et comptage

ex9_nb_mots <- tibble(texte = data_textuelle_ex9) %>%
  unnest_tokens(word, texte)

ex9_tot_mots <- nrow(ex9_nb_mots)

Calcul des probabilités d’occurrence

ex9_nb_mots %>%
  count(word) %>%
  mutate(probabilite = n / ex9_tot_mots) %>%
  filter(word %in% c("of", "tom", "was", "to"))
## # A tibble: 4 × 3
##   word      n probabilite
##   <chr> <int>       <dbl>
## 1 of        3      0.0526
## 2 to        2      0.0351
## 3 tom       1      0.0175
## 4 was       2      0.0351

Extraction et Recherche de Patterns

Exercice 10 : Recherche de motifs textuels

Identification des occurrences

id_liberation <- str_which(data_textuelle_ex1$adresse, "Libération")
nb_liberation <- length(id_liberation)

Exercice 11 : Extraction de valeurs spécifiques

ex11_valeurs_liberation <- str_extract(data_textuelle_ex1$adresse, "Libération")

Exercice 12 : Remplacement et Extraction

Remplacement de chaînes de caractères

data_textuelle_modifie <- data_textuelle_ex1 %>%
  mutate(
    nom = str_replace(nom, "Mr", "M."),
    adresse = str_replace_all(adresse, c("rue" = "Rue", "avenue" = "Avenue"))
  )

Extraction des numéros de rue

data_textuelle_modifie <- data_textuelle_modifie %>%
  mutate(numero = str_extract(adresse, "\\d+"))

Exercice 13 : Manipulation des Espaces

Ajout d’espaces (padding)

data_textuelle_ex13 <- data_textuelle_ex1 %>%
  mutate(adresse_espace = str_pad(adresse, width = 30, side = "both"))

Suppression des espaces (trimming)

data_textuelle_ex13 <- data_textuelle_ex13 %>%
  mutate(adresse_sans_espace = str_trim(adresse_espace, side = "both"))

Exercice 14 : Détection et Extraction Combinées

data_textuelle_ex14 <- data_textuelle_ex1 %>%
  mutate(
    cont_numero = str_detect(adresse, "\\d+"),
    numero_extrait = str_extract(adresse, "\\d+")
  )
print(data_textuelle_ex14 %>% select(adresse, cont_numero, numero_extrait))
## # A tibble: 3 × 3
##   adresse                    cont_numero numero_extrait
##   <chr>                      <lgl>       <chr>         
## 1 12 rue Archimède           TRUE        12            
## 2 47 avenue de la Libération TRUE        47            
## 3 3 rue des Fleurs           TRUE        3

Nettoyage et Conversion de Données

Exercice 15 : Traitement de Données Monétaires

Création du jeu de données

# Créer un DataFrame
df_ex15 <- tibble(
  Id = 1:4,
  Montant = c("10$", "20$", "40$", "50$")
)

Détection du symbole monétaire

# Détecter le symbole $
presence_dollar <- str_detect(df_ex15$Montant, "\\$")

Nettoyage et calcul de statistiques

# Calculer la moyenne
# Est-ce possible directement ? Non.
# Pourquoi ? La colonne Montant contient des caractères textuels, ce qui en fait une chaîne de caractères.
# Quel type de données obtient-on ? On obtient un message d'erreur ou NA car la fonction mean() nécessite des données de type numérique.

# Nettoyer la variable
df_ex15 <- df_ex15 %>%
  mutate(
    Prix = str_replace(Montant, fixed("$"), ""),
    Prix = as.numeric(Prix)
  )
moyenne_prix <- mean(df_ex15$Prix)

Application sur Données Réelles

Exercice 16 : Analyse des Vols NYC

Chargement du dataset

data("flights")

Création de la variable retard_dep

# Créer une variable retard_dep
flights <- flights %>%
  mutate(retard_dep = dep_delay > 0)

Création de la variable retard_extreme

# Créer retard_extreme
flights <- flights %>%
  mutate(retard_extreme = dep_delay >= 60)

Création de la variable on_time

# Créer on_time
flights <- flights %>%
  mutate(on_time = dep_delay == 0)

Utilisation de str_detect() sur texte

# Utiliser : case_when() ou str_detect() sur une colonne convertie en texte.
flights <- flights %>%
  mutate(
    delay_text = as.character(dep_delay),
    on_time_detect = str_detect(delay_text, "^0$")
  )