Établissements, effectifs salariés et masse salariale du secteur privé, par zone d’emploi et par an - nombre-etab-effectifs-salaries-et-masse-salariale-secteur-prive-zones-emploi

Données - ACOSS

Structure

Cartes par région (dernière année)

Salaire moyen (masse salariale / effectifs, ramené au mois), plutôt que le niveau des effectifs salariés : une mesure intensive, qui ne favorise pas mécaniquement les zones les plus peuplées. Une carte par région métropolitaine, zoomée sur son emprise, avec le nom de chaque zone d’emploi.

Carte de France par zone d’emploi (dernière année)

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)

`etab-effectifs-ms-ze` |>
  filter(annee == max(annee)) |>
  group_by(code_zone_d_emploi) |>
  summarise(masse_salariale = sum(masse_salariale, na.rm = TRUE),
            effectifs_salaries_moyens = sum(effectifs_salaries_moyens, na.rm = TRUE),
            .groups = "drop") |>
  mutate(salaire_moyen = masse_salariale / effectifs_salaries_moyens / 12) |>
  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())

Effectifs salariés et établissements (France entière)

Code
`etab-effectifs-ms-ze` |>
  group_by(annee) |>
  summarise(effectifs_salaries_moyens = sum(effectifs_salaries_moyens, na.rm = TRUE),
            nombre_d_etablissements = sum(nombre_d_etablissements, na.rm = TRUE),
            .groups = "drop") |>
  select(annee, `Effectifs salariés` = effectifs_salaries_moyens,
        `Établissements` = nombre_d_etablissements) |>
  gather(variable, value, -annee) |>
  ggplot() + geom_line(aes(x = annee, y = value)) +
  facet_wrap(~variable, scales = "free_y", ncol = 1) +
  theme_minimal() + xlab("") + ylab("") +
  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 (dernière année)

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

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

Code
annee_max <- max(`etab-effectifs-ms-ze`$annee)
annee_min <- annee_max %m-% years(5)

`etab-effectifs-ms-ze` |>
  filter(annee %in% c(annee_min, annee_max)) |>
  select(code_zone_d_emploi, zone_d_emploi, region, annee, effectifs_salaries_moyens) |>
  mutate(periode = ifelse(annee == annee_max, "recent", "ancien")) |>
  select(-annee) |>
  distinct(code_zone_d_emploi, periode, .keep_all = TRUE) |>
  pivot_wider(names_from = periode, values_from = effectifs_salaries_moyens) |>
  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(annee_min, "%Y")) := ancien,
        !!paste("Effectifs", format(annee_max, "%Y")) := recent) %>%
  {if (is_html_output()) datatable(., filter = 'top', rownames = F) else .}