SSB har en nettside som gir oss tilgang til årlig historisk bruttonasjonalprodukt (BNP) i perioden 1865-2011.
Historisk BNP 1865-2011
Tabellen innheolder BNP pr. år som måles i faste 2005-priser i millioner kroner. Det vises også BNP pr. innbygger, og årlig prosentvis endring i begge BNP størrelser i perioden 1865-2011.
Vi laster nødvendige R
pakker for å kunne skrape disse dataene fra nettsiden.
library(tidyverse)
── Attaching packages ─────────────────────────── tidyverse 1.3.0 ──
✓ ggplot2 3.3.2 ✓ purrr 0.3.3
✓ tibble 3.0.3 ✓ dplyr 1.0.2
✓ tidyr 1.1.2 ✓ stringr 1.4.0
✓ readr 1.3.1 ✓ forcats 0.4.0
── Conflicts ────────────────────────────── tidyverse_conflicts() ──
x dplyr::filter() masks stats::filter()
x dplyr::lag() masks stats::lag()
library(rvest)
Loading required package: xml2
Attaching package: 'rvest'
The following object is masked from 'package:purrr':
pluck
The following object is masked from 'package:readr':
guess_encoding
Vi leser nettsiden, og trekker ut tabellen som er lokaliser i html noden table
.
webpage <- read_html("https://www.ssb.no/a/histstat/aarbok/ht-0901-bnp.html")
tabell <- html_table(html_nodes(webpage, "table")[[2]])
Nærmere inspeksjon viser at første kolonne mangler variabelnavn. Siste rekke er overflødig og inneholder en manglende observasjon (\(NA\)). De fleste av variablene leses som tegn og ikke tall.
head(tabell)
Bruttonasjonalprodukt (BNP) BNP, årlig endring BNP per innbygger
1 1865 31 785 18806
2 1866 32 375 1,9 18963
3 1867 33 173 2,5 19322
4 1868 33 133 -0,1 19207
5 1869 34 411 3,9 19880
6 1870 34 328 -0,2 19764
BNP per innbygger, årlig endring
1
2 0,8
3 1,9
4 -0,6
5 3,5
6 -0,6
tail(tabell)
Bruttonasjonalprodukt (BNP) BNP, årlig endring BNP per innbygger
143 2007 2 057 103 2,7 436831
144 2008 2 058 493 0,1 431712
145 2009 2 024 839 -1,6 419332
146 2010 2 034 520 0,5 416121
147 2011 2 059 297 1,2 415760
148 NA NA
BNP per innbygger, årlig endring
143 1,6
144 -1,2
145 -2,9
146 -0,8
147 -0,1
148
str(tabell)
'data.frame': 148 obs. of 5 variables:
$ : int 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 ...
$ Bruttonasjonalprodukt (BNP) : chr "31 785" "32 375" "33 173" "33 133" ...
$ BNP, årlig endring : chr "" "1,9" "2,5" "-0,1" ...
$ BNP per innbygger : int 18806 18963 19322 19207 19880 19764 20002 21176 21523 22120 ...
$ BNP per innbygger, årlig endring: chr "" "0,8" "1,9" "-0,6" ...
names(tabell)
[1] "" "Bruttonasjonalprodukt (BNP)"
[3] "BNP, årlig endring" "BNP per innbygger"
[5] "BNP per innbygger, årlig endring"
Vi gjør klar til å bearbeide tabellen slik at den blir formatert riktig. Først fjerner vi manglende observasjon.
tabell <- tabell %>% drop_na()
Deretter lager vi nye variabelnavn, og gjør tabellen om til en tibble
data.frame.
names(tabell) <- c("År", "BNP", "BNP_endring",
"BNP_percap", "BNP_percap_endring")
tabell <- as_tibble(tabell)
tabell
# A tibble: 147 x 5
År BNP BNP_endring BNP_percap BNP_percap_endring
<int> <chr> <chr> <int> <chr>
1 1865 31 785 "" 18806 ""
2 1866 32 375 "1,9" 18963 "0,8"
3 1867 33 173 "2,5" 19322 "1,9"
4 1868 33 133 "-0,1" 19207 "-0,6"
5 1869 34 411 "3,9" 19880 "3,5"
6 1870 34 328 "-0,2" 19764 "-0,6"
7 1871 34 930 "1,8" 20002 "1,2"
8 1872 37 205 "6,5" 21176 "5,9"
9 1873 38 084 "2,4" 21523 "1,6"
10 1874 39 521 "3,8" 22120 "2,8"
# … with 137 more rows
Deretter erstatter vi mellomrom som tusenskilletegn for BNP, og tomme tegn ("“) for endringene med manglende observasjon (\(NA\)). Til sist erstatter vi komma (”,“) med punktum (”.") som desimalskilletegn og koder alle variabler som er tegn om til numeriske verdier.
tabell <-
tabell %>%
mutate(BNP=str_replace(BNP, " ", ""),
BNP_endring=na_if(BNP_endring, ""),
BNP_percap_endring=na_if(BNP_percap_endring, ""),
BNP_endring=str_replace(BNP_endring, ",","."),
BNP_percap_endring=str_replace(BNP_percap_endring, ",",".")) %>%
mutate_if(is.character, as.numeric)
Warning: Problem with `mutate()` input `BNP`.
ℹ NAs introduced by coercion
ℹ Input `BNP` is `.Primitive("as.double")(BNP)`.
Warning in mask$eval_all_mutate(dots[[i]]): NAs introduced by coercion
tabell
# A tibble: 147 x 5
År BNP BNP_endring BNP_percap BNP_percap_endring
<int> <dbl> <dbl> <int> <dbl>
1 1865 31785 NA 18806 NA
2 1866 32375 1.9 18963 0.8
3 1867 33173 2.5 19322 1.9
4 1868 33133 -0.1 19207 -0.6
5 1869 34411 3.9 19880 3.5
6 1870 34328 -0.2 19764 -0.6
7 1871 34930 1.8 20002 1.2
8 1872 37205 6.5 21176 5.9
9 1873 38084 2.4 21523 1.6
10 1874 39521 3.8 22120 2.8
# … with 137 more rows
Lag et plot med BNP per innbygger i perioden.
Gitt disse dataene, er det en annen viktig størrelse som vi kan trekke ut av dem, hvilken?