Gross capital formation by industry (up to NACE A*64)

Data - Eurostat

Info

Last observation: Annual: 2025 (N = 41,502)

First observation: Annual: 1975 (N = 37,145)

Last data update: 23 jul 2026, 23:13. Last compile: 24 jul 2026, 02:40

Structure

France, Italy, Germany

C - Manufacturing

Code
nama_10_a64_p5 %>%
  filter(unit == "CP_MEUR",
         geo %in% c("FR", "IT", "DE"),
         nace_r2 == "C",
         asset10 == "N11G") %>%
  left_join(nama_10_gdp %>%
              filter(na_item == "B1GQ",
                     unit == "CP_MEUR") %>%
              select(geo, time, gdp = values), 
            by = c("geo", "time")) %>%
  
  year_to_date %>%
  filter(date >= as.Date("1995-01-01")) %>%
  left_join(colors, by = c("Geo" = "country")) %>%
  mutate(values = values/gdp) %>%
  ggplot + geom_line(aes(x = date, y = values, color = color)) +
  theme_minimal()  + add_3flags +
  scale_color_identity() + xlab("") + ylab("% of GDP") +
  scale_x_date(breaks = as.Date(paste0(seq(1960, 2100, 5), "-01-01")),
               labels = date_format("%Y")) +
  theme(legend.position = c(0.2, 0.85),
        legend.title = element_blank()) +
  scale_y_continuous(breaks = 0.01*seq(0, 200, .1),
                     labels = scales::percent_format(accuracy = .1))

B-E - Energy

Code
nama_10_a64_p5 %>%
  filter(unit == "CP_MEUR",
         geo %in% c("FR", "IT", "DE"),
         nace_r2 == "B-E",
         asset10 == "N11G") %>%
  left_join(nama_10_gdp %>%
              filter(na_item == "B1GQ",
                     unit == "CP_MEUR") %>%
              select(geo, time, gdp = values), 
            by = c("geo", "time")) %>%
  
  year_to_date %>%
  filter(date >= as.Date("1995-01-01")) %>%
  left_join(colors, by = c("Geo" = "country")) %>%
  mutate(values = values/gdp) %>%
  ggplot + geom_line(aes(x = date, y = values, color = color)) +
  theme_minimal()  + add_3flags +
  scale_color_identity() + xlab("") + ylab("% of GDP") +
  scale_x_date(breaks = as.Date(paste0(seq(1960, 2100, 5), "-01-01")),
               labels = date_format("%Y")) +
  theme(legend.position = c(0.2, 0.85),
        legend.title = element_blank()) +
  scale_y_continuous(breaks = 0.01*seq(0, 200, .1),
                     labels = scales::percent_format(accuracy = .1))

France, Italy, United Kingdom, Spain, Germany

TOTAL investment

N11G - Total

Table

Code
nama_10_a64_p5 %>%
  filter(unit == "CP_MEUR",
         geo %in% c("FR", "NL", "IT", "ES", "DE"),
         asset10 == "N11G",
         time == "2021") %>%
  left_join(nama_10_gdp %>%
              filter(na_item == "B1GQ",
                     unit == "CP_MEUR") %>%
              select(geo, time, gdp = values), 
            by = c("geo", "time")) %>%
  
  
  mutate(values = 100*values/gdp) %>%
  select_if(~ n_distinct(.) > 1) %>%
  select(-geo, -gdp) %>%
  spread(Geo, values) %>%
  arrange(-France) %>%
  print_table_conditional()

TOTAL - All sectors

Code
nama_10_a64_p5 %>%
  filter(unit == "CP_MEUR",
         geo %in% c("FR", "NL", "IT", "ES", "DE"),
         nace_r2 == "TOTAL",
         asset10 == "N11G") %>%
  left_join(nama_10_gdp %>%
              filter(na_item == "B1GQ",
                     unit == "CP_MEUR") %>%
              select(geo, time, gdp = values), 
            by = c("geo", "time")) %>%
  
  year_to_date %>%
  filter(date >= as.Date("1995-01-01")) %>%
  left_join(colors, by = c("Geo" = "country")) %>%
  mutate(values = values/gdp) %>%
  ggplot + geom_line(aes(x = date, y = values, color = color)) +
  theme_minimal()  + add_5flags +
  scale_color_identity() + xlab("") + ylab("% of GDP") +
  scale_x_date(breaks = as.Date(paste0(seq(1960, 2100, 5), "-01-01")),
               labels = date_format("%Y")) +
  theme(legend.position = c(0.2, 0.85),
        legend.title = element_blank()) +
  scale_y_continuous(breaks = 0.01*seq(0, 200, 1),
                     labels = scales::percent_format(accuracy = 1))

J - Information - communication

Code
nama_10_a64_p5 %>%
  filter(unit == "CP_MEUR",
         geo %in% c("FR", "NL", "IT", "ES", "DE"),
         nace_r2 == "J",
         asset10 == "N11G") %>%
  left_join(nama_10_gdp %>%
              filter(na_item == "B1GQ",
                     unit == "CP_MEUR") %>%
              select(geo, time, gdp = values), 
            by = c("geo", "time")) %>%
  
  year_to_date %>%
  filter(date >= as.Date("1995-01-01")) %>%
  left_join(colors, by = c("Geo" = "country")) %>%
  mutate(values = values/gdp) %>%
  ggplot + geom_line(aes(x = date, y = values, color = color)) +
  theme_minimal()  + add_5flags +
  scale_color_identity() + xlab("") + ylab("J - Information - communication\n% of GDP") +
  scale_x_date(breaks = as.Date(paste0(seq(1960, 2100, 5), "-01-01")),
               labels = date_format("%Y")) +
  theme(legend.position = c(0.2, 0.85),
        legend.title = element_blank()) +
  scale_y_continuous(breaks = 0.01*seq(0, 200, .1),
                     labels = scales::percent_format(accuracy = .1))

C - Manufacturing

Code
nama_10_a64_p5 %>%
  filter(unit == "CP_MEUR",
         geo %in% c("FR", "NL", "IT", "ES", "DE"),
         nace_r2 == "C",
         asset10 == "N11G") %>%
  left_join(nama_10_gdp %>%
              filter(na_item == "B1GQ",
                     unit == "CP_MEUR") %>%
              select(geo, time, gdp = values), 
            by = c("geo", "time")) %>%
  
  year_to_date %>%
  filter(date >= as.Date("1995-01-01")) %>%
  left_join(colors, by = c("Geo" = "country")) %>%
  mutate(values = values/gdp) %>%
  ggplot + geom_line(aes(x = date, y = values, color = color)) +
  theme_minimal()  + add_5flags +
  scale_color_identity() + xlab("") + ylab("% of GDP") +
  scale_x_date(breaks = as.Date(paste0(seq(1960, 2100, 5), "-01-01")),
               labels = date_format("%Y")) +
  theme(legend.position = c(0.2, 0.85),
        legend.title = element_blank()) +
  scale_y_continuous(breaks = 0.01*seq(0, 200, .1),
                     labels = scales::percent_format(accuracy = .1))

M - Professional, scientific and technical activities

All
Code
nama_10_a64_p5 %>%
  filter(unit == "CP_MEUR",
         geo %in% c("FR", "NL", "IT", "ES", "DE"),
         nace_r2 == "M",
         asset10 == "N11G") %>%
  left_join(nama_10_gdp %>%
              filter(na_item == "B1GQ",
                     unit == "CP_MEUR") %>%
              select(geo, time, gdp = values), 
            by = c("geo", "time")) %>%
  
  year_to_date %>%
  filter(date >= as.Date("1995-01-01")) %>%
  left_join(colors, by = c("Geo" = "country")) %>%
  mutate(values = values/gdp) %>%
  ggplot + geom_line(aes(x = date, y = values, color = color)) +
  theme_minimal()  + add_5flags +
  scale_color_identity() + xlab("") + ylab("M - Professional, scientific and technical activities\n% of GDP") +
  scale_x_date(breaks = as.Date(paste0(seq(1960, 2100, 5), "-01-01")),
               labels = date_format("%Y")) +
  theme(legend.position = c(0.2, 0.85),
        legend.title = element_blank()) +
  scale_y_continuous(breaks = 0.01*seq(0, 200, .1),
                     labels = scales::percent_format(accuracy = .1))

N117G
Code
nama_10_a64_p5 %>%
  filter(unit == "CP_MEUR",
         geo %in% c("FR", "NL", "IT", "ES", "DE"),
         nace_r2 == "M",
         asset10 == "N117G") %>%
  left_join(nama_10_gdp %>%
              filter(na_item == "B1GQ",
                     unit == "CP_MEUR") %>%
              select(geo, time, gdp = values), 
            by = c("geo", "time")) %>%
  
  year_to_date %>%
  filter(date >= as.Date("1995-01-01")) %>%
  left_join(colors, by = c("Geo" = "country")) %>%
  mutate(values = values/gdp) %>%
  ggplot + geom_line(aes(x = date, y = values, color = color)) +
  theme_minimal()  + add_5flags +
  scale_color_identity() + xlab("") + ylab("M - Professional, scientific and technical activities\n% of GDP") +
  scale_x_date(breaks = as.Date(paste0(seq(1960, 2100, 5), "-01-01")),
               labels = date_format("%Y")) +
  theme(legend.position = c(0.2, 0.85),
        legend.title = element_blank()) +
  scale_y_continuous(breaks = 0.01*seq(0, 200, .1),
                     labels = scales::percent_format(accuracy = .1))

O - Public administration and defence; compulsory social security

Code
nama_10_a64_p5 %>%
  filter(unit == "CP_MEUR",
         geo %in% c("FR", "NL", "IT", "ES", "DE"),
         nace_r2 == "O",
         asset10 == "N11G") %>%
  left_join(nama_10_gdp %>%
              filter(na_item == "B1GQ",
                     unit == "CP_MEUR") %>%
              select(geo, time, gdp = values), 
            by = c("geo", "time")) %>%
  
  year_to_date %>%
  filter(date >= as.Date("1995-01-01")) %>%
  left_join(colors, by = c("Geo" = "country")) %>%
  mutate(values = values/gdp) %>%
  ggplot + geom_line(aes(x = date, y = values, color = color)) +
  theme_minimal()  + add_5flags +
  scale_color_identity() + xlab("") + ylab("% of GDP") +
  scale_x_date(breaks = as.Date(paste0(seq(1960, 2100, 5), "-01-01")),
               labels = date_format("%Y")) +
  theme(legend.position = c(0.2, 0.85),
        legend.title = element_blank()) +
  scale_y_continuous(breaks = 0.01*seq(0, 200, .1),
                     labels = scales::percent_format(accuracy = .1))

B-E - Industry

Code
nama_10_a64_p5 %>%
  filter(unit == "CP_MEUR",
         geo %in% c("FR", "NL", "IT", "ES", "DE"),
         nace_r2 == "B-E",
         asset10 == "N11G") %>%
  left_join(nama_10_gdp %>%
              filter(na_item == "B1GQ",
                     unit == "CP_MEUR") %>%
              select(geo, time, gdp = values), 
            by = c("geo", "time")) %>%
  
  year_to_date %>%
  filter(date >= as.Date("1995-01-01")) %>%
  left_join(colors, by = c("Geo" = "country")) %>%
  mutate(values = values/gdp) %>%
  ggplot + geom_line(aes(x = date, y = values, color = color)) +
  theme_minimal()  + add_5flags +
  scale_color_identity() + xlab("") + ylab("% of GDP") +
  scale_x_date(breaks = as.Date(paste0(seq(1960, 2100, 5), "-01-01")),
               labels = date_format("%Y")) +
  theme(legend.position = c(0.2, 0.85),
        legend.title = element_blank()) +
  scale_y_continuous(breaks = 0.01*seq(0, 200, .1),
                     labels = scales::percent_format(accuracy = .1))

F - Construction

Code
nama_10_a64_p5 %>%
  filter(unit == "CP_MEUR",
         geo %in% c("FR", "NL", "IT", "CH", "DE"),
         nace_r2 == "F",
         asset10 == "N11G") %>%
  left_join(nama_10_gdp %>%
              filter(na_item == "B1GQ",
                     unit == "CP_MEUR") %>%
              select(geo, time, gdp = values), 
            by = c("geo", "time")) %>%
  
  year_to_date %>%
  filter(date >= as.Date("1995-01-01")) %>%
  left_join(colors, by = c("Geo" = "country")) %>%
  mutate(values = values/gdp) %>%
  ggplot + geom_line(aes(x = date, y = values, color = color)) +
  theme_minimal()  + add_4flags +
  scale_color_identity() + xlab("") + ylab("% of GDP") +
  scale_x_date(breaks = as.Date(paste0(seq(1960, 2100, 5), "-01-01")),
               labels = date_format("%Y")) +
  theme(legend.position = c(0.2, 0.85),
        legend.title = element_blank()) +
  scale_y_continuous(breaks = 0.01*seq(0, 200, .1),
                     labels = scales::percent_format(accuracy = .1))

C20 - Chemicals

Code
nama_10_a64_p5 %>%
  filter(unit == "CP_MEUR",
         geo %in% c("FR", "NL", "IT", "ES", "DE"),
         nace_r2 == "C20",
         asset10 == "N11G") %>%
  left_join(nama_10_gdp %>%
              filter(na_item == "B1GQ",
                     unit == "CP_MEUR") %>%
              select(geo, time, gdp = values), 
            by = c("geo", "time")) %>%
  
  year_to_date %>%
  filter(date >= as.Date("1995-01-01")) %>%
  left_join(colors, by = c("Geo" = "country")) %>%
  mutate(values = values/gdp) %>%
  ggplot + geom_line(aes(x = date, y = values, color = color)) +
  theme_minimal()  + add_3flags +
  scale_color_identity() + xlab("") + ylab("% of GDP") +
  scale_x_date(breaks = as.Date(paste0(seq(1960, 2100, 5), "-01-01")),
               labels = date_format("%Y")) +
  theme(legend.position = c(0.2, 0.85),
        legend.title = element_blank()) +
  scale_y_continuous(breaks = 0.01*seq(0, 200, .1),
                     labels = scales::percent_format(accuracy = .1))

N117G - Intellectual property products (gross)

Code
nama_10_a64_p5 %>%
  filter(unit == "CP_MEUR",
         geo %in% c("FR", "NL", "IT", "ES", "DE"),
         nace_r2 == "TOTAL",
         asset10 == "N117G") %>%
  left_join(nama_10_gdp %>%
              filter(na_item == "B1GQ",
                     unit == "CP_MEUR") %>%
              select(geo, time, gdp = values), 
            by = c("geo", "time")) %>%
  
  year_to_date %>%
  filter(date >= as.Date("1995-01-01")) %>%
  left_join(colors, by = c("Geo" = "country")) %>%
  mutate(values = values/gdp) %>%
  ggplot + geom_line(aes(x = date, y = values, color = color)) +
  theme_minimal()  + add_5flags +
  scale_color_identity() + xlab("") + ylab("% of GDP") +
  scale_x_date(breaks = as.Date(paste0(seq(1960, 2100, 5), "-01-01")),
               labels = date_format("%Y")) +
  theme(legend.position = c(0.2, 0.85),
        legend.title = element_blank()) +
  scale_y_continuous(breaks = 0.01*seq(0, 200, 1),
                     labels = scales::percent_format(accuracy = 1))

N1132G - ICT equipment (gross)

Code
nama_10_a64_p5 %>%
  filter(unit == "CP_MEUR",
         geo %in% c("FR", "NL", "IT", "ES", "DE"),
         nace_r2 == "TOTAL",
         asset10 == "N1132G") %>%
  left_join(nama_10_gdp %>%
              filter(na_item == "B1GQ",
                     unit == "CP_MEUR") %>%
              select(geo, time, gdp = values), 
            by = c("geo", "time")) %>%
  
  year_to_date %>%
  filter(date >= as.Date("1995-01-01")) %>%
  left_join(colors, by = c("Geo" = "country")) %>%
  mutate(values = values/gdp) %>%
  ggplot + geom_line(aes(x = date, y = values, color = color)) +
  theme_minimal()  + add_5flags +
  scale_color_identity() + xlab("") + ylab("% of GDP") +
  scale_x_date(breaks = as.Date(paste0(seq(1960, 2100, 5), "-01-01")),
               labels = date_format("%Y")) +
  theme(legend.position = c(0.2, 0.85),
        legend.title = element_blank()) +
  scale_y_continuous(breaks = 0.01*seq(0, 200, .2),
                     labels = scales::percent_format(accuracy = .1))

Investissement en France

Long

Code
nama_10_a64_p5 %>%
  filter(geo == "FR",
         na_item == "P51G",
         unit == "CP_MEUR",
         time == "2018") %>%
  
  
  select(nace_r2, Nace_r2, asset10, Asset10, values) %>%
  arrange(-values) %>%
  {if (is_html_output()) datatable(., filter = 'top', rownames = F) else .}

Large

Code
nama_10_a64_p5 %>%
  filter(geo == "FR",
         na_item == "P51G",
         unit == "CP_MEUR",
         time == "2018") %>%
  
  select(nace_r2, Nace_r2, asset10, values) %>%
  spread(asset10, values) %>%
  {if (is_html_output()) datatable(., filter = 'top', rownames = F) else .}

France, Germany, Italy, Netherlands, Spain

N11G - All

Code
nama_10_a64_p5 %>%
  filter(unit == "PD15_EUR",
         geo %in% c("FR", "NL", "IT", "DE", "ES"),
         nace_r2 == "TOTAL",
         asset10 == "N11G") %>%
  
  year_to_date %>%
  filter(date >= as.Date("1995-01-01")) %>%
  left_join(colors, by = c("Geo" = "country")) %>%
  group_by(Geo) %>%
  mutate(values = 100*values/values[date == as.Date("1995-01-01")]) %>%
  ggplot + geom_line(aes(x = date, y = values, color = color)) +
  theme_minimal()  + add_5flags +
  scale_color_identity() + xlab("") + ylab("") +
  scale_x_date(breaks = as.Date(paste0(seq(1960, 2100, 2), "-01-01")),
               labels = date_format("%Y")) +
  theme(legend.position = c(0.2, 0.85),
        legend.title = element_blank()) +
  scale_y_log10(breaks = seq(10, 300, 10))

N1132G - ICT equipment (gross)

Code
nama_10_a64_p5 %>%
  filter(unit == "PD15_EUR",
         geo %in% c("FR", "NL", "IT", "DE", "ES"),
         nace_r2 == "TOTAL",
         asset10 == "N1132G") %>%
  
  year_to_date %>%
  filter(date >= as.Date("1995-01-01")) %>%
  left_join(colors, by = c("Geo" = "country")) %>%
  group_by(Geo) %>%
  mutate(values = 100*values/values[date == as.Date("1995-01-01")]) %>%
  ggplot + geom_line(aes(x = date, y = values, color = color)) +
  theme_minimal()  + add_5flags +
  scale_color_identity() + xlab("") + ylab("") +
  scale_x_date(breaks = as.Date(paste0(seq(1960, 2100, 2), "-01-01")),
               labels = date_format("%Y")) +
  theme(legend.position = c(0.2, 0.85),
        legend.title = element_blank()) +
  scale_y_log10(breaks = seq(10, 300, 10))

Information -communication

Code
nama_10_a64_p5 %>%
  filter(unit == "PD15_EUR",
         geo %in% c("FR", "NL", "IT", "DE", "ES"),
         nace_r2 == "J",
         asset10 == "N11G") %>%
  
  year_to_date %>%
  filter(date >= as.Date("1995-01-01")) %>%
  left_join(colors, by = c("Geo" = "country")) %>%
  group_by(Geo) %>%
  mutate(values = 100*values/values[date == as.Date("1995-01-01")]) %>%
  ggplot + geom_line(aes(x = date, y = values, color = color)) +
  theme_minimal()  + add_5flags +
  scale_color_identity() + xlab("") + ylab("") +
  scale_x_date(breaks = as.Date(paste0(seq(1960, 2100, 2), "-01-01")),
               labels = date_format("%Y")) +
  theme(legend.position = c(0.2, 0.85),
        legend.title = element_blank()) +
  scale_y_log10(breaks = seq(10, 300, 10))