Budget de l’État
Données - INSEE
Info
Last observation: 2026-05
First observation: 2009-01
Number of observations: 836
Last data update: 23 jul 2026, 22:47. Last compile: 24 jul 2026, 05:41
Structure
Publications
Code
tibble(date = "2023-07-31", key = "20942") %>%
add_row(date = "2023-08-31", key = "21072") %>%
add_row(date = "2023-06-30", key = "21005") %>%
mutate(pdf = paste0('<a target=_blank href=https://www.budget.gouv.fr/documentation/file-download/', key, ' > pdf </a>')) %>%
select(-key) %>%
arrange(desc(date)) %>%
{if (is_html_output()) datatable(., filter = 'top', rownames = F, escape = F) else .}- Situation mensuelle sur le budget de l’Etat. html /31 mai 2023 https://www.budget.gouv.fr/documentation/file-download/21005
https://www.budget.gouv.fr/documentation/file-download/21005
https://www.budget.gouv.fr/documentation/file-download/21072
Solde général d’exécution
Tous
Euros courants
Code
n_year <- year(Sys.Date()) - 2009
Sys.setlocale("LC_TIME", "fr_CA.UTF-8")# [1] "fr_CA.UTF-8"
Code
`COMPTES-ETAT` %>%
filter(INDICATEUR %in% c("SGE")) %>%
month_to_date %>%
mutate(date_year = ymd(paste(last_year, month(date), day(date))),
year = paste0(year(date))) %>%
select(date_year, year, OBS_VALUE) %>%
arrange(date_year, year) %>%
ggplot(.) + theme_minimal() + xlab("") + ylab("Solde général d'exécution (€ courants)") +
geom_line(aes(x = date_year, y = OBS_VALUE/1000, color = year)) +
theme(legend.title = element_blank(),
legend.position = "none",
axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1),
legend.direction = "horizontal",
axis.text=element_text(size=12),
axis.title=element_text(size=12,face="bold")) +
scale_colour_manual(values = c(viridis(n_year), "red")) +
scale_linetype_manual(values = c("solid", "dashed", "solid", "dashed", "solid")) +
scale_x_date(breaks = "1 month",
labels = date_format("%B")) +
scale_y_continuous(breaks = seq(-900, 900, 20),
labels = scales::dollar_format(pre = "", su = " Md€")) +
geom_text_repel(data = . %>%
filter(year == last_year) %>%
tail(1),
aes(x = date_year, y = OBS_VALUE/1000, label = year),
fontface ="plain", color = "red", size = 4) +
geom_text_repel(data = . %>%
filter(date_year == as.Date(paste0(last_year, "-12-01"))),
aes(x = date_year, y = OBS_VALUE/1000, label = year),
fontface ="plain", color = viridis(n_year), size = 4)
Euros constants
Code
Sys.setlocale("LC_TIME", "fr_CA.UTF-8")# [1] "fr_CA.UTF-8"
Code
`COMPTES-ETAT` %>%
filter(INDICATEUR %in% c("SGE")) %>%
month_to_date %>%
select(date, OBS_VALUE) %>%
left_join(`IPCH-IPC-2015-ensemble` %>%
select(date, INDICATEUR, OBS_VALUE) %>%
spread(INDICATEUR, OBS_VALUE) %>%
arrange(desc(date)), by = "date") %>%
mutate(OBS_VALUE = IPC[1]*OBS_VALUE/IPC) %>%
mutate(date_year = ymd(paste(last_year, month(date), day(date))),
year = paste0(year(date))) %>%
select(date_year, year, OBS_VALUE) %>%
arrange(date_year, year) %>%
ggplot(.) + theme_minimal() + xlab("") + ylab("Solde général d'exécution (€ constants)") +
geom_line(aes(x = date_year, y = OBS_VALUE/1000, color = year)) +
theme(legend.title = element_blank(),
legend.position = "none",
axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1),
legend.direction = "horizontal",
axis.text=element_text(size=12),
axis.title=element_text(size=12,face="bold")) +
scale_colour_manual(values = c(viridis(n_year), "red")) +
scale_linetype_manual(values = c("solid", "dashed", "solid", "dashed", "solid")) +
scale_x_date(breaks = "1 month",
labels = date_format("%B")) +
scale_y_continuous(breaks = seq(-900, 900, 20),
labels = scales::dollar_format(pre = "", su = " Md€")) +
geom_text_repel(data = . %>%
filter(year == last_year) %>%
tail(1),
aes(x = date_year, y = OBS_VALUE/1000, label = year),
fontface ="plain", color = "red", size = 4) +
geom_text_repel(data = . %>%
filter(date_year == as.Date(paste0(last_year, "-12-01"))),
aes(x = date_year, y = OBS_VALUE/1000, label = year),
fontface ="plain", color = viridis(n_year), size = 4)
% du PIB
Code
Sys.setlocale("LC_TIME", "fr_CA.UTF-8")# [1] "fr_CA.UTF-8"
Code
`COMPTES-ETAT` %>%
filter(INDICATEUR %in% c("SGE")) %>%
month_to_date %>%
select(date, OBS_VALUE) %>%
mutate(year = year(date)) %>%
left_join(gdp %>%
transmute(gdp, year = year(date)), by = "year") %>%
mutate(OBS_VALUE = OBS_VALUE/(gdp*1000)) %>%
mutate(date_year = ymd(paste(last_year, month(date), day(date))),
year = paste0(year(date))) %>%
select(date_year, year, OBS_VALUE) %>%
arrange(date_year, year) %>%
ggplot(.) + theme_minimal() + xlab("") + ylab("Solde général d'exécution (% du PIB)") +
geom_line(aes(x = date_year, y = OBS_VALUE, color = year)) +
theme(legend.title = element_blank(),
legend.position = "none",
axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1),
legend.direction = "horizontal",
axis.text=element_text(size=12),
axis.title=element_text(size=12,face="bold")) +
scale_colour_manual(values = c(viridis(n_year), "red")) +
scale_linetype_manual(values = c("solid", "dashed", "solid", "dashed", "solid")) +
scale_x_date(breaks = "1 month",
labels = date_format("%B")) +
scale_y_continuous(breaks = 0.01*seq(-10, 0, 1),
labels = percent_format(acc = 1)) +
geom_text_repel(data = . %>%
filter(year == last_year) %>%
tail(1),
aes(x = date_year, y = OBS_VALUE, label = year),
fontface ="plain", color = "red", size = 4) +
geom_text_repel(data = . %>%
filter(date_year == as.Date(paste0(last_year, "-12-01"))),
aes(x = date_year, y = OBS_VALUE, label = year),
fontface ="plain", color = viridis(n_year), size = 4)
2015-
Code
n_year <- year(Sys.Date()) - 2015
Sys.setlocale("LC_TIME", "fr_CA.UTF-8")# [1] "fr_CA.UTF-8"
Code
`COMPTES-ETAT` %>%
filter(INDICATEUR %in% c("SGE")) %>%
month_to_date %>%
filter(date >= as.Date("2015-01-01")) %>%
mutate(date_year = ymd(paste(last_year, month(date), day(date))),
year = paste0(year(date))) %>%
select(date_year, year, OBS_VALUE) %>%
arrange(date_year, year) %>%
ggplot(.) + theme_minimal() + xlab("") + ylab("Solde général d'exécution") +
geom_line(aes(x = date_year, y = OBS_VALUE/1000, color = year)) +
theme(legend.title = element_blank(),
legend.position = "none",
axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1),
legend.direction = "horizontal",
axis.text=element_text(size=12),
axis.title=element_text(size=12,face="bold")) +
scale_colour_manual(values = c(viridis(n_year), "red")) +
scale_linetype_manual(values = c("solid", "dashed", "solid", "dashed", "solid")) +
scale_x_date(breaks = "1 month",
labels = date_format("%B")) +
scale_y_continuous(breaks = seq(-900, 900, 20),
labels = scales::dollar_format(pre = "", su = " Md€")) +
geom_text_repel(data = . %>%
filter(year == last_year) %>%
tail(1),
aes(x = date_year, y = OBS_VALUE/1000, label = year),
fontface ="plain", color = "red", size = 4) +
geom_text_repel(data = . %>%
filter(date_year == as.Date(paste0(last_year, "-12-01"))),
aes(x = date_year, y = OBS_VALUE/1000, label = year),
fontface ="plain", color = viridis(n_year), size = 4)
2017-
Code
`COMPTES-ETAT` %>%
filter(INDICATEUR %in% c("SGE")) %>%
month_to_date %>%
filter(date >= as.Date("2017-01-01")) %>%
ggplot(.) + theme_minimal() + xlab("") + ylab("") +
geom_line(aes(x = date, y = OBS_VALUE/1000)) +
theme(legend.title = element_blank(),
legend.position = c(0.7, 0.9)) +
scale_x_date(breaks = seq(1920, 2025, 1) %>% paste0("-01-01") %>% as.Date(),
labels = date_format("%Y")) +
scale_y_continuous(breaks = seq(-900, 900, 20),
labels = scales::dollar_format(pre = "", su = "Mds€"))
2018-
Code
n_year <- year(Sys.Date()) - 2018
Sys.setlocale("LC_TIME", "fr_CA.UTF-8")# [1] "fr_CA.UTF-8"
Code
`COMPTES-ETAT` %>%
filter(INDICATEUR %in% c("SGE")) %>%
month_to_date %>%
filter(date >= as.Date("2018-01-01")) %>%
mutate(date_year = ymd(paste(last_year, month(date), day(date))),
year = paste0(year(date))) %>%
select(date_year, year, OBS_VALUE) %>%
arrange(date_year, year) %>%
ggplot(.) + theme_minimal() + xlab("") + ylab("Solde général d'exécution") +
geom_line(aes(x = date_year, y = OBS_VALUE/1000, color = year)) +
theme(legend.title = element_blank(),
legend.position = "none",
axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1),
legend.direction = "horizontal",
axis.text=element_text(size=12),
axis.title=element_text(size=14,face="bold")) +
scale_colour_manual(values = c(viridis(n_year), "red")) +
scale_linetype_manual(values = c("solid", "dashed", "solid", "dashed", "solid")) +
scale_x_date(breaks = "1 month",
labels = date_format("%B")) +
scale_y_continuous(breaks = seq(-900, 900, 20),
labels = scales::dollar_format(pre = "", su = " Md€")) +
geom_text_repel(data = . %>%
filter(year == last_year) %>%
tail(1),
aes(x = date_year, y = OBS_VALUE/1000, label = year),
fontface ="plain", color = "red", size = 4) +
geom_text_repel(data = . %>%
filter(date_year == as.Date(paste0(last_year, "-12-01"))),
aes(x = date_year, y = OBS_VALUE/1000, label = year),
fontface ="plain", color = viridis(n_year), size = 4)
Dépenses
2009-
Code
n_year <- year(Sys.Date()) - 2009
Sys.setlocale("LC_TIME", "fr_CA.UTF-8")# [1] "fr_CA.UTF-8"
Code
`COMPTES-ETAT` %>%
filter(INDICATEUR %in% c("DEP")) %>%
month_to_date %>%
filter(date >= as.Date("2009-01-01")) %>%
mutate(date_year = ymd(paste(last_year, month(date), day(date))),
year = paste0(year(date))) %>%
select(date_year, year, OBS_VALUE) %>%
arrange(date_year, year) %>%
ggplot(.) + theme_minimal() + xlab("") + ylab("Dépenses") +
geom_line(aes(x = date_year, y = OBS_VALUE/1000, color = year)) +
theme(legend.title = element_blank(),
legend.position = "none",
axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1),
legend.direction = "horizontal",
axis.text=element_text(size=12),
axis.title=element_text(size=14,face="bold")) +
scale_colour_manual(values = c(viridis(n_year), "red")) +
scale_linetype_manual(values = c("solid", "dashed", "solid", "dashed", "solid")) +
scale_x_date(breaks = "1 month",
labels = date_format("%B")) +
scale_y_continuous(breaks = seq(-900, 900, 50),
labels = scales::dollar_format(pre = "", su = " Md€")) +
geom_text_repel(data = . %>%
filter(year == last_year) %>%
tail(1),
aes(x = date_year, y = OBS_VALUE/1000, label = year),
fontface ="plain", color = "red", size = 4) +
geom_text_repel(data = . %>%
filter(date_year == as.Date(paste0(last_year, "-12-01"))),
aes(x = date_year, y = OBS_VALUE/1000, label = year),
fontface ="plain", color = viridis(n_year), size = 4)
2016-
Code
n_year <- year(Sys.Date()) - 2016
Sys.setlocale("LC_TIME", "fr_CA.UTF-8")# [1] "fr_CA.UTF-8"
Code
`COMPTES-ETAT` %>%
filter(INDICATEUR %in% c("DEP")) %>%
month_to_date %>%
filter(date >= as.Date("2016-01-01")) %>%
mutate(date_year = ymd(paste(last_year, month(date), day(date))),
year = paste0(year(date))) %>%
select(date_year, year, OBS_VALUE) %>%
arrange(date_year, year) %>%
ggplot(.) + theme_minimal() + xlab("") + ylab("Dépenses") +
geom_line(aes(x = date_year, y = OBS_VALUE/1000, color = year)) +
theme(legend.title = element_blank(),
legend.position = "none",
axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1),
legend.direction = "horizontal",
axis.text=element_text(size=12),
axis.title=element_text(size=14,face="bold")) +
scale_colour_manual(values = c(viridis(n_year), "red")) +
scale_linetype_manual(values = c("solid", "dashed", "solid", "dashed", "solid")) +
scale_x_date(breaks = "1 month",
labels = date_format("%B")) +
scale_y_continuous(breaks = seq(-900, 900, 50),
labels = scales::dollar_format(pre = "", su = " Md€")) +
geom_text_repel(data = . %>%
filter(year == last_year) %>%
tail(1),
aes(x = date_year, y = OBS_VALUE/1000, label = year),
fontface ="plain", color = "red", size = 4) +
geom_text_repel(data = . %>%
filter(date_year == as.Date(paste0(last_year, "-12-01"))),
aes(x = date_year, y = OBS_VALUE/1000, label = year),
fontface ="plain", color = viridis(n_year), size = 4)
2018-
Code
n_year <- year(Sys.Date()) - 2018
Sys.setlocale("LC_TIME", "fr_CA.UTF-8")# [1] "fr_CA.UTF-8"
Code
`COMPTES-ETAT` %>%
filter(INDICATEUR %in% c("DEP")) %>%
month_to_date %>%
filter(date >= as.Date("2018-01-01")) %>%
mutate(date_year = ymd(paste(last_year, month(date), day(date))),
year = paste0(year(date))) %>%
select(date_year, year, OBS_VALUE) %>%
arrange(date_year, year) %>%
ggplot(.) + theme_minimal() + xlab("") + ylab("Dépenses") +
geom_line(aes(x = date_year, y = OBS_VALUE/1000, color = year)) +
theme(legend.title = element_blank(),
legend.position = "none",
axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1),
legend.direction = "horizontal",
axis.text=element_text(size=12),
axis.title=element_text(size=14,face="bold")) +
scale_colour_manual(values = c(viridis(n_year), "red")) +
scale_linetype_manual(values = c("solid", "dashed", "solid", "dashed", "solid")) +
scale_x_date(breaks = "1 month",
labels = date_format("%B")) +
scale_y_continuous(breaks = seq(-900, 900, 50),
labels = scales::dollar_format(pre = "", su = " Md€")) +
geom_text_repel(data = . %>%
filter(year == last_year) %>%
tail(1),
aes(x = date_year, y = OBS_VALUE/1000, label = year),
fontface ="plain", color = "red", size = 4) +
geom_text_repel(data = . %>%
filter(date_year == as.Date(paste0(last_year, "-12-01"))),
aes(x = date_year, y = OBS_VALUE/1000, label = year),
fontface ="plain", color = viridis(n_year), size = 4)
Recettes
2009-
Code
n_year <- year(Sys.Date()) - 2009
Sys.setlocale("LC_TIME", "fr_CA.UTF-8")# [1] "fr_CA.UTF-8"
Code
`COMPTES-ETAT` %>%
filter(INDICATEUR %in% c("REC")) %>%
month_to_date %>%
filter(date >= as.Date("2009-01-01")) %>%
mutate(date_year = ymd(paste(last_year, month(date), day(date))),
year = paste0(year(date))) %>%
select(date_year, year, OBS_VALUE) %>%
arrange(date_year, year) %>%
ggplot(.) + theme_minimal() + xlab("") + ylab("Recettes") +
geom_line(aes(x = date_year, y = OBS_VALUE/1000, color = year)) +
theme(legend.title = element_blank(),
legend.position = "none",
axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1),
legend.direction = "horizontal",
axis.text=element_text(size=12),
axis.title=element_text(size=14,face="bold")) +
scale_colour_manual(values = c(viridis(n_year), "red")) +
scale_linetype_manual(values = c("solid", "dashed", "solid", "dashed", "solid")) +
scale_x_date(breaks = "1 month",
labels = date_format("%B")) +
scale_y_continuous(breaks = seq(-900, 900, 50),
labels = scales::dollar_format(pre = "", su = " Md€")) +
geom_text_repel(data = . %>%
filter(year == last_year) %>%
tail(1),
aes(x = date_year, y = OBS_VALUE/1000, label = year),
fontface ="plain", color = "red", size = 4) +
geom_text_repel(data = . %>%
filter(date_year == as.Date(paste0(last_year, "-12-01"))),
aes(x = date_year, y = OBS_VALUE/1000, label = year),
fontface ="plain", color = viridis(n_year), size = 4)
2018-
Code
n_year <- year(Sys.Date()) - 2018
Sys.setlocale("LC_TIME", "fr_CA.UTF-8")# [1] "fr_CA.UTF-8"
Code
`COMPTES-ETAT` %>%
filter(INDICATEUR %in% c("REC")) %>%
month_to_date %>%
filter(date >= as.Date("2018-01-01")) %>%
mutate(date_year = ymd(paste(last_year, month(date), day(date))),
year = paste0(year(date))) %>%
select(date_year, year, OBS_VALUE) %>%
arrange(date_year, year) %>%
ggplot(.) + theme_minimal() + xlab("") + ylab("Recettes") +
geom_line(aes(x = date_year, y = OBS_VALUE/1000, color = year)) +
theme(legend.title = element_blank(),
legend.position = "none",
axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1),
legend.direction = "horizontal",
axis.text=element_text(size=12),
axis.title=element_text(size=14,face="bold")) +
scale_colour_manual(values = c(viridis(n_year), "red")) +
scale_linetype_manual(values = c("solid", "dashed", "solid", "dashed", "solid")) +
scale_x_date(breaks = "1 month",
labels = date_format("%B")) +
scale_y_continuous(breaks = seq(-900, 900, 50),
labels = scales::dollar_format(pre = "", su = " Md€")) +
geom_text_repel(data = . %>%
filter(year == last_year) %>%
tail(1),
aes(x = date_year, y = OBS_VALUE/1000, label = year),
fontface ="plain", color = "red", size = 4) +
geom_text_repel(data = . %>%
filter(date_year == as.Date(paste0(last_year, "-12-01"))),
aes(x = date_year, y = OBS_VALUE/1000, label = year),
fontface ="plain", color = viridis(n_year), size = 4)
Dépenses, Recettes
Tous
Code
`COMPTES-ETAT` %>%
filter(INDICATEUR %in% c("DEP", "REC")) %>%
month_to_date %>%
ggplot(.) + theme_minimal() + xlab("") + ylab("") +
geom_line(aes(x = date, y = OBS_VALUE/1000, color = Indicateur)) +
theme(legend.title = element_blank(),
legend.position = c(0.7, 0.9)) +
scale_x_date(breaks = seq(1920, 2025, 1) %>% paste0("-01-01") %>% as.Date(),
labels = date_format("%Y")) +
scale_y_continuous(breaks = seq(0, 900, 50),
labels = scales::dollar_format(pre = "", su = "Mds€"))
2017-
Code
`COMPTES-ETAT` %>%
filter(INDICATEUR %in% c("DEP", "REC")) %>%
month_to_date %>%
filter(date >= as.Date("2017-01-01")) %>%
ggplot(.) + theme_minimal() + xlab("") + ylab("") +
geom_line(aes(x = date, y = OBS_VALUE/1000, color = Indicateur)) +
theme(legend.title = element_blank(),
legend.position = c(0.2, 0.9)) +
scale_x_date(breaks = seq(1920, 2025, 1) %>% paste0("-01-01") %>% as.Date(),
labels = date_format("%Y")) +
scale_y_continuous(breaks = seq(0, 900, 50),
labels = scales::dollar_format(pre = "", su = "Mds€"))
Last year
Code
`COMPTES-ETAT` %>%
filter(INDICATEUR %in% c("DEP", "REC")) %>%
month_to_date %>%
group_by(INDICATEUR) %>%
arrange(date) %>%
do(tail(., n = 12)) %>%
ggplot(.) + theme_minimal() + xlab("") + ylab("") +
geom_line(aes(x = date, y = OBS_VALUE/1000, color = Indicateur)) +
theme(legend.title = element_blank(),
legend.position = c(0.2, 0.9)) +
scale_x_date(breaks = "1 month",
labels = date_format("%b %y")) +
scale_y_continuous(breaks = seq(0, 900, 50),
labels = scales::dollar_format(pre = "", su = "Mds€"))