Skip to content

Commit 2432795

Browse files
authored
Dev (#39)
* début review * fin relecture, et implémentation des exercices à partir de savoirfR * Correction encodage csv * oubli dépendance savoirFR dans DESCRIPTION
1 parent 6192d3a commit 2432795

14 files changed

+109
-5032
lines changed

.gitignore

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,4 @@ _book
77
_bookdown_files
88
output/*
99
z_archives/*
10-
10+
*.html

02-generalite.Rmd

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,10 @@ cat(a, sep = '\n')
1818

1919
## R c'est quoi ?
2020

21+
![](images/Rlogo.jpg){width=50px}
22+
2123
- Un langage de programmation interprété exécutable pas à pas $\rightarrow$ lignes de code
22-
- Un logiciel interactif permettant de traiter divers types de données
24+
- Un logiciel interactif permettant de traiter divers types de données
2325

2426

2527
## Un peu d'histoire
@@ -31,13 +33,14 @@ Computational and Graphical Statistics*, 5(3), 299–314](https://www.stat.auckl
3133

3234
- S'est d'abord développé dans le monde académique, puis a essaimé vers d'autres domaines professionnels, voire associatifs
3335

34-
3536
- Système toujours d’actualité - Mise à jour tous les 6 mois
3637

37-
- Avenir dans la statistique publique : adopté comme standard par l'Insee (à l'horizon 2025) et divers SSM. Des packages pour :
38+
- Avenir dans la statistique publique : adopté comme standard par l'Insee (à l'horizon 2025) et divers SSM.
39+
40+
- Des packages pour :
3841
- charger les données produites par l'Insee au format sdmx,
3942
- charger les formats des organisations internationales (Eurostat, OCDE, ONU, etc.),
40-
- charger des couches spatiales shp ou autres,
43+
- charger des couches spatiales shp, flux ou autres,
4144
- charger le cadastre au format EDIGEO, ...
4245
- interroger facilement des API,
4346
- interagir avec des bases de données,
@@ -62,14 +65,14 @@ C'est un logiciel libre : les utilisateurs ont la liberté d'exécuter, copier,
6265

6366
## Que peut-on faire avec R ?
6467

65-
- Lire des données de formats divers
68+
- Lire des données de formats divers, les convertir
6669
- Les manipuler (prétraitements)
6770
- Les enrichir à partir de données externes
6871
- Les analyser, les modéliser,
6972
- Présenter les résultats (tableaux, graphiques, cartes)
7073
- Publier...
7174

72-
... et ce au moyen d'une palette de méthodes extrêmement diversifiée.
75+
... et ce au moyen d'une palette de méthodes extrêmement diversifiées.
7376

7477
Privilégie la flexibilité et le découpage des traitements en parties simples.
7578

@@ -88,7 +91,7 @@ De base, R permet déjà de faire un très grand nombre de choses avec son socle
8891
library(help = 'base')
8992
```
9093

91-
Sur ce package `base` vient se greffer un ensemble de packages (plugins, modules) complémentaires.
94+
Sur ce package `base` vient se greffer un ensemble de packages (plugins, modules, librairies, extensions) complémentaires.
9295
Un package est une bibliothèque de fonctions. La plupart de ceux qui font référence sont mis à disposition de tous sur le dépôt CRAN.
9396

9497
Cela permet d'étendre à l'infini les possibilités de R : celles-ci sont seulement limitées par la volonté de développement (et de maintien) des utilisateurs.

03-interface.Rmd

Lines changed: 10 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,15 @@ L’interface RStudio est composée de différents panneaux, dont l’arrangemen
1616
## Session et répertoire de travail
1717

1818
- Session de travail R : commence à l'ouverture de RStudio et se termine en le quittant.
19-
- Répertoire de travail R : dossier dans lequel le logiciel va chercher les fichiers de scripts et de données.
19+
- Répertoire de travail R : dossier à partir duquel le logiciel va chercher les fichiers de scripts et de données.
20+
2021
- Tout ce qui a été fait au cours d'une session peut être enregistré dans le répertoire de travail :
2122
- données
2223
- historique des fonctions …
2324

2425
Nouvelles fonctions |Attention
2526
--------------------------------------------------|----------------------------------------
26-
`setwd()` pour définir un répertoire de travail |Seulement / et pas \\
27+
`setwd()` pour définir un répertoire de travail |Seulement / et pas \\, chemin entre `"path"`
2728
`help()` et ? pour afficher l'aide |.
2829
`dir()` pour lister un répertoire |.
2930

@@ -88,20 +89,11 @@ Nouvelles fonctions |Attention pour le nommage des
8889
Adopter des règles de nommage cohérentes, par exemples [celles-ci](http://adv-r.had.co.nz/Style.html).
8990
ATTENTION : un nom de variable ne peux pas commencer par un chiffre et certains noms sont interdits (voir 4.6)
9091

91-
## C'est à vous : créer et manipuler des variables
92+
## C'est à vous : créer et manipuler des variables (Exercice 1)
93+
94+
```{r mod1_exo1, child=charge_exo("m1", "exo1.rmd"), echo=FALSE}
9295
93-
- Créer plusieurs variables numériques par assignation `a <- 5`, `b <- 4`
94-
- Regarder l'onglet Environnement
95-
- Afficher la liste des variables avec la fonction `ls()`
96-
- Faire un calcul avec ces variables et voir le résultat `(a+b)` etc.
97-
- Créer une troisième variable à partir des deux premières `c <- a+b*3`
98-
- Ré-assigner une variable : `a<-10` et vérifier l'onglet environnement
99-
- Créer une variable chaîne de caractère (utilisation des simples quotes et des double-quotes) `t <- 'chaine'`
100-
- Concaténer `a` et `t` avec `paste(a,t)`
101-
- Expérimenter la casse des noms de variables : créer `A <- 15` et `B <- 12` et vérifier l'onglet environnement
102-
- Supprimer les variables `A` et `B` avec la fonction `rm()`
103-
- Aide en ligne `?ls` et `?rm`
104-
- Attention : Pour supprimer toutes les variables `rm(list = ls())`
96+
```
10597

10698

10799
## Utilité des scripts
@@ -122,9 +114,9 @@ Utilisation simple de R $\rightarrow$ mode console. Chaque ordre, bout de code e
122114

123115
Actions plus complexes, longues, nécessitant une maintenance, des modifications $\rightarrow$ travailler à partir de la fenêtre éditeur. Les parties de code sont enchaînées et enregistrées sous la forme d'un fichier texte réutilisable par la suite.
124116

125-
Toujours utiliser des commentaires. Permet de pouvoir mieux comprendre ce que l'on a fait lorsqu'on reprend un programme plus tard ou lorsqu'on le donne à quelqu'un.
117+
Toujours utiliser des commentaires, indiquer plus le 'pourquoi' que le 'quoi'. Permet de pouvoir mieux comprendre ce que l'on a fait lorsqu'on reprend un programme plus tard ou lorsqu'on le donne à quelqu'un.
126118

127-
## C'est à vous : utiliser un script
119+
## C'est à vous : utiliser un script (Exercice 1bis)
128120

129121
- Recopier le script ci-dessous et changer les paramètres pour le re-exécuter plusieurs fois
130122
- Sauvegarder ce script dans votre répertoire de travail, fermez le
@@ -146,8 +138,8 @@ print (imc)
146138
```
147139

148140
## Installer et charger un *package*
149-
Pour manipuler notre base de données, nous allons nous servir de fonctionnalités présentes dans le package `tidyverse`.
150141

142+
Pour manipuler nos données, nous allons nous servir de fonctionnalités présentes dans le package `tidyverse`.
151143
La première fois que l'on veut utiliser un package, il faut le télécharger sur notre machine, avec `install.packages()` :
152144
```{r, eval=FALSE}
153145
install.packages("tidyverse")

04-get_started.Rmd

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,19 +26,19 @@ Une bonne pratique est de créer un sous répertoire `/data` pour stocker les do
2626

2727
Vous pouvez le faire depuis l'explorateur de fichier de votre système d'exploitation ou directement à partir de l'explorateur de fichier de RStudio.
2828

29-
![](images/creerprojet3.png ){#id .class width=500}
29+
![](images/creerprojet3.png){#id .class width=500}
3030

3131
Cela marche bien quand on a un seul type de données, mais en général on va avoir à travailler sur des données brutes que l'on va retravailler ensuite et vouloir stocker à part. Si par la suite vous souhaitez avoir des exemples de bonnes pratiques sur comment structurer vos données, vous pouvez vous référer au [chapitre data](http://r-pkgs.had.co.nz/data.html) du livre d'Hadley Wickham sur la construction de packages R (tout package R étant aussi un projet !).
3232

3333

3434
## Créer votre arborescence de projet
3535

36-
- Créer un répertoire `/src` ou vous mettrez vos scripts R.
36+
- Créer un répertoire `/R` ou vous mettrez vos scripts R.
3737
- Créer un répertoire `/figures` ou vous mettrez vos illustrations issues de R.
3838

3939
## Activer les packages nécessaires
4040

41-
Commencer par rajouter un script dans le répertoire `/src` à votre projet qui commencera par :
41+
Commencer par rajouter un script dans le répertoire `/R` à votre projet qui commencera par :
4242

4343
- activer l'ensemble des packages nécessaires
4444

@@ -50,7 +50,7 @@ library(tidyverse)
5050
library(GGally)
5151
library(plotly)
5252
53-
base <- read.csv(file = "extdata/Base_synth_territoires.csv",
53+
base <- read.csv(file = "extdata/Base_synth_territoires.csv", fileEncoding = 'latin1',
5454
header = TRUE, sep = ";", dec = ",")
5555
5656
```

05-premier_jeu_donnees.Rmd

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ $\Rightarrow$ Le [module 2 "Préparation des données"](https://mtes-mct.github.
8080
Conseil : exporter les données au format CSV ; c'est le format le plus interopérable (supporté par tous les logiciels stat). Utiliser ensuite la fonction `read.csv` après avoir défini le répertoire de travail (ou en donnant le chemin complet)
8181

8282
```{r lecturecsv}
83-
base0 <- read.csv(file = "extdata/Base_synth_territoires.csv",
83+
base0 <- read.csv(file = "extdata/Base_synth_territoires.csv", fileEncoding = 'latin1',
8484
header = TRUE,
8585
sep = ";",
8686
dec = ",")
@@ -97,8 +97,10 @@ Autres façons d'importer les données
9797

9898
- Fonction `read_delim`, du package `readr`, plus rapide
9999
- Fonction `fread`, du package `data.table`, beaucoup plus rapide !!
100-
- Pour importer les fichiers XLS, ODT ou DBF, il existe des fonctions et des packages spécifiques
101-
- **Le passage par un fichier csv est très recommandé**
100+
- Pour importer les fichiers XLS, ODS, SHP ou DBF, il existe des fonctions et des packages spécifiques
101+
- **Le passage par un fichier csv est très recommandé**.
102+
103+
Note : le [format parquet](https://arrow.apache.org/docs/r/reference/read_parquet.html) est très intéressant pour des tables de plusieurs centaines de milliers de lignes.
102104

103105

104106
## Gérer le type des variables
@@ -149,17 +151,14 @@ On peut importer n'importe quel format de données en R (Excel, SAT, Stata, SQL.
149151

150152
Ici, nous travaillerons sur une base de données communales fournie par l'Insee, dite "comparateur de territoires".
151153

152-
- Utiliser la fonction `read.csv()` pour importer ce fichier et stocker le dans un objet `df`. **Veillez à ce que la région soit bien importée comme un facteur et non un entier**
153-
154-
- Inspecter le dataframe avec les fonctions vues auparavant pour connaître le nombre de lignes, de colonnes, ...
155-
154+
```{r mod1_exo2, child=charge_exo("m1", "exo2.rmd"), echo=FALSE}
156155
156+
```
157157

158158

159159
## Catalogue d'attributs de la base
160160

161161

162-
163162
- *CODGEO* : [text] Code du département suivi du numéro de commune ou du numéro d'arrondissement municipal
164163
- *LIBGEO* : [text] Libellé de la commune ou de l'arrondissement municipal pour Paris
165164
- *REG*: [text] Région

06-manip.Rmd

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -107,14 +107,10 @@ base_rename <- rename(base, ZONE_EMPLOI = ZE)
107107

108108
## Exercice 3 : créer, filtrer, sélectionner
109109

110-
- En utilisant la fonction `mutate()`, créer une nouvelle variable correspondant à la densité de population (rapport de la population à la superficie de la commune), ainsi que les taux de natalité et de mortalité (en pour mille de la population 2014)
111110

112-
- A l'aide de la fonction `select()`, créer une nouvelle table en ne conservant que le code commune, le type de commune (ZAU), la région, le département et les variables que vous venez de créer.
113-
114-
- Enfin, ne conserver les communes correspondant à votre département de naissance et stocker ce *dataframe*. Attention au type de la variable département !
115-
116-
- Avec les opérateurs logiques, faire des essais pour sélectionner des échantillons différents (autres départements, densité, l'un et l'autre...).
111+
```{r mod1_exo3, child=charge_exo("m1", "exo3.rmd"), echo=FALSE}
117112
113+
```
118114

119115
## Nom d'un pipe `%>%` !
120116

07-stats.Rmd

Lines changed: 27 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,16 @@ summary(base_extrait)
1212

1313
- Les variables quantitatives
1414
```{r stat_2}
15-
summary(pull(base_extrait, NAIS0914))
15+
base_extrait %>%
16+
pull(NAIS0914) %>%
17+
summary()
1618
```
1719

1820
- Les variables qualitatives
1921
```{r stat_3}
20-
summary(pull(base_extrait, ZAU))
22+
base_extrait %>%
23+
pull(ZAU) %>%
24+
summary()
2125
```
2226

2327
## Calculer des statistiques spécifiques
@@ -26,10 +30,21 @@ Les fonctions `sum()`, `mean()`, `median()`, `min()`, `max()`, `var()`, `sd()`..
2630
La fonction `quantile()` renvoie les quartiles de la variables (ou bien tout autre découpage qu'on lui renseigne).
2731

2832
```{r stat_4}
29-
sum(pull(base_extrait, P14_POP), na.rm = TRUE)
30-
mean(pull(base_extrait, P14_POP), na.rm = TRUE)
31-
median(pull(base_extrait, P14_POP), na.rm = TRUE)
32-
quantile(pull(base_extrait, P14_POP), probs = c(0.25, 0.5, 0.75), na.rm = T)
33+
base_extrait %>%
34+
pull(P14_POP) %>%
35+
sum(na.rm = TRUE)
36+
37+
base_extrait %>%
38+
pull(P14_POP) %>%
39+
mean(na.rm = TRUE)
40+
41+
base_extrait %>%
42+
pull(P14_POP) %>%
43+
median(na.rm = TRUE)
44+
45+
base_extrait %>%
46+
pull(P14_POP) %>%
47+
quantile(probs = c(0.25, 0.5, 0.75), na.rm = TRUE)
3348
```
3449

3550
Ces fonctions retournent une valeur, ou bien un ensemble de valeur (pour `quantile()`). Le résultat est donc un vecteur de un ou plusieurs nombres.
@@ -40,7 +55,7 @@ Ces fonctions retournent une valeur, ou bien un ensemble de valeur (pour `quanti
4055

4156
<center>![](images/summarise.png)</center>
4257

43-
La fonction `summarise()` permet d'aggréger des données, en appliquant une fonction sur les variables pour construire une statistique sur les observations de la table. C'est une fonction dite de “résumé”.
58+
La fonction `summarise()` permet d'agréger des données, en appliquant une fonction sur les variables pour construire une statistique sur les observations de la table. C'est une fonction dite de “résumé”.
4459

4560
```{r stat_5, eval=FALSE}
4661
summarise(TableEnEntree, NomVariableAgregee = Fonction(NomVariableEtude))
@@ -60,15 +75,15 @@ La fonction `summarise()` retourne un data.frame.
6075
La fonction `summarise()` couplée à `group_by()` permet de calculer des statistiques pour chaque modalité d'une variable qualitative. Avec `group_by()`, on précise les variables qui formeront des groupes, sur lesquels on appliquera une fonction :
6176

6277
```{r, eval=FALSE}
63-
TableauGroupes <- group_by(TableEnEntree, Variable1, ..., VariableN)
64-
summarise(TableauGroupes, NomVariableAgregee = Fonction (NomVariableEtude))
78+
TableauGroupes <- group_by(TableEnEntree, Variable1, ..., VariableN) %>%
79+
summarise(NomVariableAgregee = Fonction (NomVariableEtude))
6580
```
6681

6782
Par exemple, si on veut avoir la médiane de la variable P14_POP, pour chaque ZAU et chaque région :
6883
```{r stat_7}
6984
base_reg_ann <- base_extrait %>%
7085
group_by(ZAU, REG) %>%
71-
summarise(population_med = median (P14_POP, na.rm = TRUE))
86+
summarise(population_med = median(P14_POP, na.rm = TRUE))
7287
```
7388

7489

@@ -102,18 +117,9 @@ La fonction `prop.table()` prend en entrée un objet `table` (tableau de conting
102117

103118
## Exercice 4 : calcul de statistiques
104119

105-
- Utilisez la fonction `summary()` pour obtenir un résumé de l'ensemble des variables de la table df
106-
- Calculez maintenant les moyenne, médiane, écart-type et variance de la variable de densité de population. Que constatez-vous ?
107-
- Utilisez le paramètre `na.rm = TRUE` pour gérer les valeurs manquantes
108-
- Calculez à présent les quartiles puis déciles de cette variables
109-
- Calculez la version centrée réduite de la variable de densité. Rappel : on calcule la version centrée réduite d'une variable X en lui appliquant la transformation suivante : $$ STD_X =\dfrac{X-\bar{X}}{\sigma_X}$$ où $\bar{X}$ est la moyenne empirique de X et $\sigma_X$ son écart-type
110-
111-
Tableaux croisés :
112-
113-
- Calculer le nombre de communes par type d'espace à l'aide de la fonction `table`, et le pourcentage associé
114-
- Calculer le nombre de communes par région et type d'espace, et les pourcentages associés
115-
120+
```{r mod1_exo4, child=charge_exo("m1", "exo4.rmd"), echo=FALSE}
116121
122+
```
117123

118124
Pour aller plus loin et ajouter des variables de pondération, calculer les profils-ligne ou profils-colonne, rendez-vous au [module 3 "Statistiques descriptives"](https://mtes-mct.github.io/parcours_r_module_statistiques_descriptives/) ou demander à un GF (Gentil Formateur).
119125

08-graph.Rmd

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ Pour réaliser des graphiques, nous choisissons de nous servir du package `ggplo
55

66
```{r graph_1, eval=FALSE}
77
install.packages("ggplot2")
8-
library("ggplot2")
8+
library(ggplot2)
99
library(dplyr)
1010
```
1111

@@ -20,6 +20,10 @@ Pour découvrir les nombreuses possibilités de `ggplot2`, vous pouvez vous réf
2020
- [Version anglaise](http://www.sthda.com/english/wiki/ggplot2-barplots-quick-start-guide-r-software-and-data-visualization)
2121
- [Version française](http://www.sthda.com/french/wiki/ggplot2)
2222

23+
La feuille de triche accessible depuis R Studio rassemble les principales instructions et aide à prendre en main le package :
24+
25+
![](images/cheatsheet_ggplot2.png){width=750px}
26+
2327
La fonction `aes()` (pour "aesthetics"), utilisée dans l'instruction `ggplot()` permet de définir les données à tracer. On y indique les dimensions que l'on veut représenter sur le graphique. On peut représenter jusqu'à 5 dimensions sur un même graphique, mais attention à la lisibilité !
2428

2529
- 2 variables quanti : x en fonction de y $\rightarrow$ 2 dimensions (nuage de points)
@@ -28,12 +32,12 @@ La fonction `aes()` (pour "aesthetics"), utilisée dans l'instruction `ggplot()`
2832
- juxtaposer des graphiques en fonction d'une variable quali $\rightarrow$ 5e dimension !
2933

3034
## Histogramme
31-
Si on désire un histogramme de log_SUPERF, on fera appel à la fonction `geom_histogram()`. Ce graphique ne présente qu'une seule dimension (la variable quanti dont on veut visualiser la distribution)
35+
Si on désire un histogramme de `log_SUPERF`, on fera appel à la fonction `geom_histogram()`. Ce graphique ne présente qu'une seule dimension (la variable quanti dont on veut visualiser la distribution)
3236

3337
```{r graph_3, message=FALSE, warning=FALSE}
3438
rm(list = ls())
3539
36-
base <- read.csv(file = "extdata/Base_synth_territoires.csv",
40+
base <- read.csv(file = "extdata/Base_synth_territoires.csv", fileEncoding = 'latin1',
3741
header = T, sep=";", dec=",") %>%
3842
select(1:24) %>%
3943
mutate(log_SUPERF = log(SUPERF),
@@ -72,22 +76,17 @@ Une fois qu'on a généré un graphique avec ggplot, on peut le passer dans la f
7276

7377
```{r ggplotly,message=FALSE,warning=FALSE}
7478
library(plotly)
75-
g <- ggplot(data = base, aes(x = REG, fill = REG)) +
79+
g <- ggplot(data = base, aes(x = ZAU, fill = ZAU)) +
7680
geom_bar()
7781
7882
ggplotly(g)
7983
```
8084

81-
## Exercice : créer des graphiques
85+
## Exercice 5 : créer des graphiques
8286

83-
À l'aide de l'aide mémoire `ggplot2` :
87+
```{r mod1_exo5, child=charge_exo("m1", "exo5.rmd"), echo=FALSE}
8488
85-
- Réaliser un histogramme de la population communale
86-
- Transformer les données avec la fonction log pour y voir plus clair
87-
- Faire un barplot du nombre de communes par REG
88-
- Utiliser le paramètre fill de la fonction `aes()` pour améliorer le graphique
89-
- Réaliser un graphique (nuage de points) croisant la densité de population et le taux de mortalité
90-
- Ajouter une dimension supplémentaire avec la couleur des points (paramètre color de `aes()`)
89+
```
9190

9291
**Note** : avec les fonctions de base, on peut obtenir de nombreux graphiques avec très peu de code, mais moins jolis :
9392

0 commit comments

Comments
 (0)