-
Notifications
You must be signed in to change notification settings - Fork 0
/
Notebook.Rmd
371 lines (286 loc) · 16.3 KB
/
Notebook.Rmd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
---
title: "Analyse des données RéFérens III"
author: "Antoine Blanchard"
date: "28/04/2021"
output:
github_document:
toc: true
html_document: default
pdf_document: default
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
library(tidyr, quietly = TRUE)
library(dplyr, quietly = TRUE)
library(tibble, quietly = TRUE)
library(stringr, quietly = TRUE)
library(ggplot2, quietly = TRUE)
library(forcats, quietly = TRUE)
library(tm, quietly = TRUE)
library(RColorBrewer, quietly = TRUE)
library(knitr, quietly = TRUE)
library(hrbrthemes, quietly = TRUE)
library(ggrepel, quietly = TRUE)
library(cluster, quietly=TRUE)
library(tidytext, quietly=TRUE)
library(stopwords, quietly=TRUE)
library(SnowballC, quietly=TRUE)
library(ggiraph, quietly=TRUE)
```
## Import du référentiel métier RéFérens
RéFérens (REFérentiel des Emplois-types de la recherche et de l’Enseignement Supérieur) version III est [fourni par le Ministère de l'enseignement supérieur, de la recherche et de l'innovation](https://www.data.gouv.fr/fr/datasets/referentiel-metiers-referens-iii-pour-la-filiere-des-itrf-1/), sur leur portail open data. On l'importe :
```{r data}
data <- read.csv2("fr-esr_referentiel_metier_referens_3.csv") %>%
mutate(Id = row_number())
variables <- data %>%
select(-Id) %>%
colnames()
```
Il comporte `r nrow(data)` lignes ou fiches métiers, conformément à ce qui est annoncé sur le portail data.gouv.fr :
> Ce jeu de données reprend les informations et nomenclatures concernant les 242 métiers des ingénieurs et personnels techniques de recherche et de formation (ITRF) et des ingénieurs et personnels techniques de la recherche (ITA) décrits dans le répertoire des branches d’activités professionnelles et des emplois-types, dénommé RéFérens (REFérentiel des Emplois-types de la recherche et de l’Enseignement Supérieur).
## Transformation des données
On définit les chaînes de caractère qui seront comptées dans le document comme des occurrences du terme "données" :
```{r donnees}
donnees <- "Donnees|donnees|Données|données|Donnee|donnee|Donnée|donnée"
```
On dénombre, pour chaque cellule, les occurrences du terme "données" et on les ajoute aux données brutes pour former le tableau **data_filtered** :
```{r denombrement}
denombrement <- data %>%
column_to_rownames("Id") %>%
#select(Nom des colonnes, séparées par une virgule) %>%
mutate_all(str_count, donnees) %>%
mutate(somme = rowSums(.)) %>%
rownames_to_column("Id") %>%
filter(somme > 0) %>%
arrange(desc(somme))
# Classer les corps dans l'ordre hiérarchique
ordre_corps <- c("ATRF", "TECH", "AI", "IE", "IR")
data_filtered <- data %>%
filter(Id %in% denombrement$Id) %>%
mutate(Id = as.character(Id),
referens_cs=factor(referens_cs, levels = ordre_corps)) %>%
left_join(denombrement %>% select(Id, somme), by = "Id") %>%
arrange(desc(somme))
```
# Analyse des données
## Distribution des fiches métiers
On trace la distribution des `r nrow(data_filtered)` fiches métiers selon le nombre de fois où apparaît le terme "données" :
```{r distribution_corps, results ='asis'}
data_filtered %>%
mutate(referens_id = fct_reorder(referens_id, -somme),
referens_cs=factor(referens_cs, levels = ordre_corps)) %>%
ggplot(aes(x = referens_id, y = somme, color=referens_cs, label=somme)) +
geom_point() +
geom_text_repel(box.padding=0.5,max.overlaps = Inf, aes(label=ifelse(somme>=17,somme,'')), show.legend=FALSE) +
labs(x="Rang", y="Nombre d'occurrences du terme ''données''", color="Corps",
title="Distribution des fiches métiers",
caption="Données MESRI – Analyse CC-BY Antoine Blanchard / Datactivist") +
scale_color_hue(labels = c("ATRF (Cat. C)", "TECH (Cat. B)", "AI (Cat. A)", "IE (Cat. A)", "IR (Cat. A)")) +
theme_ipsum() +
theme(axis.title.x=element_blank(),
axis.text.x=element_blank(),
axis.ticks.x=element_blank(),
panel.grid.major.x = element_blank())
```
On observe une distribution fortement asymétrique, avec un décrochement à y=17. Nous sommes donc tentés de placer un seuil entre les fiches métiers qui forment une continuité de y=15 à y=1 et les 8 métiers où le terme apparaît 17 fois ou plus.
On étiquette ces 8 métiers (les autres étiquettes s'affichent au survol) :
```{r distribution_corps_avec_intitule, results ='asis'}
distribution_corps_avec_intitule <- data_filtered %>%
mutate(referens_id = fct_reorder(referens_id, -somme),
referens_cs=factor(referens_cs, levels = ordre_corps))
ggplot(distribution_corps_avec_intitule) +
aes(x = referens_id, y = somme, color=referens_cs, label=referens_intitule) +
geom_point() +
geom_text_repel(size=2.5,box.padding=0.5,max.overlaps = Inf,force=8, aes(label=ifelse(somme>=17,referens_intitule,'')), show.legend=FALSE,
nudge_x = 0.2,
direction = "both",
segment.size = 0.2,
segment.curvature = -0.1,
segment.inflect=FALSE) +
labs(x="Rang", y="Nombre d'occurrences du terme \"données\"", color="Corps",
title="Distribution des fiches métiers",
caption="Données MESRI – Analyse CC-BY Antoine Blanchard / Datactivist") +
scale_color_hue(labels = c("ATRF (Cat. C)", "TECH (Cat. B)", "AI (Cat. A)", "IE (Cat. A)", "IR (Cat. A)")) +
theme_ipsum() +
theme(axis.title.x=element_blank(),
axis.text.x=element_blank(),
axis.ticks.x=element_blank(),
panel.grid.major.x = element_blank())
```
Et sous forme de table :
```{r top_metiers, results ='asis'}
top_metiers <- data_filtered %>%
filter(somme >= 17) %>%
arrange(desc(somme)) %>%
select (referens_intitule, bap, referens_fap, referens_cs, somme, Id)
kable(top_metiers, caption = "Métiers incluant au moins 17 fois le terme 'données'")
```
On constate que ce sont majoritairement des métiers AI et IE, majoritairement en soutien à la recherche (BAP A et D).
## Occurrences de l'expression "données" par champ
Dans quelles colonnes (variables) du jeu de données trouve-t-on le plus le terme "données" ?
```{r frequence_par_variable, fig.width = 9, fig.height = 8}
denombrement %>%
select(-somme) %>%
column_to_rownames("Id") %>%
summarise_all(sum) %>%
rownames_to_column("Id") %>%
gather("variable", "somme", -Id) %>%
filter(somme > 0) %>%
ggplot(aes(x=fct_reorder(variable, somme), y = somme)) +
geom_col(aes(fill = variable), color = "grey50") +
labs(x = "", y = "Nombre d'occurrences du terme ''données''",
title="Classement des variables selon \n le nombre d'occurrences du terme ''données''",
caption="Données MESRI – Analyse CC-BY Antoine Blanchard / Datactivist")+
coord_flip()+
theme_ipsum() +
theme(legend.position = "none")
```
Comme on pouvait s'y attendre, le terme données apparaît le plus dans les champs qui décrivent les compétences opérationnelles (rang 1) et les activités principales (rang 2) des fiches métiers. Il apparaît assez peu dans l'intitulé des fiches métiers (voir ci-après), qui est au 9e rang, précédé du champ "intitulé précédent" qui mérite d'être creusé pour comprendre pourquoi certaines occurrences ont disparu (voir plus loin). Au 6e rang, donc assez haut, on trouve le champ "Facteurs d'évolution à moyen terme" du métier qui vise, selon la documentation de RéFérens, à identifier les facteurs clés et en déduire leur impact qualitatif sur le métier.
On regarde quelle place le terme "données" occupe comparativement aux autres termes les plus utilisés dans le champ "Facteurs d'évolution à moyen terme" :
````{r tf_facteurs_d_evolution}
data_filtered %>%
unnest_tokens(word, referens_facteurs_d_evolution_moyen_terme) %>%
mutate(stem = wordStem(word)) %>%
anti_join(get_stopwords(language = "fr")) %>%
count(stem, sort = TRUE) %>%
filter(n >25)
````
Le terme “données” est même le terme qui revient le plus fréquemment (43 occurrences) dans le champ "Facteurs d'évolution à moyen terme" des fiches métiers après “développement” et apparentés (108) et “gestion” (45).
## Liste des 11 métiers dont l'intitulé contient l'expression "données"
```{r 11_metiers}
intitule_TRUE <- denombrement %>%
filter(denombrement$referens_intitule >0 | denombrement$referens_metiers >0)
intitule_filtered <- data_filtered %>%
filter(Id %in% intitule_TRUE$Id) %>%
mutate(Id = as.character(Id),
referens_cs=factor(referens_cs, levels = ordre_corps)) %>%
left_join(data_filtered %>% select(Id, somme), by = "Id") %>%
select(referens_intitule, referens_metiers, bap, referens_fap, referens_cs, Id) %>%
arrange(bap,referens_cs)
kable(intitule_filtered, caption = "Métiers incluant le terme \"données\" dans leur intitulé")
```
Ensemble, ces deux listes de métiers obtenues par deux méthodes différentes (que le terme apparaisse au moins 17 fois ou qu'il apparaisse dans l'intitulé) forment une liste de 13 métiers-types que l'on peut qualifier de "métiers des données".
````{r metiers_des_donnees, message=FALSE, warning=FALSE}
metiers_donnee <- full_join(intitule_filtered,top_metiers,by=c("referens_intitule","bap","referens_fap","referens_cs","Id")) %>%
arrange(bap,referens_cs)
kable(metiers_donnee, caption = "Métiers des données")
```
## Occurrences de l'expression "données" par BAP
Proportion des fiches métiers qui contiennent l'expression "données" par BAP :
```{r frequence_par_BAP, message=FALSE, warning=FALSE, fig.width=10}
BAP_filtered <- data_filtered %>%
count(bap) %>%
arrange(bap)
BAP <- data %>%
count(bap)
BAP_filtered_pourcentage <- BAP_filtered %>%
left_join(BAP, BAP_filtered, by = "bap") %>%
mutate(pourcentage_bap=round(n.x/n.y,2),
bap=fct_reorder(bap, bap, .desc = TRUE))
BAP_filtered_pourcentage %>%
ggplot(aes(x = bap, y = pourcentage_bap)) +
geom_col(aes(fill = bap), color = "grey50") +
labs(x = "", y = "Proportion",
title="Proportion de fiches métiers comprenant \nle terme \"données\" par BAP",
caption="Données MESRI – Analyse CC-BY Antoine Blanchard / Datactivist") +
theme_ipsum() +
coord_flip() +
theme_ipsum(grid="X") +
theme(legend.position = "none") +
scale_fill_manual(values = brewer.pal(8, "YlOrRd")) +
scale_y_continuous(labels = scales::percent, limits = c(0,1))
```
On constate que les BAP E et D possèdent en proportion la plus grande part de métiers liés aux données : c'est intéressant de voir le soutien à la recherche en SHS si haut. Les BAP A, B et C, qui concernent directement le soutien à la recherche, sont moins concernés par les données que les BAP F et J qui sont liés à l'administration de l'université et se retrouvent plutôt dans l'administration centrale.
## Occurrences de l'expression "données" par corps
Proportion des fiches métiers qui contiennent l'expression "données" par corps :
```{r frequence_par_corps}
corps_filtered <- data_filtered %>%
count(referens_cs) %>%
arrange(desc(n))
corps <- data %>%
count(referens_cs)
corps_filtered_pourcentage <- corps_filtered %>%
left_join(corps, corps_filtered, by = "referens_cs") %>%
mutate(pourcentage_corps=round(n.x/n.y,2),
referens_cs=factor(referens_cs, levels = ordre_corps))
corps_filtered_pourcentage %>%
ggplot(aes(x = referens_cs, y = pourcentage_corps)) +
geom_col(aes(fill = referens_cs), color = "grey50") +
labs(x = "Corps", y = "Proportion",
title="Proportion de fiches métiers comprenant \nle terme \"données\" par corps",
caption="Données MESRI – Analyse CC-BY Antoine Blanchard / Datactivist") +
coord_flip() +
theme_ipsum(grid="X") +
theme(legend.position = "none") +
scale_y_continuous(labels = scales::percent, limits = c(0,1))
```
On constate que la proportion de métiers liés aux données varie en même temps que l'ordre hiérarchique : elle est plus grande pour les corps ayant le plus de missions d'encadrement.
## Fréquence de l'expression "données" par BAP et par corps
```{r stack_corps, results ='asis'}
data_filtered %>%
mutate(referens_cs=factor(referens_cs, levels = ordre_corps)) %>%
ggplot(aes(x = referens_bap_id, fill=referens_cs)) +
geom_bar() +
labs(x= "BAP", y = "Nombre de fiches métiers", fill="Corps",
title="Nombre de fiches métiers comprenant \nle terme \"données\" par corps et BAP",
caption="Données MESRI – Analyse CC-BY Antoine Blanchard / Datactivist") +
theme_ipsum(grid="Y")
```
En valeur absolue, la BAP F Culture, Communication, Production et diffusion des savoirs concentre le plus grand nombre de fiches métiers liées aux données, grâce à un nombre très important de métiers appartenant au corps des IE.
Nous voulons savoir quels sont ces métiers IE de la BAP F.
## Liste des métiers IE de la BAP F liés aux données
```{r metiers_ie_bapF, results ='asis'}
temp <- data_filtered %>%
filter(referens_cs %in% c("IE") & referens_bap_id %in% c("F")) %>%
select (referens_intitule, bap, referens_fap, referens_cs, somme)
kable(temp, caption="Métiers IE de la BAP F liés aux données")
```
## Dispersion des fiches métiers par corps
Question : on a vu que les corps IE et IR possèdent proportionnellement plus de métiers liés **aux** données, mais dans quels corps trouve-t-on les métiers **des** données (c'est-à-dire où le terme apparaît le plus fréquemment) ?
On trace la dispersion des fiches métiers par corps selon les occurrences du mot "données", avec une représentation par boxplot :
```{r boxplot_corps, results ='asis'}
dispersion_corps <- data_filtered %>%
mutate(referens_cs=factor(referens_cs, levels = ordre_corps))
ggplot(dispersion_corps) +
aes(x = referens_cs, y = somme, color=referens_cs) +
geom_boxplot()+
geom_jitter(shape=16, position=position_jitter (0.2)) +
labs(x= "Corps", y = "Nombre d'occurrences du terme ''données''", color="Corps",
title="Dispersion des fiches métiers comprenant \nle terme \"données\" par corps",
caption="Données MESRI – Analyse CC-BY Antoine Blanchard / Datactivist") +
theme_ipsum() +
theme(legend.position = "none")
```
Il apparaît que les corps IE et IR ont la distribution la plus étirée vers le haut, ce sont ceux où l'on trouve le plus de métiers **des** données.
## Métiers des BAP E, F, G, J où "données" apparaît comme facteur d'évolution moyen terme
```{r evolution_metiers, results ='asis'}
evolution_metiers <- data_filtered %>%
mutate(Id = as.character(Id)) %>%
left_join(denombrement %>% select(Id, referens_facteurs_d_evolution_moyen_terme), by = "Id") %>%
filter(referens_facteurs_d_evolution_moyen_terme.y >0) %>%
filter(referens_bap_id %in% c("E", "F", "G", "J")) %>%
group_by(bap) %>%
arrange(referens_cs, .by_group = TRUE)
evolution_metiers_extrait <- evolution_metiers %>%
select (referens_intitule, bap, referens_fap, referens_cs, somme)
kable(evolution_metiers_extrait, caption = "Métiers où 'données' apparaît comme facteur d'évolution moyen terme")
```
Dans ces BAP liés à l'administration centrale, on remarque l'absence de la BAP J et la quasi-absence de la BAP G, dont aucun métier ne prend la donnée en compte pour leur évolution moyen terme. Pourtant, les entretiens que nous avons menés montrent que ces domaines de la gestion du patrimoine immobilier et du pilotage sont fortement amenés à évoluer dans le contexte de la donnée.
## Métiers où "données" apparaît comme "intitulé précédent" et a disparu de l'intitulé actuel
```{r suppression_metiers, results ='asis'}
suppression_metiers <- denombrement %>%
filter(referens_intitule_precedent >0 & referens_intitule ==0) %>%
mutate(Id = as.character(Id)) %>%
select(Id) %>%
left_join(data_filtered, by = "Id") %>%
select (referens_intitule, referens_intitule_precedent, bap, referens_fap, referens_cs) %>%
arrange(referens_cs)
kable(suppression_metiers, caption = "Métiers dont l'ancien intitulé incluait le terme 'données' contrairement à l'intitulé actuel")
```
Dans le premier cas il s'agit d'une évolution des missions, dans le second cas de la substitution du terme "données" par "information". Il faudrait voir dans quelle mesure cette substitution est significative ou non.
# TO DO
## Afficher le terme "données" en kwic (keyword-in-context) et représenter son voisinage lexical (qualificatifs, verbes relatifs à des processus managériaux…)
## Répéter les étapes avec le terme "archives"
```{r save_workspace, results ='asis'}
save.image(file = "my_workspace.RData")
```