Produit intérieur brut (PIB) et ses composantes - CNA-2020-PIB

Données - INSEE

Last observation: 2025 (N = 21)

First observation: 1949 (N = 5)

Last data update: 03 sept. 2026, 23:30

Last compile: 04 sept. 2026, 01:50

Structure

Informations

  • Base = un ensemble fixé de concepts, nomenclatures, et méthodes. (dans le vocabulaire de la Comptabilité Nationale Française (CNF))

  • Création de la CNF dans les années 1950.

  • Changements de base: 1956, 1959, 1962, 1971, 1980, 1995, 2000, 2005, 2010, 2014

  • Les comptes de la nation en 2022. html

Dernière

Code
`CNA-2020-PIB` |>
  filter(TIME_PERIOD == max(TIME_PERIOD)) |>
  select(TIME_PERIOD, TITLE_FR, OBS_VALUE) |>
  print_table_conditional()
TIME_PERIOD TITLE_FR OBS_VALUE
2025 Comptes nationaux annuels base 2020 - Dépense de consommation finale - APU Administrations publiques - Total des produits (nouvelle nomenclature) - Contribution à l'évolution du produit intérieur brut en volume 0.146
2025 Comptes nationaux annuels base 2020 - Importations de biens et de services - Total des secteurs institutionnels - Total des produits (nouvelle nomenclature) - Contribution à l'évolution du produit intérieur brut en volume -0.958
2025 Comptes nationaux annuels base 2020 - Formation brute de capital fixe - APU Administrations publiques - Total des produits (nouvelle nomenclature) - Contribution à l'évolution du produit intérieur brut en volume 0.115
2025 Comptes nationaux annuels base 2020 - Formation brute de capital fixe - Ménages hors entrepreneurs individuels - Total des produits (nouvelle nomenclature) - Contribution à l'évolution du produit intérieur brut en volume -0.009
2025 Comptes nationaux annuels base 2020 - Produit intérieur brut approche produit - Total des secteurs institutionnels - Total des produits - Prix chaîné année de base (non équilibré) 2646746.000
2025 Comptes nationaux annuels base 2020 - Produit intérieur brut approche produit - Total des secteurs institutionnels - Total des produits - Prix courant 2991056.000
2025 Comptes nationaux annuels base 2020 - Produit intérieur brut approche produit - Total des secteurs institutionnels - Total des produits - Indice de prix chaîné année de base (non équilibré) 113.000
2025 Comptes nationaux annuels base 2020 - Formation brute de capital fixe - Sociétés et E.I. financières - Total des produits (nouvelle nomenclature) - Contribution à l'évolution du produit intérieur brut en volume -0.053
2025 Comptes nationaux annuels base 2020 - Formation brute de capital fixe - Total des secteurs institutionnels - Total des produits (nouvelle nomenclature) - Contribution à l'évolution du produit intérieur brut en volume 0.107
2025 Comptes nationaux annuels base 2020 - Acquisitions moins cessions d'objets de valeur - Total des secteurs institutionnels - Total des produits (nouvelle nomencl.) - Contribution à l'évolution du produit intérieur brut en volume -0.002
2025 Comptes nationaux annuels base 2020 - Dépense de consommation finale - Total des secteurs institutionnels - Total des produits (nouvelle nomenclature) - Contribution à l'évolution du produit intérieur brut en volume 0.343
2025 Comptes nationaux annuels base 2020 - Dépense de consommation finale - Instituts sans but lucratif au service des ménages - Total des produits (nouvelle nomenclature) - Contribution à l'évolution du produit intérieur brut en volume -0.005
2025 Comptes nationaux annuels base 2020 - Produit intérieur brut par habitant - Total des secteurs institutionnels - Total des produits (nouvelle nomenclature) - Prix courant 43350.238
2025 Comptes nationaux annuels base 2020 - Formation brute de capital fixe - Sociétés et E.I. non financières - Total des produits (nouvelle nomenclature) - Contribution à l'évolution du produit intérieur brut en volume 0.054
2025 Comptes nationaux annuels base 2020 - Formation brute de capital fixe - Instituts sans but lucratif au service des ménages - Total des produits (nouvelle nomenclature) - Contribution à l'évolution du produit intérieur brut en volume 0.001
2025 Comptes nationaux annuels base 2020 - Solde des échanges extérieurs de biens et services - Total des sect. institutionnels - Total des produits (nouvelle nomencl.) - Contribution à l'évolution du produit intérieur brut en volume -0.172
2025 Comptes nationaux annuels base 2020 - Variation des stocks - Total des secteurs institutionnels - Total des produits (nouvelle nomenclature) - Contribution à l'évolution du produit intérieur brut en volume 0.528
2025 Comptes nationaux annuels base 2020 - Produit intérieur brut - Evolution en volume - Prix chaîné année de base (non équilibré) 0.805
2025 Comptes nationaux annuels base 2020 - Produit intérieur brut par habitant - Total des secteurs institutionnels - Total des produits (nouvelle nomenclature) - Prix chaîné année de base (non équilibré) 38360.050
2025 Comptes nationaux annuels base 2020 - Dépense de consommation finale - Ménages hors entrepreneurs individuels - Total des produits (nouvelle nomenclature) - Contribution à l'évolution du produit intérieur brut en volume 0.202
2025 Comptes nationaux annuels base 2020 - Exportations de biens et de services - Total des secteurs institutionnels - Total des produits (nouvelle nomenclature) - Contribution à l'évolution du produit intérieur brut en volume 0.786

Structure

IDBANK = OPERATION, NATURE, SECT-INST, UNIT_MEASURE

Code
`CNA-2020-PIB` |>
  
  
  group_by(OPERATION, NATURE, `SECT-INST`, UNIT_MEASURE) |>
  summarise(Nobs = n()) %>%
  mutate_at(vars(-Nobs, -OPERATION), funs(as.factor(.))) |>
  arrange(-Nobs) |>
  print_table_conditional()
OPERATION NATURE SECT-INST UNIT_MEASURE Nobs
PIB_H VALEUR_ABSOLUE S0 EUROS_HABITANTS 154
PIB INDICE S0 SO 77
PIB VALEUR_ABSOLUE S0 EUR2020 77
PIB VALEUR_ABSOLUE S0 EUROS_COURANTS 77
B11 PROPORTION_POURCENTAGE S0 SO 76
P3 PROPORTION_POURCENTAGE S0 SO 76
P3 PROPORTION_POURCENTAGE S13 SO 76
P3 PROPORTION_POURCENTAGE S14B SO 76
P3 PROPORTION_POURCENTAGE S15 SO 76
P51G PROPORTION_POURCENTAGE S0 SO 76
P51G PROPORTION_POURCENTAGE S11ES14AA SO 76
P51G PROPORTION_POURCENTAGE S12ES14AF SO 76
P51G PROPORTION_POURCENTAGE S13 SO 76
P51G PROPORTION_POURCENTAGE S14B SO 76
P51G PROPORTION_POURCENTAGE S15 SO 76
P52 PROPORTION_POURCENTAGE S0 SO 76
P53 PROPORTION_POURCENTAGE S0 SO 76
P6 PROPORTION_POURCENTAGE S0 SO 76
P7 PROPORTION_POURCENTAGE S0 SO 76
PIB PROPORTION_POURCENTAGE S0 POURCENT 76

PIB Courants and Constants

Tous

Code
`CNA-2020-PIB` |>
  year_to_date() |>
  filter(OPERATION == "PIB",
         UNIT_MEASURE %in% c("EUR2020", "EUROS_COURANTS")) |>
  select(date, UNIT_MEASURE, OBS_VALUE) |>
  mutate(OBS_VALUE = OBS_VALUE |> as.numeric(),
         UNIT_MEASURE = paste0("PIB_", UNIT_MEASURE)) |>
  spread(UNIT_MEASURE, OBS_VALUE) |>
  print_table_conditional()

2017-

Code
`CNA-2020-PIB` |>
  filter(as.numeric(TIME_PERIOD) >= 2017) |>
  filter(OPERATION == "PIB",
         UNIT_MEASURE %in% c("EUR2020", "EUROS_COURANTS")) |>
  select(TIME_PERIOD, UNIT_MEASURE, OBS_VALUE) |>
  mutate(OBS_VALUE = OBS_VALUE |> as.numeric(),
         UNIT_MEASURE = paste0("PIB_", UNIT_MEASURE)) |>
  spread(UNIT_MEASURE, OBS_VALUE) |>
  print_table_conditional()
TIME_PERIOD PIB_EUR2020 PIB_EUROS_COURANTS
2017 2415116 2291681
2018 2454866 2355363
2019 2504637 2432207
2020 2318276 2318276
2021 2477828 2508102
2022 2545145 2653997
2023 2586706 2833826
2024 2625622 2935236
2025 2646746 2991056

PIB Nominal en France

Français

Step 0

Code
`CNA-2020-PIB` |>
  filter(OPERATION == "PIB", 
         UNIT_MEASURE == "EUROS_COURANTS") |>
  select(TIME_PERIOD, `PIB Nominal` = OBS_VALUE) |>
  year_to_date() |>
  mutate(year = year(date)) |>
  filter(is.finite(`PIB Nominal`)) |>
  group_by(date) |>
  select(-year) |>
  gather(variable, value, -date) |>
  ggplot() + theme_minimal() + xlab("") + ylab("PIB nominal de la France (en € courants)") +
  geom_line(aes(x = date, y = value/10^3, color = variable, linetype = variable)) + 
  scale_linetype_manual(values = c("solid", "solid", "dashed", "solid")) +
  theme(legend.title = element_blank(),
        legend.position = c(0.8, 0.2)) +
  scale_x_date(breaks = seq(1920, 2100, 5) |> paste0("-01-01") |> as.Date(),
               labels = date_format("%Y")) +
  scale_y_continuous(breaks = seq(200, 3000, 200),
                labels = scales::dollar_format(a = 1, prefix = "", suffix = "Md€"))

PIB Réel en France

English

Code
fit <- `CNA-2020-PIB` |>
  filter(OPERATION == "PIB", 
         UNIT_MEASURE == "EUR2020") |>
  select(TIME_PERIOD, `Real GDP` = OBS_VALUE) |>
  year_to_date() |>
  mutate(year = year(date)) |>
  filter(is.finite(`Real GDP`))  |>
  filter(year <= 1971) %>%
  lm(log(`Real GDP`) ~ year, data = .) |>
  pluck("coefficients")


fit_2019 <- `CNA-2020-PIB` |>
  filter(OPERATION == "PIB", 
         UNIT_MEASURE == "EUR2020") |>
  select(TIME_PERIOD, `Real GDP` = OBS_VALUE) |>
  year_to_date() |>
  mutate(year = year(date)) |>
  filter(is.finite(`Real GDP`)) %>%
  lm(log(`Real GDP`) ~ year, data = .) |>
  pluck("coefficients")

fit
# (Intercept)        year 
# -87.4994240   0.0513393
Code
fit_2019
#  (Intercept)         year 
# -42.17299922   0.02827044
Code
`CNA-2020-PIB` |>
  filter(OPERATION == "PIB", 
         UNIT_MEASURE == "EUR2020") |>
  select(TIME_PERIOD, `Real GDP` = OBS_VALUE) |>
  year_to_date() |>
  mutate(year = year(date)) |>
  filter(is.finite(`Real GDP`)) |>
  mutate(`Trend to 2024 (g = 2.9%)` = lm(log(`Real GDP`) ~ year) |> fitted() |> exp(),
         `Trend to 1971, extrapolated` = ifelse(year>=1971, 
                                                (fit[1]+fit[2]*year) |> exp(), 
                                                NA),
         `Trend to 1971 (g = 5.1%)` = ifelse(year<=1971, 
                                             (fit[1]+fit[2]*year) |> exp(), 
                                             NA)) |>
  group_by(date) |>
  select(-year) |>
  gather(variable, value, -date) |>
  ggplot() + theme_minimal() + xlab("") + ylab("France's GDP") +
  geom_line(aes(x = date, y = value/10^6, color = variable, linetype = variable)) + 
  scale_color_manual(values = viridis(4)[c(3, 1, 1, 2)]) +
  scale_linetype_manual(values = c("solid", "solid", "dashed", "solid")) +
  theme(legend.title = element_blank(),
        legend.position = c(0.8, 0.2)) +
  scale_x_date(breaks = seq(1920, 2100, 5) |> paste0("-01-01") |> as.Date(),
               labels = date_format("%Y")) +
  scale_y_log10(breaks = 20*2^seq(-7, 1, 1),
                labels = scales::dollar_format(a = .1, prefix = "", suffix = "Tn€"))

Français

Step 0

1949-

Linéaire
Code
plot_lineaire <- `CNA-2020-PIB` |>
  filter(OPERATION %in% c("PIB", "P3"), 
         UNIT_MEASURE == "EUR2020") |>
  
  year_to_date() |>
  mutate(year = year(date)) |>
  group_by(date) |>
  select(-year) |>
  ggplot() + theme_minimal() + xlab("") + ylab("PIB réel de la France (en € 2020)") +
  geom_line(aes(x = date, y = OBS_VALUE/10^3, color = Operation)) + 
  scale_linetype_manual(values = c("solid", "solid", "dashed", "solid")) +
  theme(legend.title = element_blank(),
        legend.position = c(0.8, 0.2)) +
  scale_x_date(breaks = seq(1920, 2100, 10) |> paste0("-01-01") |> as.Date(),
               labels = date_format("%Y")) +
  scale_y_continuous(breaks = seq(200, 3000, 200),
                labels = scales::dollar_format(a = 1, prefix = "", suffix = "Md€"))

plot_lineaire

Log
Code
plot_log <- plot_lineaire+
  scale_y_log10(breaks = 20000*2^seq(-7, 1, 0.5),
                labels = scales::dollar_format(a = 1, prefix = "", suffix = "Md€"))

plot_log

Both
Code
ggarrange(plot_lineaire + ggtitle("Echelle Linéaire"), plot_log + ylab("") +  ggtitle("Echelle Log"), common.legend = T)

1960-

Linéaire
Code
plot_lineaire <- `CNA-2020-PIB` |>
  filter(OPERATION %in% c("PIB", "P3"), 
         UNIT_MEASURE == "EUR2020") |>
  
  year_to_date() |>
  mutate(year = year(date)) |>
  filter(year >= 1960) |>
  group_by(date) |>
  select(-year) |>
  ggplot() + theme_minimal() + xlab("") + ylab("PIB réel de la France (en € 2020)") +
  geom_line(aes(x = date, y = OBS_VALUE/10^3, color = Operation)) + 
  scale_linetype_manual(values = c("solid", "solid", "dashed", "solid")) +
  theme(legend.title = element_blank(),
        legend.position = c(0.8, 0.2)) +
  scale_x_date(breaks = seq(1920, 2100, 10) |> paste0("-01-01") |> as.Date(),
               labels = date_format("%Y")) +
  scale_y_continuous(breaks = seq(200, 3000, 200),
                labels = scales::dollar_format(a = 1, prefix = "", suffix = "Md€"))

plot_lineaire

Log
Code
plot_log <- plot_lineaire+
  scale_y_log10(breaks = 20000*2^seq(-7, 1, 0.5),
                labels = scales::dollar_format(a = 1, prefix = "", suffix = "Md€"))

plot_log

Both
Code
ggarrange(plot_lineaire + ggtitle("Echelle Linéaire"), plot_log + ggtitle("Echelle Log") + ylab(""), common.legend = T)

2011-2013

Code
plot_lineaire <- `CNA-2020-PIB` |>
  filter(OPERATION %in% c("PIB", "P3"), 
         UNIT_MEASURE == "EUR2020") |>
  
  year_to_date() |>
  mutate(year = year(date)) |>
  filter(year >= 2011,
         year <= 2013) |>
  arrange(date) |>
  mutate(OBS_VALUE = 100*OBS_VALUE/OBS_VALUE[1]) |>
  group_by(date) |>
  select(-year) |>
  ggplot() + theme_minimal() + xlab("") + ylab("PIB réel de la France (en € 2020)") +
  geom_line(aes(x = date, y = OBS_VALUE, color = Operation)) + 
  scale_linetype_manual(values = c("solid", "solid", "dashed", "solid")) +
  theme(legend.title = element_blank(),
        legend.position = c(0.8, 0.2)) +
  scale_x_date(breaks = seq(1920, 2100, 1) |> paste0("-01-01") |> as.Date(),
               labels = date_format("%Y")) +
  scale_y_continuous(breaks = seq(100, 3000, 0.1))

plot_lineaire

Step 2

Code
`CNA-2020-PIB` |>
  filter(OPERATION == "PIB", 
         UNIT_MEASURE == "EUR2020") |>
  select(TIME_PERIOD, `PIB Réel` = OBS_VALUE) |>
  year_to_date() |>
  mutate(year = year(date)) |>
  filter(is.finite(`PIB Réel`)) |>
  mutate(`Tendance jusque 2024 (g = 2.9%)` = lm(log(`PIB Réel`) ~ year) |> fitted() |> exp()) |>
  group_by(date) |>
  select(-year) |>
  gather(variable, value, -date) |>
  ggplot() + theme_minimal() + xlab("") + ylab("PIB réel de la France (en € 2020)") +
  geom_line(aes(x = date, y = value/10^3, color = variable, linetype = variable)) + 
  scale_linetype_manual(values = c("solid", "solid", "dashed", "solid")) +
  theme(legend.title = element_blank(),
        legend.position = c(0.8, 0.2)) +
  scale_x_date(breaks = seq(1920, 2100, 5) |> paste0("-01-01") |> as.Date(),
               labels = date_format("%Y")) +
  scale_y_log10(breaks = 20000*2^seq(-7, 1, 1),
                labels = scales::dollar_format(a = 1, prefix = "", suffix = "Md€"))

Step 3

Code
`CNA-2020-PIB` |>
  filter(OPERATION == "PIB", 
         UNIT_MEASURE == "EUR2020") |>
  select(TIME_PERIOD, `PIB Réel` = OBS_VALUE) |>
  year_to_date() |>
  mutate(year = year(date)) |>
  filter(is.finite(`PIB Réel`)) |>
  mutate(`Tendance jusque 1971, extrapolée` = ifelse(year>=1971, 
                                                (fit[1]+fit[2]*year) |> exp(), 
                                                NA),
         `Tendance jusque 1971 (g = 5.1%)` = ifelse(year<=1971, 
                                             (fit[1]+fit[2]*year) |> exp(), 
                                             NA)) |>
  group_by(date) |>
  select(-year) |>
  gather(variable, value, -date) |>
  ggplot() + theme_minimal() + xlab("") + ylab("PIB réel de la France (en € 2020)") +
  geom_line(aes(x = date, y = value/10^3, color = variable, linetype = variable)) + 
  scale_linetype_manual(values = c("solid", "solid", "dashed", "solid")) +
  theme(legend.title = element_blank(),
        legend.position = c(0.8, 0.2)) +
  scale_x_date(breaks = seq(1920, 2100, 5) |> paste0("-01-01") |> as.Date(),
               labels = date_format("%Y")) +
  scale_y_log10(breaks = 20000*2^seq(-7, 1, 1),
                labels = scales::dollar_format(a = 1, prefix = "", suffix = "Md€"))

Step 4

Code
`CNA-2020-PIB` |>
  filter(OPERATION == "PIB", 
         UNIT_MEASURE == "EUR2020") |>
  select(TIME_PERIOD, `PIB Réel` = OBS_VALUE) |>
  year_to_date() |>
  mutate(year = year(date)) |>
  filter(is.finite(`PIB Réel`)) |>
  mutate(`Tendance jusque 2024 (g = 2.9%)` = lm(log(`PIB Réel`) ~ year) |> fitted() |> exp(),
         `Tendance jusque 1971, extrapolée` = ifelse(year>=1971, 
                                                (fit[1]+fit[2]*year) |> exp(), 
                                                NA),
         `Tendance jusque 1971 (g = 5.1%)` = ifelse(year<=1971, 
                                             (fit[1]+fit[2]*year) |> exp(), 
                                             NA)) |>
  group_by(date) |>
  select(-year) |>
  gather(variable, value, -date) |>
  ggplot() + theme_minimal() + xlab("") + ylab("PIB réel de la France (en € 2020)") +
  geom_line(aes(x = date, y = value/10^3, color = variable, linetype = variable)) + 
  scale_linetype_manual(values = c("solid", "solid", "dashed", "solid")) +
  theme(legend.title = element_blank(),
        legend.position = c(0.8, 0.2)) +
  scale_x_date(breaks = seq(1920, 2100, 5) |> paste0("-01-01") |> as.Date(),
               labels = date_format("%Y")) +
  scale_y_log10(breaks = 20000*2^seq(-7, 1, 1),
                labels = scales::dollar_format(a = 1, prefix = "", suffix = "Md€"))

Contributions à la croissance du PIB

Consumption, FBCF, PIB

Code
`CNA-2020-PIB` |>
  filter(OPERATION %in% c("P3", "P51G"), 
         NATURE == "PROPORTION_POURCENTAGE",
         `SECT-INST` == "S0") |>
  year_to_date() |>
  select(OPERATION, OBS_VALUE, date) |>
  left_join(OPERATION,  by = "OPERATION") |>
  ggplot() + theme_minimal() + xlab("") + ylab("Contribution à la croissance du PIB") +
  geom_line(aes(x = date, y = OBS_VALUE/100, color = Operation)) + 
  
  theme(legend.title = element_blank(),
        legend.position = c(0.7, 0.9)) +
  scale_x_date(breaks = seq(1920, 2100, 5) |> paste0("-01-01") |> as.Date(),
               labels = date_format("%Y")) +
  scale_y_continuous(breaks = 0.01*seq(-200, 200, 1),
                     labels = scales::percent_format(accuracy = 1)) +
  geom_hline(yintercept = 0, linetype = "dashed")

Exportations, Importations - P6, P7 (%)

Code
`CNA-2020-PIB` |>
  filter(OPERATION %in% c("P6", "P7"), 
         NATURE == "PROPORTION_POURCENTAGE",
         `SECT-INST` == "S0") |>
  year_to_date() |>
  select(OPERATION, OBS_VALUE, date) |>
  left_join(OPERATION,  by = "OPERATION") |>
  ggplot() + theme_minimal() + xlab("") + ylab("") +
  geom_line(aes(x = date, y = OBS_VALUE/100, color = Operation)) + 
  
  theme(legend.title = element_blank(),
        legend.position = c(0.8, 0.2)) +
  scale_x_date(breaks = seq(1920, 2100, 5) |> paste0("-01-01") |> as.Date(),
               labels = date_format("%Y")) +
  scale_y_continuous(breaks = 0.01*seq(-200, 200, 1),
                     labels = scales::percent_format(accuracy = 1)) +
  geom_hline(yintercept = 0, linetype = "dashed")

Solde Net P6-P7

Code
`CNA-2020-PIB` |>
  filter(OPERATION %in% c("B11", "P6", "P7"), 
         NATURE == "PROPORTION_POURCENTAGE",
         `SECT-INST` == "S0") |>
  year_to_date() |>
  select(OPERATION, OBS_VALUE, date) |>
  left_join(OPERATION,  by = "OPERATION") |>
  ggplot() + theme_minimal() + xlab("") + ylab("") +
  geom_line(aes(x = date, y = OBS_VALUE/100, color = Operation)) + 
  
  theme(legend.title = element_blank(),
        legend.position = c(0.7, 0.2)) +
  scale_x_date(breaks = seq(1920, 2100, 5) |> paste0("-01-01") |> as.Date(),
               labels = date_format("%Y")) +
  scale_y_continuous(breaks = 0.01*seq(-200, 200, 1),
                     labels = scales::percent_format(accuracy = 1)) +
  geom_hline(yintercept = 0, linetype = "dashed")