Import des libraries
library(stringr)
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.1.4 ✔ purrr 1.2.1
## ✔ forcats 1.0.1 ✔ readr 2.1.6
## ✔ ggplot2 4.0.1 ✔ tibble 3.3.0
## ✔ lubridate 1.9.4 ✔ tidyr 1.3.2
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(tidytext)
data_textuelle <- 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") )
# Conversion en minuscules
data_textuelle_lower <- str_to_lower(data_textuelle)
## Warning in stri_trans_tolower(string, locale = locale): argument is not an
## atomic vector; coercing
# Conversion en majuscules
data_textuelle_upper <-str_to_upper(data_textuelle)
## Warning in stri_trans_toupper(string, locale = locale): argument is not an
## atomic vector; coercing
# Format capitalisé
data_textuelle_to_string <-str_to_title(data_textuelle)
## Warning in stri_trans_totitle(string, opts_brkiter = stri_opts_brkiter(locale =
## locale)): argument is not an atomic vector; coercing
data_textuelle <- data_textuelle %>%
mutate(
# Majuscules
nom_maj = toupper(nom),
adresse_maj = toupper(adresse),
ville_maj = toupper(ville),
# Minuscules
nom_min = tolower(nom),
adresse_min = tolower(adresse),
ville_min = tolower(ville),
# Capitalisation (première lettre en majuscule)
nom_cap = str_to_title(nom),
adresse_cap = str_to_title(adresse),
ville_cap = str_to_title(ville)
)
# Afficher le résultat
print(data_textuelle)
## # A tibble: 3 × 12
## nom adresse ville nom_maj adresse_maj ville_maj nom_min adresse_min
## <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
## 1 Mr Eric Legra… 12 rue… Niort MR ERI… 12 RUE ARC… NIORT mr eri… 12 rue arc…
## 2 Mme Anabelle … 47 ave… Poit… MME AN… 47 AVENUE … POITIERS mme an… 47 avenue …
## 3 Mme Fatou Sla… 3 rue … Mars… MME FA… 3 RUE DES … MARSEILLE mme fa… 3 rue des …
## # ℹ 4 more variables: ville_min <chr>, nom_cap <chr>, adresse_cap <chr>,
## # ville_cap <chr>
# On crée une nouvelle colonne avec la ville en majuscules
data_ex2 <- paste0(data_textuelle[["adresse"]], data_textuelle[["ville"]], sep=",")
data_ex2
## [1] "12 rue ArchimèdeNiort," "47 avenue de la LibérationPoitiers,"
## [3] "3 rue des FleursMarseille,"
data_textuelle <- data_textuelle %>%
mutate(adresse_complete = paste(adresse, toupper(ville)))
data_textuelle
# Version avec séparateur "_"
data_sep <- paste(data_textuelle$nom, data_textuelle$adresse, data_textuelle$ville, sep = "_")
# Version avec collapse "|" (crée une seule grande chaîne de caractères)
data_collapsed <- paste(data_textuelle$nom, data_textuelle$adresse, data_textuelle$ville, collapse = " | ")
data_collapsed
## [1] "Mr Eric Legrand 12 rue Archimède Niort | Mme Anabelle Dupont 47 avenue de la Libération Poitiers | Mme Fatou Slaoui 3 rue des Fleurs Marseille"
data_textuelle <- data_textuelle %>%
mutate(
info_complete = paste(nom, adresse, toupper(ville), sep = "-", collapse = "|")
)
liste_decoupee <- str_split(data_collapsed, pattern = fixed("|"))
liste_decoupee
## [[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"
data_textuelle <- data_textuelle %>%
mutate(
# Extraire le genre (Mr/Mme)
genre = str_extract(nom, "^(Mr|Mme)"),
# Extraire le prénom (mot après le genre)
prénom = str_extract(nom, "(?<=Mr|Mme )[A-Za-z]+"),
# Extraire le nom de famille (le reste)
nom_famille = str_extract(nom, "(?<=[A-Za-z] ).+")
)
# Afficher le résultat
print(data_textuelle)
## # A tibble: 3 × 17
## nom adresse ville nom_maj adresse_maj ville_maj nom_min adresse_min
## <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
## 1 Mr Eric Legra… 12 rue… Niort MR ERI… 12 RUE ARC… NIORT mr eri… 12 rue arc…
## 2 Mme Anabelle … 47 ave… Poit… MME AN… 47 AVENUE … POITIERS mme an… 47 avenue …
## 3 Mme Fatou Sla… 3 rue … Mars… MME FA… 3 RUE DES … MARSEILLE mme fa… 3 rue des …
## # ℹ 9 more variables: ville_min <chr>, nom_cap <chr>, adresse_cap <chr>,
## # ville_cap <chr>, adresse_complete <chr>, info_complete <chr>, genre <chr>,
## # prénom <chr>, nom_famille <chr>
data_split_cols <- data_textuelle %>%
separate(nom, into = c("genre", "prenom", "nom"), sep = " ")
data_split_cols
data_text <- tibble( id = 1 :3, texte = c( "La data science est un domaine interdisciplinaire.", "Le text mining permet d’analyser des documents.", "Les ingénieurs utilisent R et Python pour le NLP." ) )
# Identifier les adresses contenant "Libération"
id_liberation <- which(grepl("Libération", data_textuelle$adresse))
# Compter le nombre d'adresses contenant "Libération"
nombre_liberation <- sum(grepl("Libération", data_textuelle$adresse))
# Afficher les résultats
print(id_liberation)
## [1] 2
print(nombre_liberation)
## [1] 1
# Exercice 7 : Nettoyage
data_text_propre <- data_text %>%
mutate(texte = str_to_lower(texte)) %>%
mutate(texte = str_replace_all(texte, "[:punct:]", "")) %>%
mutate(texte = str_replace_all(texte, "[:digit:]", ""))
# Extraire les adresses contenant "Libération"
adresses_liberation <- data_textuelle$adresse[grepl("Libération", data_textuelle$adresse)]
# Afficher le résultat
print(adresses_liberation)
## [1] "47 avenue de la Libération"
# Tokenisation
tokens <- data_text_propre %>%
unnest_tokens(word, texte)
# Calcul de la fréquence
frequence <- tokens %>%
count(word, sort = TRUE)
frequence
# Remplacer "Mr" par "M." dans la colonne `nom`
data_textuelle$nom <- str_replace(data_textuelle$nom, "Mr", "M.")
# Remplacer "rue" par "Rue" et "avenue" par "Avenue" dans la colonne `adresse`
data_textuelle$adresse <- str_replace(data_textuelle$adresse, "rue", "Rue")
data_textuelle$adresse <- str_replace(data_textuelle$adresse, "avenue", "Avenue")
# Isoler les numéros de rue dans une nouvelle colonne `numero_rue`
data_textuelle$numero_rue <- str_extract(data_textuelle$adresse, "^\\d+")
print(data_textuelle)
## # A tibble: 3 × 18
## nom adresse ville nom_maj adresse_maj ville_maj nom_min adresse_min
## <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
## 1 M. Eric Legra… 12 Rue… Niort MR ERI… 12 RUE ARC… NIORT mr eri… 12 rue arc…
## 2 Mme Anabelle … 47 Ave… Poit… MME AN… 47 AVENUE … POITIERS mme an… 47 avenue …
## 3 Mme Fatou Sla… 3 Rue … Mars… MME FA… 3 RUE DES … MARSEILLE mme fa… 3 rue des …
## # ℹ 10 more variables: ville_min <chr>, nom_cap <chr>, adresse_cap <chr>,
## # ville_cap <chr>, adresse_complete <chr>, info_complete <chr>, genre <chr>,
## # prénom <chr>, nom_famille <chr>, numero_rue <chr>
texte_alice <- "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 calcul des probabilités
alice_stats <- tibble(texte = texte_alice) %>%
unnest_tokens(word, texte) %>%
count(word, name = "nb_occurrences") %>%
mutate(probabilite = nb_occurrences / sum(nb_occurrences))
# Évaluation
alice_stats %>%
filter(word %in% c("of", "tom", "was", "to"))
id_liberation <- str_which(data_textuelle$adresse, "Libération")
nombre_concerne <- length(id_liberation)
valeurs_liberation <- str_extract(data_textuelle$adresse, "Libération")
data_textuelle_clean <- data_textuelle %>%
# Remplacer Mr par M.
mutate(nom = str_replace(nom, "Mr", "M.")) %>%
# Remplacer rue/avenue par Rue/Avenue
mutate(adresse = str_replace_all(adresse, c("rue" = "Rue", "avenue" = "Avenue"))) %>%
# Isoler les numéros de rue
mutate(num_rue = str_extract(adresse, "\\d+"))
data_textuelle_clean
# Ajout des espaces
data_espaces <- data_textuelle %>%
mutate(adresse_pad = str_pad(adresse, width = 30, side = "both"))
# Supprimer les espaces
data_espaces %>%
mutate(adresse_clean = str_trim(adresse_pad)) %>%
select(adresse_pad, adresse_clean)
data_textuelle %>%
mutate(
a_un_numero = str_detect(adresse, "[:digit:]+"), # ou "\\d+" [cite: 340]
numero_extrait = str_extract(adresse, "[:digit:]+"))
#création dataframe
df_prix <- tibble(
Id = 1:4,
Montant = c("10$", "20$", "40$", "50$"))
# Détecter le symbole $
str_detect(df_prix$Montant, fixed("$"))
## [1] TRUE TRUE TRUE TRUE
# mean(df_prix$Montant) on a pas réussit
# Nettoyage
df_prix <- df_prix %>%
mutate(Prix = as.numeric(str_replace(Montant, fixed("$"), "")))
mean(df_prix$Prix)
## [1] 30
# 15.1
# Création du Dataframe
df <- tibble(
Id = 1:4,
Montant = c("10$", "20$", "40$", "50$")
)
# 15.2
# Détecter la présence du symbole "$" dans la colonne Montant
presence_dollar <- grepl("\\$", df$Montant)
print(presence_dollar)
## [1] TRUE TRUE TRUE TRUE
# 15.3
# Pour calculer la moyenne de la colonne Montant, il faut d'abord enlever le symbole "$" et convertir les valeurs en numérique avec as.numeric(gsub("\\$", "", Montant)). Ensuite, on peux utiliser mean() pour obtenir la moyenne.
# 15.4
df <- df %>%
mutate(Prix = as.numeric(gsub("\\$", "", Montant)))
moyenne_prix <- mean(df$Prix, na.rm = TRUE)
print(moyenne_prix)
## [1] 30
df
# Chargement des données
library(nycflights13)
flights_logic <- flights %>%
mutate(
retard_dep = dep_delay > 0,
retard_extreme = dep_delay >= 60,
on_time = dep_delay == 0
) %>%
mutate(statut = case_when(
dep_delay > 0 ~ "Retard",
dep_delay == 0 ~ "A l'heure",
dep_delay < 0 ~ "En avance"
))
# Résultat
flights_logic %>% select(dep_delay, retard_dep, retard_extreme, on_time, statut) %>% head()
flights <- flights %>%
mutate(classe_retard = case_when(
dep_delay <= 0 ~ "à l'heure ou avance",
dep_delay >= 1 & dep_delay <= 15 ~ "petit retard",
dep_delay >= 16 & dep_delay <= 60 ~ "retard moyen",
dep_delay > 60 ~ "retard important",
TRUE ~ NA_character_
))
flights
flights <- flights %>%
mutate(
heure_dep = dep_time / 60 # Convertit en décimal pour comparaison
) %>%
mutate(creneau = case_when(
heure_dep >= 5.00 & heure_dep < 8.99 ~ "matin",
heure_dep >= 9.00 & heure_dep < 12.99 ~ "fin matin",
heure_dep >= 13.00 & heure_dep < 16.99 ~ "après-midi",
heure_dep >= 17.00 & heure_dep < 20.99 ~ "soir",
(heure_dep >= 21.00) | (heure_dep < 5.00) ~ "nuit",
TRUE ~ NA_character_
))
flights