Introduction au langage R et à Quarto

Author

Karim Kilani

Initation à markdwon

On peut écrire du texte en gras et en italique. On peut écrire des formules mathématiques en \(\LaTeX\).

Par exemple une intégrale

\[ \int_{-\infty}^{+\infty}e^{-x^2}dx=\sqrt{\pi} \]

Si vous voulez exécuter des codes en R, il suffit de créer un chunk. Le chunk qui suit affiche les nombres entiers de 1 à 20.

seq(1,20) # Première manière (ceci est un commentaire)
 [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20
1:20  # Autre manière de créer cette séquence de nommbres
 [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20

Si on veut afficher les années des coupes du monde de football de 1970 (Mexico) et 2026 (Amérique)

seq(1970,2026,4) # Est une fonction de base de R
 [1] 1970 1974 1978 1982 1986 1990 1994 1998 2002 2006 2010 2014 2018 2022 2026

Quelques généralités

Nous allons apprendre à coder avec R mais en utilsant de manière intensive le “Tidyvese”.

Comment citer une référence bibligraphique dans Quarto

Je vous montre comment citer une référence bibligrahique avec BibTex

Nous allons cite l’article de Wickham et al. (2019) comme exemple.

Le tidyverse est un ensemble de packages R dédiés à la data science. Ces packages reposent sur une même philosophie, une même grammaire et des structures de données communes, ce qui permet de manipuler, transformer et visualiser les données de façon simple et harmonisée.

Nous installons Tidyverse pour pouvoir les utiliser. On doit ensuite appeler le package.

Petite illustraion. Chargeons des données disponibles dans R.

Manipulation standard de data frame dans R

data()

dfcars<-mtcars
dfcars
                     mpg cyl  disp  hp drat    wt  qsec vs am gear carb
Mazda RX4           21.0   6 160.0 110 3.90 2.620 16.46  0  1    4    4
Mazda RX4 Wag       21.0   6 160.0 110 3.90 2.875 17.02  0  1    4    4
Datsun 710          22.8   4 108.0  93 3.85 2.320 18.61  1  1    4    1
Hornet 4 Drive      21.4   6 258.0 110 3.08 3.215 19.44  1  0    3    1
Hornet Sportabout   18.7   8 360.0 175 3.15 3.440 17.02  0  0    3    2
Valiant             18.1   6 225.0 105 2.76 3.460 20.22  1  0    3    1
Duster 360          14.3   8 360.0 245 3.21 3.570 15.84  0  0    3    4
Merc 240D           24.4   4 146.7  62 3.69 3.190 20.00  1  0    4    2
Merc 230            22.8   4 140.8  95 3.92 3.150 22.90  1  0    4    2
Merc 280            19.2   6 167.6 123 3.92 3.440 18.30  1  0    4    4
Merc 280C           17.8   6 167.6 123 3.92 3.440 18.90  1  0    4    4
Merc 450SE          16.4   8 275.8 180 3.07 4.070 17.40  0  0    3    3
Merc 450SL          17.3   8 275.8 180 3.07 3.730 17.60  0  0    3    3
Merc 450SLC         15.2   8 275.8 180 3.07 3.780 18.00  0  0    3    3
Cadillac Fleetwood  10.4   8 472.0 205 2.93 5.250 17.98  0  0    3    4
Lincoln Continental 10.4   8 460.0 215 3.00 5.424 17.82  0  0    3    4
Chrysler Imperial   14.7   8 440.0 230 3.23 5.345 17.42  0  0    3    4
Fiat 128            32.4   4  78.7  66 4.08 2.200 19.47  1  1    4    1
Honda Civic         30.4   4  75.7  52 4.93 1.615 18.52  1  1    4    2
Toyota Corolla      33.9   4  71.1  65 4.22 1.835 19.90  1  1    4    1
Toyota Corona       21.5   4 120.1  97 3.70 2.465 20.01  1  0    3    1
Dodge Challenger    15.5   8 318.0 150 2.76 3.520 16.87  0  0    3    2
AMC Javelin         15.2   8 304.0 150 3.15 3.435 17.30  0  0    3    2
Camaro Z28          13.3   8 350.0 245 3.73 3.840 15.41  0  0    3    4
Pontiac Firebird    19.2   8 400.0 175 3.08 3.845 17.05  0  0    3    2
Fiat X1-9           27.3   4  79.0  66 4.08 1.935 18.90  1  1    4    1
Porsche 914-2       26.0   4 120.3  91 4.43 2.140 16.70  0  1    5    2
Lotus Europa        30.4   4  95.1 113 3.77 1.513 16.90  1  1    5    2
Ford Pantera L      15.8   8 351.0 264 4.22 3.170 14.50  0  1    5    4
Ferrari Dino        19.7   6 145.0 175 3.62 2.770 15.50  0  1    5    6
Maserati Bora       15.0   8 301.0 335 3.54 3.570 14.60  0  1    5    8
Volvo 142E          21.4   4 121.0 109 4.11 2.780 18.60  1  1    4    2
dfcars$mpg # On affiche les 32 valeurs pour la variable mpg (miles per Gallon) nombre de miles par Gallon
 [1] 21.0 21.0 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 17.8 16.4 17.3 15.2 10.4
[16] 10.4 14.7 32.4 30.4 33.9 21.5 15.5 15.2 13.3 19.2 27.3 26.0 30.4 15.8 19.7
[31] 15.0 21.4
dfcars[,1] # Affiche la première variables du dataframe
 [1] 21.0 21.0 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 17.8 16.4 17.3 15.2 10.4
[16] 10.4 14.7 32.4 30.4 33.9 21.5 15.5 15.2 13.3 19.2 27.3 26.0 30.4 15.8 19.7
[31] 15.0 21.4
dfcars[1,] # Affiche la 11 variables pour la première voiture
          mpg cyl disp  hp drat   wt  qsec vs am gear carb
Mazda RX4  21   6  160 110  3.9 2.62 16.46  0  1    4    4
dfcars[1,1] # Affiche la premiere variable pour la première voiture
[1] 21

Les mêmes manipulations mais avec le tidyverse avec utilisation de pipes.

library(tidyverse)
── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
✔ dplyr     1.1.4     ✔ readr     2.1.6
✔ forcats   1.0.1     ✔ stringr   1.6.0
✔ ggplot2   4.0.1     ✔ tibble    3.3.0
✔ lubridate 1.9.4     ✔ tidyr     1.3.2
✔ purrr     1.2.0     
── 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
dfcars |> dplyr::select(mpg) # Sélectionne la variables mpg (|> c'est le pipe)
                     mpg
Mazda RX4           21.0
Mazda RX4 Wag       21.0
Datsun 710          22.8
Hornet 4 Drive      21.4
Hornet Sportabout   18.7
Valiant             18.1
Duster 360          14.3
Merc 240D           24.4
Merc 230            22.8
Merc 280            19.2
Merc 280C           17.8
Merc 450SE          16.4
Merc 450SL          17.3
Merc 450SLC         15.2
Cadillac Fleetwood  10.4
Lincoln Continental 10.4
Chrysler Imperial   14.7
Fiat 128            32.4
Honda Civic         30.4
Toyota Corolla      33.9
Toyota Corona       21.5
Dodge Challenger    15.5
AMC Javelin         15.2
Camaro Z28          13.3
Pontiac Firebird    19.2
Fiat X1-9           27.3
Porsche 914-2       26.0
Lotus Europa        30.4
Ford Pantera L      15.8
Ferrari Dino        19.7
Maserati Bora       15.0
Volvo 142E          21.4
select(dfcars,mpg)   # Refaison la meme ligne ci-dessus sans pipe
                     mpg
Mazda RX4           21.0
Mazda RX4 Wag       21.0
Datsun 710          22.8
Hornet 4 Drive      21.4
Hornet Sportabout   18.7
Valiant             18.1
Duster 360          14.3
Merc 240D           24.4
Merc 230            22.8
Merc 280            19.2
Merc 280C           17.8
Merc 450SE          16.4
Merc 450SL          17.3
Merc 450SLC         15.2
Cadillac Fleetwood  10.4
Lincoln Continental 10.4
Chrysler Imperial   14.7
Fiat 128            32.4
Honda Civic         30.4
Toyota Corolla      33.9
Toyota Corona       21.5
Dodge Challenger    15.5
AMC Javelin         15.2
Camaro Z28          13.3
Pontiac Firebird    19.2
Fiat X1-9           27.3
Porsche 914-2       26.0
Lotus Europa        30.4
Ford Pantera L      15.8
Ferrari Dino        19.7
Maserati Bora       15.0
Volvo 142E          21.4
dfcars |> dplyr::select(7,8,9,10,11) # Sélectionne les variables de 7 à 11
                     qsec vs am gear carb
Mazda RX4           16.46  0  1    4    4
Mazda RX4 Wag       17.02  0  1    4    4
Datsun 710          18.61  1  1    4    1
Hornet 4 Drive      19.44  1  0    3    1
Hornet Sportabout   17.02  0  0    3    2
Valiant             20.22  1  0    3    1
Duster 360          15.84  0  0    3    4
Merc 240D           20.00  1  0    4    2
Merc 230            22.90  1  0    4    2
Merc 280            18.30  1  0    4    4
Merc 280C           18.90  1  0    4    4
Merc 450SE          17.40  0  0    3    3
Merc 450SL          17.60  0  0    3    3
Merc 450SLC         18.00  0  0    3    3
Cadillac Fleetwood  17.98  0  0    3    4
Lincoln Continental 17.82  0  0    3    4
Chrysler Imperial   17.42  0  0    3    4
Fiat 128            19.47  1  1    4    1
Honda Civic         18.52  1  1    4    2
Toyota Corolla      19.90  1  1    4    1
Toyota Corona       20.01  1  0    3    1
Dodge Challenger    16.87  0  0    3    2
AMC Javelin         17.30  0  0    3    2
Camaro Z28          15.41  0  0    3    4
Pontiac Firebird    17.05  0  0    3    2
Fiat X1-9           18.90  1  1    4    1
Porsche 914-2       16.70  0  1    5    2
Lotus Europa        16.90  1  1    5    2
Ford Pantera L      14.50  0  1    5    4
Ferrari Dino        15.50  0  1    5    6
Maserati Bora       14.60  0  1    5    8
Volvo 142E          18.60  1  1    4    2
dfcars |> dplyr::select(7:11) # Sélectionne les variables de 7 à 11
                     qsec vs am gear carb
Mazda RX4           16.46  0  1    4    4
Mazda RX4 Wag       17.02  0  1    4    4
Datsun 710          18.61  1  1    4    1
Hornet 4 Drive      19.44  1  0    3    1
Hornet Sportabout   17.02  0  0    3    2
Valiant             20.22  1  0    3    1
Duster 360          15.84  0  0    3    4
Merc 240D           20.00  1  0    4    2
Merc 230            22.90  1  0    4    2
Merc 280            18.30  1  0    4    4
Merc 280C           18.90  1  0    4    4
Merc 450SE          17.40  0  0    3    3
Merc 450SL          17.60  0  0    3    3
Merc 450SLC         18.00  0  0    3    3
Cadillac Fleetwood  17.98  0  0    3    4
Lincoln Continental 17.82  0  0    3    4
Chrysler Imperial   17.42  0  0    3    4
Fiat 128            19.47  1  1    4    1
Honda Civic         18.52  1  1    4    2
Toyota Corolla      19.90  1  1    4    1
Toyota Corona       20.01  1  0    3    1
Dodge Challenger    16.87  0  0    3    2
AMC Javelin         17.30  0  0    3    2
Camaro Z28          15.41  0  0    3    4
Pontiac Firebird    17.05  0  0    3    2
Fiat X1-9           18.90  1  1    4    1
Porsche 914-2       16.70  0  1    5    2
Lotus Europa        16.90  1  1    5    2
Ford Pantera L      14.50  0  1    5    4
Ferrari Dino        15.50  0  1    5    6
Maserati Bora       14.60  0  1    5    8
Volvo 142E          18.60  1  1    4    2
dfcars |> dplyr::select(mpg)
                     mpg
Mazda RX4           21.0
Mazda RX4 Wag       21.0
Datsun 710          22.8
Hornet 4 Drive      21.4
Hornet Sportabout   18.7
Valiant             18.1
Duster 360          14.3
Merc 240D           24.4
Merc 230            22.8
Merc 280            19.2
Merc 280C           17.8
Merc 450SE          16.4
Merc 450SL          17.3
Merc 450SLC         15.2
Cadillac Fleetwood  10.4
Lincoln Continental 10.4
Chrysler Imperial   14.7
Fiat 128            32.4
Honda Civic         30.4
Toyota Corolla      33.9
Toyota Corona       21.5
Dodge Challenger    15.5
AMC Javelin         15.2
Camaro Z28          13.3
Pontiac Firebird    19.2
Fiat X1-9           27.3
Porsche 914-2       26.0
Lotus Europa        30.4
Ford Pantera L      15.8
Ferrari Dino        19.7
Maserati Bora       15.0
Volvo 142E          21.4

Calculer des statistiques avec tidyverse

dfcars |>
  dplyr::select(mpg) |>
  summarise(moy_mpg = mean(mpg) ) # Nombre de miles moyen par gallon pour les 32 voitures
   moy_mpg
1 20.09062
# Faisons moyenne écart-type
stat_des<-dfcars |>
  select(mpg) |>
  summarise("moyenne" = mean(mpg), "écart-type" = sd(mpg) ,minimum = min(mpg),  maximum = max(mpg))

stat_des
   moyenne écart-type minimum maximum
1 20.09062   6.026948    10.4    33.9

Introduction aux graphiques avec R

Faisons un histogramme de la variable mpg

On commence par un histogramme très basique et on fera ensuite du ggplot de tidyverse.

dfcars$mpg|>hist(main="Histogramme de MPG pour les 32 voitures")

dfcars |>
  filter(mpg >= 30 & mpg <= 35)
                mpg cyl disp  hp drat    wt  qsec vs am gear carb
Fiat 128       32.4   4 78.7  66 4.08 2.200 19.47  1  1    4    1
Honda Civic    30.4   4 75.7  52 4.93 1.615 18.52  1  1    4    2
Toyota Corolla 33.9   4 71.1  65 4.22 1.835 19.90  1  1    4    1
Lotus Europa   30.4   4 95.1 113 3.77 1.513 16.90  1  1    5    2

Les graphiques avec ggplot2

library(ggthemes)
dfcars |> ggplot(aes(x = mpg)) + 
  geom_histogram(fill ="red",binwidth =5,col="black")+
  ggtitle("Histogramme de MPG")+
  ylab("Nombre de voitures")+
  theme_economist()

Charger des données excel ou csv sur R

  1. Il faut mettre les data sur votre disque.
  2. Charger dans positcloud
library(tidyverse)
library(readr)
keno_202511 <- read_delim("keno_202511.csv", 
    delim = ";", escape_double = FALSE, col_types = cols(date_de_forclusion = col_skip(), 
        ...23 = col_skip()), trim_ws = TRUE)
New names:
• `` -> `...23`

Pivot longer

# Un tibble c'est une sorte de data frame secifique au tidyverse

table4a <- tibble(
  country = c("A", "B", "C"),
  `1999`  = c(700, 37000, 212000),
  `2000`  = c(2000, 80000, 213000)
)
table4a
# A tibble: 3 × 3
  country `1999` `2000`
  <chr>    <dbl>  <dbl>
1 A          700   2000
2 B        37000  80000
3 C       212000 213000
table4a |> pivot_longer(cols = 2:3, names_to ="year",
values_to = "cases")
# A tibble: 6 × 3
  country year   cases
  <chr>   <chr>  <dbl>
1 A       1999     700
2 A       2000    2000
3 B       1999   37000
4 B       2000   80000
5 C       1999  212000
6 C       2000  213000
keno_longer<-keno_202511|>select(-c(1,"multiplicateur","numero_jokerplus","devise"))|>pivot_longer(cols=2:17,names_to ="boule",
       names_prefix = "boule",values_to = "Numéro")


keno_longer
# A tibble: 1,600 × 3
   date_de_tirage boule Numéro
   <chr>          <chr>  <dbl>
 1 10/02/2026     1         12
 2 10/02/2026     2         13
 3 10/02/2026     3         17
 4 10/02/2026     4         20
 5 10/02/2026     5         22
 6 10/02/2026     6         23
 7 10/02/2026     7         26
 8 10/02/2026     8         27
 9 10/02/2026     9         39
10 10/02/2026     10        42
# ℹ 1,590 more rows
keno_202511 <- keno_202511 %>%
  mutate(date_de_tirage = as.Date(date_de_tirage, format = "%d/%m/%Y"))

keno_202511 %>%
  summarise(
    date_min = format(min(date_de_tirage), "%d/%m/%Y"),
    date_max = format(max(date_de_tirage), "%d/%m/%Y")
  )
# A tibble: 1 × 2
  date_min   date_max  
  <chr>      <chr>     
1 03/11/2025 10/02/2026
keno_long <- keno_202511 %>%
  select(-annee_numero_de_tirage, -devise, -numero_jokerplus) %>%
  pivot_longer(
    cols = boule1:boule16,
    names_to = "boule",
    names_prefix = "boule",
    names_transform = list(boule = as.integer),
    values_to = "numero"
  )



table_freq <- keno_long %>%
  count(numero, name = "Nombre de sorties") %>%
  complete(numero = 1:56, fill = list(`Nombre de sorties` = 0)) %>%
  arrange(numero)


library(knitr)

table_freq %>%
  kable(
    col.names = c("Numéro", "Nombre de sorties"),
    caption = "Fréquence d'apparition des numéros (Keno novembre 2025)"
  )
Fréquence d’apparition des numéros (Keno novembre 2025)
Numéro Nombre de sorties
1 30
2 26
3 28
4 32
5 17
6 21
7 37
8 23
9 33
10 30
11 28
12 28
13 38
14 35
15 21
16 23
17 33
18 19
19 38
20 24
21 29
22 20
23 29
24 29
25 27
26 28
27 36
28 33
29 26
30 35
31 29
32 24
33 24
34 25
35 29
36 24
37 29
38 31
39 27
40 27
41 38
42 30
43 25
44 30
45 25
46 32
47 31
48 30
49 32
50 30
51 30
52 29
53 32
54 24
55 33
56 24

References

Wickham, H., Averick, M., Bryan, J., Chang, W., McGowan, L. D., François, R., Grolemund, G., Hayes, A., Henry, L., Hester, J., et al. (2019). Welcome to the tidyverse. Journal of Open Source Software, 4(43), 1686.