Effectifs salariés et masse salariale du secteur privé, par zone d’emploi - effectifs-salaries-et-masse-salariale-du-secteur-prive-par-zone-demploi

Données - ACOSS

Structure

Cartes par région (dernier trimestre)

Effectifs salariés (secteur privé, CVS, France entière)

Code
`effectifs-salaries-ze` |>
  group_by(dernier_jour_du_trimestre) |>
  summarise(effectifs_salaries_cvs = sum(effectifs_salaries_cvs), .groups = "drop") |>
  ggplot() + geom_line(aes(x = dernier_jour_du_trimestre, y = effectifs_salaries_cvs)) +
  theme_minimal() + xlab("") + ylab("Effectifs salariés CVS") +
  scale_x_date(date_breaks = "2 years", labels = date_format("%Y")) +
  scale_y_continuous(labels = label_number(big.mark = " ")) +
  theme(axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1))

Zones d’emploi les plus importantes (dernier trimestre)

Code
`effectifs-salaries-ze` |>
  filter(dernier_jour_du_trimestre == max(dernier_jour_du_trimestre)) |>
  slice_max(effectifs_salaries_cvs, n = 20) |>
  mutate(zone_d_emploi = fct_reorder(zone_d_emploi, effectifs_salaries_cvs)) |>
  ggplot() + geom_col(aes(x = zone_d_emploi, y = effectifs_salaries_cvs)) +
  coord_flip() +
  theme_minimal() + xlab("") + ylab("Effectifs salariés CVS") +
  scale_y_continuous(labels = label_number(big.mark = " "))

Croissance des effectifs sur 5 ans, par zone d’emploi

Code
date_max <- max(`effectifs-salaries-ze`$dernier_jour_du_trimestre)
date_min <- date_max %m-% years(5)

`effectifs-salaries-ze` |>
  filter(dernier_jour_du_trimestre %in% c(date_min, date_max)) |>
  select(code_zone_d_emploi, zone_d_emploi, region, dernier_jour_du_trimestre, effectifs_salaries_cvs) |>
  mutate(periode = ifelse(dernier_jour_du_trimestre == date_max, "recent", "ancien")) |>
  select(-dernier_jour_du_trimestre) |>
  distinct(code_zone_d_emploi, periode, .keep_all = TRUE) |>
  pivot_wider(names_from = periode, values_from = effectifs_salaries_cvs) |>
  filter(!is.na(recent), !is.na(ancien)) |>
  mutate(`Croissance 5 ans` = round(100 * (recent / ancien - 1), 1)) |>
  arrange(-`Croissance 5 ans`) |>
  rename(`Zone d'emploi` = zone_d_emploi, Région = region,
        !!paste("Effectifs", format(date_min, "%Y")) := ancien,
        !!paste("Effectifs", format(date_max, "%Y")) := recent) %>%
  {if (is_html_output()) datatable(., filter = 'top', rownames = F) else .}

Carte de France par zone d’emploi (dernier trimestre)

Salaire moyen (masse salariale / effectifs), plutôt que le niveau des effectifs salariés : une mesure intensive, qui ne favorise pas mécaniquement les zones les plus peuplées.

Code
# France métropolitaine uniquement (les DOM ont une projection Lambert 93
# dégénérée, très loin du cadrage métropole -- cf. data/maps/zones_emploi_2020.R)
ze_metropole <- zones_emploi_2020_details |>
  filter(!CODE_REG %in% c("01", "02", "03", "04", "06")) |>
  pull(CODE_ZE)

`effectifs-salaries-ze` |>
  filter(dernier_jour_du_trimestre == max(dernier_jour_du_trimestre)) |>
  group_by(code_zone_d_emploi) |>
  summarise(masse_salariale_cvs = sum(masse_salariale_cvs, na.rm = TRUE),
            effectifs_salaries_cvs = sum(effectifs_salaries_cvs, na.rm = TRUE),
            .groups = "drop") |>
  mutate(salaire_moyen = masse_salariale_cvs / effectifs_salaries_cvs / 3) |>
  rename(CODE_ZE = code_zone_d_emploi) |>
  right_join(zones_emploi_2020_details, by = "CODE_ZE") |>
  right_join(zones_emploi_2020 |> filter(CODE_ZE %in% ze_metropole), by = "CODE_ZE") |>
  ggplot() + aes(long, lat, group = group, subgroup = subgroup, fill = salaire_moyen) +
  coord_equal() + theme_void() + geom_polygon(color = "white", linewidth = 0.1) +
  scale_fill_viridis_c(na.value = "grey90",
                       labels = label_number(big.mark = " ", suffix = " €"),
                       name = "Salaire moyen\n(mensuel)") +
  labs(x = "", y = "") +
  theme(axis.text.x = element_blank(),
        axis.text.y = element_blank())