Bruttonasjonalprodukt 1865-2011

SSB har en nettside som gir oss tilgang til årlig historisk bruttonasjonalprodukt (BNP) i perioden 1865-2011.

Historisk BNP 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

Oppgave 1

Lag et plot med BNP per innbygger i perioden.

Oppgave 2

Gitt disse dataene, er det en annen viktig størrelse som vi kan trekke ut av dem, hvilken?