Dans la fonction publique de l’État, qui compte 2 070 300 salariés,
les contraintes organisationnelles prédominent.
Environ 80 % des agents sont en contact direct avec le public, et 63,6 %
rapportent des échanges parfois conflictuels.
Par ailleurs, plus de la moitié des salariés subissent des contraintes
physiques, notamment des postures contraignantes et des déplacements
fréquents.
Sur le plan psychosocial, 61,1 % évoquent un manque de reconnaissance,
et moins d’un quart se trouvent en situation de “job strain”,
caractérisée par une forte pression psychologique associée à une faible
autonomie.
La fonction publique territoriale qui regroupe 1 981 200 salariés, se
caractérise par des contraintes physiques très prononcées.
Près de 80,6 % des agents sont exposés à des postures contraignantes, et
51,9 % se déplacent régulièrement à pied. De plus, 38,2 % manipulent des
charges lourdes.
Les nuisances sonores concernent 43,1 % des salariés, et les nuisances
thermiques 30,2 %. Côté exposition chimique, 38,5 % des agents sont
touchés, notamment par des substances telles que l’ammoniac, les
carburants ou les solvants.
Sur le plan psychosocial, quasiment la moitié ressentent un manque de
reconnaissance, et presque un quart se trouvent en situation de “job
strain”.
Dans la fonction publique hospitalière qui emploie 1 189 300
personnes, les risques biologiques dominent. Touchant 43 % des
salariés.
Ces risques sont particulièrement présents dans les soins d’hygiène ou
lors de la manipulation de déchets.
Les contraintes physiques restent également importantes, la moitié
travaillent debout, et 39 % signalent des postures inconfortables
affectant le dos.
Parmi les employés, majoritairement des femmes, 33,7 % occupent des
postes administratifs ou liés aux services.
Enfin, 17,4 % des salariés subissent des comportements hostiles, et 23,4
% se trouvent en situation de “job strain”.
Le secteur privé bien que distinct fait face à des défis similaires,
avec des niveaux élevés d’exposition dans certains domaines
spécifiques.
Toutefois, il est globalement moins affecté par les risques biologiques
que la fonction publique hospitalière.
De manière générale, les femmes sont souvent plus représentées dans
les fonctions administratives et de service.
Exposées à des risques biologiques et psychosociaux, tandis que les
hommes sont davantage confrontés à des tâches physiques exigeantes,
comme la manipulation de charges lourdes ou les déplacements à
pied.
Ces écarts soulignent la nécessité d’actions de prévention adaptées aux
spécificités de chaque genre.
Cette table représente les pourcentages d’hommes et de femmes pour chaque catégorie socioprofessionnelle dans les différents secteur
ProfilCateg <- data.frame(
Secteur = c('Public', 'Public', 'Public', 'Public', 'Public', 'Public',
'Territoriale', 'Territoriale', 'Territoriale', 'Territoriale', 'Territoriale', 'Territoriale',
'Hospitalière', 'Hospitalière', 'Hospitalière', 'Hospitalière', 'Hospitalière', 'Hospitalière',
'Privé', 'Privé', 'Privé', 'Privé', 'Privé', 'Privé'),
Categorie_socioprofessionnelle = c('Cadres et prof. intellect. sup.', 'Professions intermédiaires',
'Employés administratifs', 'Employés de commerce et de service',
'Ouvriers qualifiés', 'Ouvriers non qualifiés/agricoles',
'Cadres et prof. intellect. sup.', 'Professions intermédiaires',
'Employés administratifs', 'Employés de commerce et de service',
'Ouvriers qualifiés', 'Ouvriers non qualifiés/agricoles',
'Cadres et prof. intellect. sup.', 'Professions intermédiaires',
'Employés administratifs', 'Employés de commerce et de service',
'Ouvriers qualifiés', 'Ouvriers non qualifiés/agricoles',
'Cadres et prof. intellect. sup.', 'Professions intermédiaires',
'Employés administratifs', 'Employés de commerce et de service',
'Ouvriers qualifiés', 'Ouvriers non qualifiés/agricoles'),
Hommes = c(14.7, 13.8, 3.1, 14.0, 2.0, 0.3, 2.1, 3.0, 1.7, 3.8, 19.3, 9.2,
5.9, 6.1, 0.5, 5.3, 3.6, 0.8, 10.5, 9.9, 2.8, 6.5, 17.7, 6.4),
Femmes = c(16.8, 22.9, 8.4, 3.8, 0.2, 0.1, 5.9, 12.0, 16.3, 21.4, 3.5, 2.0,
7.1, 31.9, 6.8, 28.3, 2.8, 0.8, 6.0, 8.1, 10.9, 15.5, 2.2, 3.6)
)
Cette table représente les pourcentages d’hommes et de femmes pour chaque tranche d’âge dans les différents secteur
ProfilAge <- data.frame(
Secteur = c('Public', 'Public', 'Public', 'Public', 'Public', 'Public',
'Territoriale', 'Territoriale', 'Territoriale', 'Territoriale', 'Territoriale', 'Territoriale',
'Hospitalière', 'Hospitalière', 'Hospitalière', 'Hospitalière', 'Hospitalière', 'Hospitalière',
'Privé', 'Privé', 'Privé', 'Privé', 'Privé', 'Privé'),
Tranche_age = c('Moins de 25 ans', '25 à 29 ans', '30 à 39 ans', '40 à 49 ans', '50 à 59 ans', '60 ans et plus',
'Moins de 25 ans', '25 à 29 ans', '30 à 39 ans', '40 à 49 ans', '50 à 59 ans', '60 ans et plus',
'Moins de 25 ans', '25 à 29 ans', '30 à 39 ans', '40 à 49 ans', '50 à 59 ans', '60 ans et plus',
'Moins de 25 ans', '25 à 29 ans', '30 à 39 ans', '40 à 49 ans', '50 à 59 ans', '60 ans et plus'),
Hommes = c(2.0, 4.6, 10.2, 16.3, 12.4, 2.3, 1.1, 4.8, 6.0, 11.2, 12.3, 3.6,
0.6, 1.4, 5.1, 5.4, 7.5, 2.3, 4.6, 6.1, 13.9, 13.6, 12.4, 3.0),
Femmes = c(0.9, 4.3, 12.6, 18.4, 13.3, 2.6, 3.2, 3.1, 11.1, 20.3, 18.0, 5.2,
4.5, 8.5, 20.9, 19.0, 20.2, 4.7, 3.3, 4.8, 10.9, 12.3, 12.1, 2.9)
)
Cette table représente les pourcentages d’exposition à certains risques énoncés dans l’enquête
dataExpo <- data.frame(
Effectif = c(2070300, 1981200, 1189300, 19547200),
Contraintes_physiques_per = c(55.8, 80.6, 82.7, 71.6),
Nuisances_sonores_per = c(41.5, 43.1, 27.0, 31.4),
Exposition_agents_chimiques_per = c(14.6, 38.5, 57.0, 32.1),
Manque_reconnaissance_per = c(61.1, 47.6, 57.7, 49.3),
Job_Strain_per = c(22.2, 23.4, 35.3, 27.2),
Comportements_hostiles_per = c(17.6, 17.4, 18.5, 15.5),
Contact_direct_avec_public_per = c(79.8, 84.5, 88.5, 71.5),
Travail_debout_per = c(41.6, 53.0, 65.8, 48.0)
)
rownames(dataExpo) <- c("Public", "Territoriale", "Hospitalière", "Privé")
Le pourcentage d’hommes et de femmes dans les différents secteurs
print(aggregate(cbind(Hommes, Femmes) ~ Secteur, data = ProfilCateg, sum))
## Secteur Hommes Femmes
## 1 Hospitalière 22.2 77.7
## 2 Privé 53.8 46.3
## 3 Public 47.9 52.2
## 4 Territoriale 39.1 61.1
Le pourcentage d’hommes et de femmes pour chaque tranche d’âge
ProfilAgeTotal <- aggregate(cbind(Hommes, Femmes) ~ Tranche_age, data = ProfilAge, sum)
totalsAge <- rowSums(ProfilAgeTotal[, c("Hommes", "Femmes")])
ProfilAgeTotal$Hommes <- round(ProfilAgeTotal$Hommes / totalsAge * 100, 1)
ProfilAgeTotal$Femmes <- round(ProfilAgeTotal$Femmes / totalsAge * 100, 1)
print(ProfilAgeTotal)
## Tranche_age Hommes Femmes
## 1 25 à 29 ans 44.9 55.1
## 2 30 à 39 ans 38.8 61.2
## 3 40 à 49 ans 39.9 60.1
## 4 50 à 59 ans 41.2 58.8
## 5 60 ans et plus 42.1 57.9
## 6 Moins de 25 ans 41.1 58.9
Le pourcentage d’hommes et de femmes pour chaque categorie socioprofessionnelle
ProfilTotalCat <- aggregate(cbind(Hommes, Femmes) ~ Categorie_socioprofessionnelle, data = ProfilCateg, sum)
totalsCat <- rowSums(ProfilTotalCat[, c("Hommes", "Femmes")])
ProfilTotalCat$Hommes <- round(ProfilTotalCat$Hommes / totalsCat * 100, 1)
ProfilTotalCat$Femmes <- round(ProfilTotalCat$Femmes / totalsCat * 100, 1)
print(ProfilTotalCat)
## Categorie_socioprofessionnelle Hommes Femmes
## 1 Cadres et prof. intellect. sup. 48.1 51.9
## 2 Employés administratifs 16.0 84.0
## 3 Employés de commerce et de service 30.0 70.0
## 4 Ouvriers non qualifiés/agricoles 72.0 28.0
## 5 Ouvriers qualifiés 83.0 17.0
## 6 Professions intermédiaires 30.5 69.5
Le ratio de femmes par rapport aux hommes par secteur
ProfilTotalSect <- aggregate(cbind(Hommes, Femmes) ~ Secteur, data = ProfilCateg, sum)
ProfilTotalSect$Ratio_Femmes_Hommes <- ProfilTotalSect$Femmes / ProfilTotalSect$Hommes
print(ProfilTotalSect)
## Secteur Hommes Femmes Ratio_Femmes_Hommes
## 1 Hospitalière 22.2 77.7 3.5000000
## 2 Privé 53.8 46.3 0.8605948
## 3 Public 47.9 52.2 1.0897704
## 4 Territoriale 39.1 61.1 1.5626598
Le ratio de femmes par rapport aux hommes par tranche d’âge
ProfilAgeTotal$Ratio_Femmes_Hommes <- ProfilAgeTotal$Femmes / ProfilAgeTotal$Hommes
print(ProfilAgeTotal)
## Tranche_age Hommes Femmes Ratio_Femmes_Hommes
## 1 25 à 29 ans 44.9 55.1 1.227171
## 2 30 à 39 ans 38.8 61.2 1.577320
## 3 40 à 49 ans 39.9 60.1 1.506266
## 4 50 à 59 ans 41.2 58.8 1.427184
## 5 60 ans et plus 42.1 57.9 1.375297
## 6 Moins de 25 ans 41.1 58.9 1.433090
Le ratio de femmes par rapport aux hommes qui subissent des contraintes physiques
dataExpo$Ratio_Femmes_Hommes <- (
ProfilTotalSect$Femmes * dataExpo$Contraintes_physiques_per / 100
) / (
ProfilTotalSect$Hommes * dataExpo$Contraintes_physiques_per / 100
)
print(dataExpo[, c("Contraintes_physiques_per", "Ratio_Femmes_Hommes")])
## Contraintes_physiques_per Ratio_Femmes_Hommes
## Public 55.8 3.5000000
## Territoriale 80.6 0.8605948
## Hospitalière 82.7 1.0897704
## Privé 71.6 1.5626598
Pour cela, on aura besoin de la librairie ggplot2 qui nous permettra de faire et de visualiser les graphiques
library(ggplot2)
dfSecteur <- aggregate(cbind(Hommes, Femmes) ~ Secteur, data = ProfilCateg, sum)
dfSecteur <- reshape2::melt(dfSecteur, id.vars = "Secteur", variable.name = "Genre", value.name = "Effectif")
ggplot(dfSecteur, aes(x = Secteur, y = Effectif, fill = Genre)) +
geom_bar(stat = "identity") +
labs(title = "Répartition hommes/femmes par secteur", x = "Secteur", y = "Effectif") +
scale_fill_manual(values = c("blue", "pink")) +
theme_minimal()
ProfilTotalCatMelt <- reshape2::melt(ProfilTotalCat, id.vars = "Categorie_socioprofessionnelle", variable.name = "Genre", value.name = "Effectif")
ggplot(ProfilTotalCatMelt, aes(x = "", y = Effectif, fill = Genre)) +
geom_bar(stat = "identity", width = 1) +
coord_polar("y", start = 0) +
facet_wrap(~ Categorie_socioprofessionnelle) +
labs(title = "Répartition hommes/femmes par catégorie socioprofessionnelle", x = NULL, y = NULL) +
theme_void()
ProfilAgeTotal <- aggregate(cbind(Hommes, Femmes) ~ Secteur + Tranche_age, data = ProfilAge, sum)
ProfilAgeTotal$Ratio_Femmes_Hommes <- ProfilAgeTotal$Femmes / ProfilAgeTotal$Hommes
ProfilAgeTotal$Tranche_age <- factor(ProfilAgeTotal$Tranche_age,
levels = c("Moins de 25 ans", "25 à 29 ans", "30 à 39 ans",
"40 à 49 ans", "50 à 59 ans", "60 ans et plus"))
print(ProfilAgeTotal)
## Secteur Tranche_age Hommes Femmes Ratio_Femmes_Hommes
## 1 Hospitalière 25 à 29 ans 1.4 8.5 6.0714286
## 2 Privé 25 à 29 ans 6.1 4.8 0.7868852
## 3 Public 25 à 29 ans 4.6 4.3 0.9347826
## 4 Territoriale 25 à 29 ans 4.8 3.1 0.6458333
## 5 Hospitalière 30 à 39 ans 5.1 20.9 4.0980392
## 6 Privé 30 à 39 ans 13.9 10.9 0.7841727
## 7 Public 30 à 39 ans 10.2 12.6 1.2352941
## 8 Territoriale 30 à 39 ans 6.0 11.1 1.8500000
## 9 Hospitalière 40 à 49 ans 5.4 19.0 3.5185185
## 10 Privé 40 à 49 ans 13.6 12.3 0.9044118
## 11 Public 40 à 49 ans 16.3 18.4 1.1288344
## 12 Territoriale 40 à 49 ans 11.2 20.3 1.8125000
## 13 Hospitalière 50 à 59 ans 7.5 20.2 2.6933333
## 14 Privé 50 à 59 ans 12.4 12.1 0.9758065
## 15 Public 50 à 59 ans 12.4 13.3 1.0725806
## 16 Territoriale 50 à 59 ans 12.3 18.0 1.4634146
## 17 Hospitalière 60 ans et plus 2.3 4.7 2.0434783
## 18 Privé 60 ans et plus 3.0 2.9 0.9666667
## 19 Public 60 ans et plus 2.3 2.6 1.1304348
## 20 Territoriale 60 ans et plus 3.6 5.2 1.4444444
## 21 Hospitalière Moins de 25 ans 0.6 4.5 7.5000000
## 22 Privé Moins de 25 ans 4.6 3.3 0.7173913
## 23 Public Moins de 25 ans 2.0 0.9 0.4500000
## 24 Territoriale Moins de 25 ans 1.1 3.2 2.9090909
ggplot(ProfilAgeTotal, aes(x = Tranche_age, y = Secteur, fill = Ratio_Femmes_Hommes)) +
geom_tile(color = "white") +
scale_fill_gradient(low = "lightblue", high = "darkblue", name = "Ratio F/H") +
labs(title = "Ratios femmes/hommes par secteur selon les tranche d'âge", x = "Tranche d'âge", y = "Secteur") +
theme_minimal()
dfLine <- ProfilAgeTotal[ProfilAgeTotal$Secteur == "Public", ]
ggplot(dfLine, aes(x = Tranche_age, y = Ratio_Femmes_Hommes, group = 1)) +
geom_line(color = "blue", size = 1) +
geom_point(color = "darkblue", size = 2) +
labs(title = "Évolution du ratio femmes/hommes dans le secteur Public",
x = "Tranche d'âge",
y = "Ratio F/H") +
theme_minimal()
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
dfExpositions <- reshape2::melt(dataExpo[, c("Contraintes_physiques_per", "Nuisances_sonores_per", "Manque_reconnaissance_per", "Job_Strain_per")],
variable.name = "Exposition", value.name = "Pourcentage")
## No id variables; using all as measure variables
dfExpositions$Secteur <- rownames(dataExpo)
ggplot(dfExpositions, aes(x = Secteur, y = Pourcentage, fill = Exposition)) +
geom_bar(stat = "identity", position = "dodge") +
labs(title = "Comparaison des expositions par secteur", x = "Secteur", y = "Pourcentage") +
scale_fill_brewer(palette = "Set3") +
theme_minimal()