Date : 29/01/2025 \[Auteurs : Ben~Iman,~Oumar\]
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
##
## Attaching package: 'lubridate'
## The following objects are masked from 'package:base':
##
## date, intersect, setdiff, union
##
## Attaching package: 'reshape2'
## The following object is masked from 'package:tidyr':
##
## smiths
## ℹ Google's Terms of Service: <https://mapsplatform.google.com>
## Stadia Maps' Terms of Service: <https://stadiamaps.com/terms-of-service/>
## OpenStreetMap's Tile Usage Policy: <https://operations.osmfoundation.org/policies/tiles/>
## ℹ Please cite ggmap if you use it! Use `citation("ggmap")` for details.
# Dates brutes
date_brut <- c("2023/01/01", "2023/01/02", "2023/01/03", "2023/01/04", "2023/01/05", "2023/01/06", "2023/01/07", "2023/01/08", "2023/01/09", "2023/01/10")
Price <- c(100, 105, 110, 108, 112, 115, 118, 120, 122, 125)
# Conversion des dates au format Date en R
date_form_r <- as.Date(date_brut, format = "%Y/%m/%d")
# Création du DataFrame
Data1 <- data.frame(Date = date_form_r, Price = Price)
Data1
## Date Price
## 1 2023-01-01 100
## 2 2023-01-02 105
## 3 2023-01-03 110
## 4 2023-01-04 108
## 5 2023-01-05 112
## 6 2023-01-06 115
## 7 2023-01-07 118
## 8 2023-01-08 120
## 9 2023-01-09 122
## 10 2023-01-10 125
# Création du graphique
ggplot(Data1, aes(x = Date, y = Price)) +
geom_line(color = "blue") + # Ligne bleue pour les prix
geom_point(color = "red") + # Points rouges pour chaque observation
labs(title = "Évolution des Prix au Fil du Temps", x = "Date", y = "Prix") + theme_minimal()
Remarque : Il faudrait arrondir les nombres à virgule à l’unité.
# Générer une séquence de dates
date1 <- as.POSIXct("2016/01/02", format = "%Y/%m/%d")
date2 <- as.POSIXct("2016/10/02", format = "%Y/%m/%d")
dates <- seq(from = date1, to = date2, by = "month") # Séquence mensuelle
#DataFrame avec les dates
data2 <- data.frame(id = 1:length(dates), Dates = dates)
# Ajouter les colonnes annee et mois en utilisant mutate et les fonctions year et month de lubridate
data2 <- data2 %>%mutate(
mois = month(Dates), # Extraire le mois
semaine = week(Dates), # Extraire le numéro de la semaine
jour = weekdays(Dates) # Extraire le jour
)
#Affichage
data2
## id Dates mois semaine jour
## 1 1 2016-01-02 1 1 Saturday
## 2 2 2016-02-02 2 5 Tuesday
## 3 3 2016-03-02 3 9 Wednesday
## 4 4 2016-04-02 4 14 Saturday
## 5 5 2016-05-02 5 18 Monday
## 6 6 2016-06-02 6 22 Thursday
## 7 7 2016-07-02 7 27 Saturday
## 8 8 2016-08-02 8 31 Tuesday
## 9 9 2016-09-02 9 36 Friday
## 10 10 2016-10-02 10 40 Sunday
# Générer une séquence de dates en inculant le temps
date1 <- as.POSIXct("23/01/2025 15:00:00", format = "%d/%m/%Y %H:%M:%S", tz = "UTC")
date2 <- as.POSIXct("23/01/2025 21:00:00", format = "%d/%m/%Y %H:%M:%S", tz = "UTC")
# Générer une séquence horaire entre date1 et date2 ; intervalle: 1 heure
x <- seq(from = date1, to = date2, by = "hour")
data3 <- data.frame(id = 1:length(x),Temps = x) # Séquence horaire
# Ajouter des colonnes correspondant aux minutes et secondes
data3 <- data3 %>%mutate(minutes = minute(Temps),secondes = second(Temps))
# Afficher le DataFrame résultant
data3
## id Temps minutes secondes
## 1 1 2025-01-23 15:00:00 0 0
## 2 2 2025-01-23 16:00:00 0 0
## 3 3 2025-01-23 17:00:00 0 0
## 4 4 2025-01-23 18:00:00 0 0
## 5 5 2025-01-23 19:00:00 0 0
## 6 6 2025-01-23 20:00:00 0 0
## 7 7 2025-01-23 21:00:00 0 0
Errare humanum
# Date de base : aujourdh'hui
today <- Sys.Date()
# Exemple de DataFrame avec des temps écoulés
data4 <- data.frame(
Date = seq(today, length.out = 10, by = "days")
)
# Ajout des colonnes
data4$Jours_ecoules <- as.numeric(today - data4$Date)
data4$Semaines_ecoulees <- data4$Jours_ecoules / 7
data4$Mois_ecoules <- data4$Jours_ecoules / 30
data4$Annees_ecoulees <- data4$Jours_ecoules / 365
data4
## Date Jours_ecoules Semaines_ecoulees Mois_ecoules Annees_ecoulees
## 1 2025-02-17 0 0.0000000 0.00000000 0.000000000
## 2 2025-02-18 -1 -0.1428571 -0.03333333 -0.002739726
## 3 2025-02-19 -2 -0.2857143 -0.06666667 -0.005479452
## 4 2025-02-20 -3 -0.4285714 -0.10000000 -0.008219178
## 5 2025-02-21 -4 -0.5714286 -0.13333333 -0.010958904
## 6 2025-02-22 -5 -0.7142857 -0.16666667 -0.013698630
## 7 2025-02-23 -6 -0.8571429 -0.20000000 -0.016438356
## 8 2025-02-24 -7 -1.0000000 -0.23333333 -0.019178082
## 9 2025-02-25 -8 -1.1428571 -0.26666667 -0.021917808
## 10 2025-02-26 -9 -1.2857143 -0.30000000 -0.024657534
Une série temporelle, c’est une suite de données qui change avec le temps. Par exemple, les températures chaque jour ou le nombre de ventes chaque mois. On les organise pour voir comment elles évoluent au fil du temps.
# === Création d'une série temporelle annuelle avec des valeurs de 1 à 20 ===
serie_annuelle <- ts(1:20, start = 2003, frequency = 1)
# La série commence en 2003 et chaque observation correspond à une année (fréquence = 1)
# === Création d'une série temporelle mensuelle avec des valeurs de 41 à 60 ===
serie_mensuelle <- ts(41:60, start = c(2003, 1), frequency = 12)
# La série commence en janvier 2003, chaque observation représente un mois (fréquence = 12)
# === Création d'une série temporelle trimestrielle avec des valeurs de 41 à 60 ===
serie_trimestrielle <- ts(41:60, start = c(2003, 1), frequency = 4)
# La série commence au premier trimestre 2003, chaque observation représente un trimestre (fréquence = 4)
data <- data.frame(
Time = time(serie_mensuelle),
Value = as.numeric(serie_mensuelle)
)
ggplot(data, aes(x = Time, y = Value)) +
geom_line(color = "blue") +
labs(title = "Série Temporelle", x = "Temps", y = "Valeur") +
theme_minimal()
## Don't know how to automatically pick scale for object of type <ts>. Defaulting
## to continuous.
# Création du DataFrame
date_start <- as.Date("2023-01-01")
sales_data <- data.frame(
Date = seq(from = date_start, by = "day", length.out = 40),
Sales = seq(from = 0, by = 1, length.out = 40)
)
# Affichage
sales_data
## Date Sales
## 1 2023-01-01 0
## 2 2023-01-02 1
## 3 2023-01-03 2
## 4 2023-01-04 3
## 5 2023-01-05 4
## 6 2023-01-06 5
## 7 2023-01-07 6
## 8 2023-01-08 7
## 9 2023-01-09 8
## 10 2023-01-10 9
## 11 2023-01-11 10
## 12 2023-01-12 11
## 13 2023-01-13 12
## 14 2023-01-14 13
## 15 2023-01-15 14
## 16 2023-01-16 15
## 17 2023-01-17 16
## 18 2023-01-18 17
## 19 2023-01-19 18
## 20 2023-01-20 19
## 21 2023-01-21 20
## 22 2023-01-22 21
## 23 2023-01-23 22
## 24 2023-01-24 23
## 25 2023-01-25 24
## 26 2023-01-26 25
## 27 2023-01-27 26
## 28 2023-01-28 27
## 29 2023-01-29 28
## 30 2023-01-30 29
## 31 2023-01-31 30
## 32 2023-02-01 31
## 33 2023-02-02 32
## 34 2023-02-03 33
## 35 2023-02-04 34
## 36 2023-02-05 35
## 37 2023-02-06 36
## 38 2023-02-07 37
## 39 2023-02-08 38
## 40 2023-02-09 39
# Reechantillonnage
ventes_mois_data <- sales_data%>%mutate(Mois = format(Date, "%Y-%m")) %>% group_by(Mois) %>% summarise(Ventes_totale = sum(Sales))
ventes_mois_data
## # A tibble: 2 × 2
## Mois Ventes_totale
## <chr> <dbl>
## 1 2023-01 465
## 2 2023-02 315
sales_data <-sales_data%>%mutate(Changement_quotidien = c(NA, diff(Sales)))
# Utilisation de la fonction mutate pour ajouter une nouvelle colonne
# La nouvelle colonne s'appelle 'Changement_quotidien' et contient les
# La fonction diff calcule la différence entre les éléments successifs du vecteur 'Sales'
# c(NA, ...) ajoute un NA au début du vecteur résultant pour aligner correctement les différences avec les dates
sales_data
## Date Sales Changement_quotidien
## 1 2023-01-01 0 NA
## 2 2023-01-02 1 1
## 3 2023-01-03 2 1
## 4 2023-01-04 3 1
## 5 2023-01-05 4 1
## 6 2023-01-06 5 1
## 7 2023-01-07 6 1
## 8 2023-01-08 7 1
## 9 2023-01-09 8 1
## 10 2023-01-10 9 1
## 11 2023-01-11 10 1
## 12 2023-01-12 11 1
## 13 2023-01-13 12 1
## 14 2023-01-14 13 1
## 15 2023-01-15 14 1
## 16 2023-01-16 15 1
## 17 2023-01-17 16 1
## 18 2023-01-18 17 1
## 19 2023-01-19 18 1
## 20 2023-01-20 19 1
## 21 2023-01-21 20 1
## 22 2023-01-22 21 1
## 23 2023-01-23 22 1
## 24 2023-01-24 23 1
## 25 2023-01-25 24 1
## 26 2023-01-26 25 1
## 27 2023-01-27 26 1
## 28 2023-01-28 27 1
## 29 2023-01-29 28 1
## 30 2023-01-30 29 1
## 31 2023-01-31 30 1
## 32 2023-02-01 31 1
## 33 2023-02-02 32 1
## 34 2023-02-03 33 1
## 35 2023-02-04 34 1
## 36 2023-02-05 35 1
## 37 2023-02-06 36 1
## 38 2023-02-07 37 1
## 39 2023-02-08 38 1
## 40 2023-02-09 39 1
# Calcul de la moyenne mobile sur 3 jours
sales_data_2 <- sales_data %>%mutate(
Moyennes_mobile_3j = zoo::rollmean(Sales, k = 3, fill = NA, align = "right")
# La fonction rollmean calcule la moyenne mobile sur une fenêtre de taille k (ici 3 jours)
# fill = NA indique de remplir les valeurs manquantes avec NA
# align = "right" indique que la fenêtre de calcul est alignée à droite, c'est-à-dire que chaque valeur de la moyenne mobile
# correspond à la moyenne des 3 jours précédents
)
# Affichage du DataFrame mis à jour pour visualiser les résultats
sales_data_2
## Date Sales Changement_quotidien Moyennes_mobile_3j
## 1 2023-01-01 0 NA NA
## 2 2023-01-02 1 1 NA
## 3 2023-01-03 2 1 1
## 4 2023-01-04 3 1 2
## 5 2023-01-05 4 1 3
## 6 2023-01-06 5 1 4
## 7 2023-01-07 6 1 5
## 8 2023-01-08 7 1 6
## 9 2023-01-09 8 1 7
## 10 2023-01-10 9 1 8
## 11 2023-01-11 10 1 9
## 12 2023-01-12 11 1 10
## 13 2023-01-13 12 1 11
## 14 2023-01-14 13 1 12
## 15 2023-01-15 14 1 13
## 16 2023-01-16 15 1 14
## 17 2023-01-17 16 1 15
## 18 2023-01-18 17 1 16
## 19 2023-01-19 18 1 17
## 20 2023-01-20 19 1 18
## 21 2023-01-21 20 1 19
## 22 2023-01-22 21 1 20
## 23 2023-01-23 22 1 21
## 24 2023-01-24 23 1 22
## 25 2023-01-25 24 1 23
## 26 2023-01-26 25 1 24
## 27 2023-01-27 26 1 25
## 28 2023-01-28 27 1 26
## 29 2023-01-29 28 1 27
## 30 2023-01-30 29 1 28
## 31 2023-01-31 30 1 29
## 32 2023-02-01 31 1 30
## 33 2023-02-02 32 1 31
## 34 2023-02-03 33 1 32
## 35 2023-02-04 34 1 33
## 36 2023-02-05 35 1 34
## 37 2023-02-06 36 1 35
## 38 2023-02-07 37 1 36
## 39 2023-02-08 38 1 37
## 40 2023-02-09 39 1 38
# Graphique de l'évolution des ventes quotidiennes
ggplot(sales_data, aes(x = Date, y = Sales)) + geom_line(color = "blue") + labs(title = "Évolution des ventes quotidiennes", x = "Date", y = "Ventes") + theme_minimal()
ggplot(ventes_mois_data, aes(x = Mois, y = Ventes_totale)) +
geom_bar(stat = "identity", fill = "orange") +
labs(title = "Ventes totales par mois", x = "Mois", y = "Ventes totales") +
theme_minimal()
ggplot(sales_data, aes(x = Date, y = Changement_quotidien)) + geom_bar(stat = "identity", fill = "purple") + labs(title = "Variations journalières des ventes", x = "Date", y = "Variation") + theme_minimal()
## Warning: Removed 1 row containing missing values or values outside the scale range
## (`geom_bar()`).
Remarque : Il y a des valeurs vides dans la colonne “changement
quotidien”, d’où le message d’avertissement (“warning”).
# Affichage du graphique avec les données mises à jour
ggplot(sales_data_2, aes(x = Date, y = Moyennes_mobile_3j)) +
geom_line(color = "green") +
labs(title = "Moyenne mobile sur 3 jours", x = "Date", y = "Moyenne mobile") +
theme_minimal()
## Warning: Removed 2 rows containing missing values or values outside the scale range
## (`geom_line()`).
Même remarque que précédemment
\[Author : Ben~Iman~ABDALLAH\] - Date : 01/2025
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"))
data_textuelle
## # A tibble: 3 × 3
## nom adresse ville
## <chr> <chr> <chr>
## 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
▶ Je transforme les noms, adresses et ville en majuscules, minuscules et capitalisant dans le tableau précédent.
data_textuelle_change_1 <- data_textuelle%>%mutate(
nom_min = str_to_lower(nom),
nom_maj = str_to_upper(nom),
adresse_min =str_to_lower(adresse),
adresse_maj = str_to_upper(adresse),
ville_min = str_to_lower(ville), ville_maj = str_to_upper(ville))
data_textuelle_change_1
## # A tibble: 3 × 9
## nom adresse ville nom_min nom_maj adresse_min adresse_maj ville_min
## <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
## 1 Mr Eric Legra… 12 rue… Niort mr eri… MR ERI… 12 rue arc… 12 RUE ARC… niort
## 2 Mme Anabelle … 47 ave… Poit… mme an… MME AN… 47 avenue … 47 AVENUE … poitiers
## 3 Mme Fatou Sla… 3 rue … Mars… mme fa… MME FA… 3 rue des … 3 RUE DES … marseille
## # ℹ 1 more variable: ville_maj <chr>
data_textuelle_change_2 <- data_textuelle%>%mutate(adresse_complete = paste(adresse,str_to_upper(ville)))
data_textuelle_change_2[,c(4)] # J'affiche que la colonne avec les modifications
## # A tibble: 3 × 1
## adresse_complete
## <chr>
## 1 12 rue Archimède NIORT
## 2 47 avenue de la Libération POITIERS
## 3 3 rue des Fleurs MARSEILLE
Remarque : La fonction mutate ne fonctionne que
sur des vecteurs
sep qui
permet de concaténer deux chaînes de caractères avec un séparateur que
nous pouvons définir nous-mêmes.# Séparateur : sep et collapse : délimite et colle
data_textuelle_change_3 <- data_textuelle%>%mutate(adresse_complete_sep = paste(nom, adresse, str_to_upper(ville), sep ="|"))
data_textuelle_change_3[,c(4)] # Nous affichons que la colonne avec les modification
## # A tibble: 3 × 1
## adresse_complete_sep
## <chr>
## 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
str_split().adresse_complete_spliter <- str_split(data_textuelle_change_3$adresse_complete_sep,pattern = "\\|")
adresse_complete_spliter
## [[1]]
## [1] "Mr Eric Legrand" "12 rue Archimède" "NIORT"
##
## [[2]]
## [1] "Mme Anabelle Dupont" "47 avenue de la Libération"
## [3] "POITIERS"
##
## [[3]]
## [1] "Mme Fatou Slaoui" "3 rue des Fleurs" "MARSEILLE"
— PARTIE EN CONSTRUCTION —
#
#variable = c()
#decoupage <- separate(variable, into=c("genre", "prenom", "nom"))
Conseil : que les noms des variables soient parlants, des noms de variables explicites.
data_dechet <- read_csv("Dechets.csv")
## Rows: 1052 Columns: 9
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (4): Domaine, waste_type, geometry, commune
## dbl (5): Identifiant, Deep, waste_number, X, Y
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
# Afficher les premières lignes du fichier importé
head(data_dechet)
## # A tibble: 6 × 9
## Identifiant Deep Domaine waste_type waste_number X Y geometry
## <dbl> <dbl> <chr> <chr> <dbl> <dbl> <dbl> <chr>
## 1 1 5.26 public vehicle scrap 1 524333. 8588954. c(52433…
## 2 2 -1.6 public solid waste 4 524316. 8588991. c(52431…
## 3 3 -5.38 public vehicle scrap 3 524307. 8589054. c(52430…
## 4 4 1.3 public solid waste 1 524281. 8589068. c(52428…
## 5 5 -2.66 public vehicle scrap 1 524213. 8589098. c(52421…
## 6 6 6.9 public droppings 1 524050. 8589171. c(52404…
## # ℹ 1 more variable: commune <chr>
ggplot(data_dechet, aes(X,Y)) + geom_point()
Remarque : Stadia Maps est un service qui permet de montrer des cartes sur internet. C’est un peu comme un plan interactif que l’on peut explorer pour voir des endroits, des routes et des lieux différents.
us = c(left = -125, right = -67, bottom = 25.75, top = 49)
map = get_stadiamap(us, zoom = 5, maptype ="stamen_toner_lite")
## ℹ © Stadia Maps © Stamen Design © OpenMapTiles © OpenStreetMap contributors.
ggmap(map)
- Pour Mayotte mon île !
# Coordonnes délimitant Mayotte
#left : latitude minimum ; bottom : longitude minimum
mayotte_bbox <- c(left = 45.0183, bottom = -13.0208, right = 45.2991, top = -12.6364)
# Obtenir la carte de Mayotte
map_mayotte <- get_stadiamap(bbox = mayotte_bbox, zoom = 12, maptype = "stamen_toner_lite")
## ℹ © Stadia Maps © Stamen Design © OpenMapTiles © OpenStreetMap contributors.
# Afficher la carte avec ggmap
ggmap(map_mayotte) + labs(title = "Carte de Mayotte")
europe = c(left = -12, right = 30, bottom = 35, top = 63)
get_stadiamap(europe, zoom = 5,"stamen_toner_lite")%>%ggmap()
## ℹ © Stadia Maps © Stamen Design © OpenMapTiles © OpenStreetMap contributors.
dechet_yt_points <- read_excel("points_noirs.xlsx", skip = 1 )
dechet_yt_points <- dechet_yt_points%>%mutate(x = as.numeric(x), y = as.numeric(y))
head(dechet_yt_points)
## # A tibble: 6 × 7
## Identifiant x y `Z(HAE)` Domaine type_signa nb_signa
## <dbl> <dbl> <dbl> <chr> <chr> <chr> <dbl>
## 1 1 45.2 -12.8 5.26 public carcasse voiture 1
## 2 2 45.2 -12.8 -1.6 public encombrants 4
## 3 3 45.2 -12.8 -5.38 public carcasse voiture 3
## 4 4 45.2 -12.8 1.3 public encombrants 1
## 5 5 45.2 -12.8 -2.66 public carcasse voiture 1
## 6 6 45.2 -12.8 6.9 public depot sauvage 1
ggmap(map_mayotte, base_layer=ggplot(dechet_yt_points, aes(x, y,color="red"))) + geom_point()
qmplot(x, y, data = dechet_yt_points, maptype = "stamen_toner_lite", color = I("blue"))
## ℹ Using `zoom = 12`
## ℹ © Stadia Maps © Stamen Design © OpenMapTiles © OpenStreetMap contributors.
#library(sf)
#Data_sf =st_read(dsn =system.file("shape/nc.shp", package ="sf"), quiet = TRUE)
\[FIN\]