R/t08801_ImpExp_Trevarer.R

Defines functions plot_rw_export t08801tre

Documented in plot_rw_export t08801tre

 #' Import Export wood assortments, pr year.
 #'
 #' Import and export 1996 - now.
 #' Not sure if energywood assortments and wood is included
 #'
 #' @return a tibble with the entire dataset
 #' @export
 #' @source \url{https://www.ssb.no/statbank/table/08801/}
 #'
 #' @examples
 #'  dt <- t08801tre()
 #'  str(dt)
 #'  dt %>% mutate(kr_pr_m3 = ifelse(!is.na(m3) & m3>0, kr / m3, NA_real_)) %>%
 #'   filter(!(stringr::str_detect(.data$grovsort, "440") )) %>%
 #'    dplyr::filter(.data$kr_pr_m3 > 2000) %>%
 #'   arrange(desc(kr_pr_m3)) %>%
 #'   select(Tid, Varekoder, ImpEks, grovsort, assortment, m3, kg, kr,
 #'   kr_pr_m3, norsk) %>% str()
t08801tre <- function() {

    # Eksempel fra SSB
    # https://www.ssb.no/api/pxwebapi/api-eksempler-pa-kode/enkelt-r-eksempel-med-ferdig-datasett
    # https://cran.r-project.org/web/packages/PxWebApiData/vignettes/Introduction.html

    #Varekoder
    # https://www.ssb.no/utenriksokonomi/utenrikshandel/artikler/statistisk-varefortegnelse-for-utenrikshandelen/

  variables <- PxWebApiData::ApiData("http://data.ssb.no/api/v0/en/table/08801", returnMetaFrames = TRUE)
  varwhich <-  which(stringr::str_detect(variables[[1]]$values, pattern = "^4401|^4402|^4403" ))
  varvals <-  variables[[1]]$values[varwhich]
  vartext <- variables[[1]]$valueTexts[varwhich]
  descr <- data.frame(varvals = varvals, vartext = vartext)

  variabler <- PxWebApiData::ApiData("http://data.ssb.no/api/v0/no/table/08801", returnMetaFrames = TRUE)
  varhvlke <-  which(stringr::str_detect(variabler[[1]]$values, pattern = "^4401|^4402|^4403" ))
  varvals <-  variabler[[1]]$values[varhvlke]
  vartext <- variabler[[1]]$valueTexts[varhvlke]
  beskr <- data.frame(varvals = varvals, vartext = vartext)

  engnorsk <- dplyr::left_join(descr, beskr, by = c("varvals")) %>% dplyr::rename(norsk = "vartext.y", eng = "vartext.x")
# engnorsk %>% dplyr::select(varvals, norsk) %>% dplyr::arrange(varvals)
# str(engnorsk)
  engnorsk <- engnorsk %>%
    dplyr::mutate(
        grovsort = dplyr::case_when(
        stringr::str_detect(string = .data$norsk, pattern = "^Massevirke av furu") ~ "Furu mv",
        stringr::str_detect(string = .data$norsk, pattern = "^Massevirke av gran") ~ "Gran mv",
        stringr::str_detect(string = .data$norsk, pattern = "^Massevirke av bj") ~ "Lauv mv",
        stringr::str_detect(string = .data$norsk, pattern = "^Massevirke av lauv") ~ "Lauv mv",
        stringr::str_detect(string = .data$norsk, pattern = "mmer av furu") ~ "Furu sagt",
        stringr::str_detect(string = .data$norsk, pattern = "mmer av gran") ~ "Gran sagt",
        stringr::str_detect(string = .data$norsk, pattern = "mmer av bj") ~ "Lauv sagt",
        stringr::str_detect(string = .data$norsk, pattern = "mmer av lauvt" ) ~ "Lauv sagt",
        varvals %in% c("44039200_1988", "44039300_2017",  "44039400_2017") ~ "Lauv sagt", # Bøk
        stringr::str_detect(string = .data$norsk, pattern = "mmer av poppel") ~ "Lauv sagt",
        stringr::str_detect(string = .data$norsk, pattern = "mmer av eik") ~ "Lauv sagt",
        stringr::str_detect(string = .data$norsk, pattern = "mmer av bartr") ~ "Bar sagt",
        stringr::str_detect(string = varvals, pattern = "44012200_1988") ~ "Lauvtreflis",
        varvals %in% c("44013001_1988", "44013002_1988", "44013008_2009", "44013901_2012",  "44013902_2012", "44013909_2012",
                           "44014011_2017", "44014019_2017", "44014021_2017", "44014029_2017",
                           "44014101_2022", "44014109_2022", "44014901_2022",   "44014909_2022" ) ~ "Ind. flis avfall bark"  ,
        varvals %in% c("44013009_1988", "44013003_2009", "44013100_2012", "44013108_2017",
                       "44013101_2017", "44013903_2017", "44013908_2017", "44013201_2022", "44013209_2022", "44013904_2022", "44013907_2022") ~ "Pellets og briketter",
        varvals %in% c("44012101_1988") ~ "Celluloseflis",
        varvals %in% c("44012109_1988", "44012200_1988", "44012109_2022") ~ "Skogsflis",
        varvals %in% c("44011000_1988", "44011100_2017", "44011200_2017", "44011101_2024", "44011109_2024", "44011201_2024", "44011209_2024" ) ~ "Ved til brensel",
        stringr::str_detect(string = .data$varvals, pattern = "^44033200_") ~ "Annet div sagt",
        stringr::str_detect(string = .data$varvals, pattern = "^44034900_") ~ "Annet div sagt",
        stringr::str_detect(string = .data$varvals, pattern = "^44039908_") ~ "Annet div sagt",
        stringr::str_detect(string = .data$varvals, pattern = "^44033500_") ~ "Annet div sagt",
        varvals %in% c("44039909_1988" ) ~ "Annet div sagt",
        TRUE ~ varvals
      )) %>%
    dplyr::mutate(
      assortment = dplyr::case_when(
        .data$grovsort == "Furu mv" ~ "Pine plp",
        .data$grovsort == "Gran mv" ~ "Spruce plp",
        .data$grovsort == "Lauv mv" ~ "Broadleave plp",
        .data$grovsort == "Furu sagt" ~ "Pine sawl",
        .data$grovsort == "Gran sagt" ~ "Spruce sawl",
        .data$grovsort == "Lauv sagt" ~ "Broadleave sawl",
        .data$grovsort == "Bar sagt" ~ "Conifer sawl",
        .data$grovsort == "Ind. flis avfall bark" ~ "Industrial wood residues",
        .data$grovsort == "Celluloseflis" ~ "Pulp chips",
        .data$grovsort == "Skogsflis" ~ "Forest chips",
        .data$grovsort == "Ved til brensel" ~ "Firewood",
        TRUE ~ .data$grovsort)
      )

  #engnorsk %>% select(varvals, grovsort, norsk) %>% arrange(varvals)

  # ## For checking
  #  engnorsk %>% dplyr::select(.data$varvals, .data$norsk, .data$grovsort) %>% dplyr::filter(stringr::str_detect(.data$norsk, "mmer av gran")) %>% .[1:20,]
  #  engnorsk %>% dplyr::select(.data$varvals, .data$norsk, .data$grovsort) %>% dplyr::filter(stringr::str_detect(.data$norsk, "mmer av furu")) %>% .[1:20,]
  #  engnorsk %>% dplyr::select(.data$varvals, .data$norsk, .data$grovsort) %>% dplyr::filter(stringr::str_detect(.data$norsk, "mmer av bar")) %>% .[1:10,]
  #  engnorsk %>% dplyr::select(.data$varvals, .data$norsk, .data$grovsort) %>% dplyr::filter(stringr::str_detect(.data$norsk, "Massevirke")) %>% .[1:14,]
  #  engnorsk %>% dplyr::select(.data$varvals, .data$norsk, .data$grovsort) %>% dplyr::filter(stringr::str_detect(.data$grovsort, "mv")) %>% .[1:25,]
  #  engnorsk %>% dplyr::select(.data$varvals, .data$norsk, .data$grovsort) %>% dplyr::filter(stringr::str_detect(.data$grovsort, "44")) %>% .[1:20,]

  trevarehandel_12 <- PxWebApiData::ApiData12("http://data.ssb.no/api/v0/en/table/08801", #08801,
                                           Tid = TRUE,
                                           Land = FALSE,
                                           ContentsCode = TRUE,
                                           Varekoder = varvals)
    names(trevarehandel_12) <- make.names(names(trevarehandel_12))



    trevarehandel_12 <- trevarehandel_12 %>%
      dplyr::left_join(engnorsk, by = c("Varekoder" = "varvals")) %>%
      dplyr::mutate(
        statvar = dplyr::case_when(stringr::str_detect(contents, " \\(Q1\\)") ~ "kg",
                            stringr::str_detect(contents, " \\(Q2\\)") ~ "m3",
                            stringr::str_detect(contents, " \\(NOK\\)") ~ "NOK",
                            TRUE ~ contents)
      ) %>% dplyr::select( "Tid", "Varekoder", "ImpEks", "imports.exports", "value", "statvar", "eng", "norsk", "grovsort", "assortment")


    unique(trevarehandel_12$statvar)
    trevarehandel_kr <- trevarehandel_12 %>% dplyr::filter(.data$statvar == "NOK") %>% dplyr::rename(kr = .data$value) %>% dplyr::select(-.data$statvar) # head(trevarehandel_kr)
    trevarehandel_m3 <- trevarehandel_12 %>% dplyr::filter(.data$statvar == "m3") %>% dplyr::rename(m3 = .data$value) %>% dplyr::select(-.data$statvar) # head(trevarehandel_m3)
    trevarehandel_kg <- trevarehandel_12 %>% dplyr::filter(.data$statvar == "kg") %>% dplyr::rename(kg = .data$value) %>% dplyr::select(-.data$statvar,) # head(trevarehandel_kg)

    trevarehandel_2 <- trevarehandel_kr %>% dplyr::full_join(trevarehandel_m3) %>% dplyr::full_join(trevarehandel_kg)

    return(trevarehandel_2)

}



#' Plot roundwood export volume and prices
#'
#' @return a list of four plots
#' @export
#'
#' @examples
#' pts <- plot_rw_export()
#' pts[[1]]
plot_rw_export <- function(){
  # table(plotdat$)
  sumvars <- c("kr", "m3", "kg")
  plotdat <- vsop::t08801tre() %>% dplyr::select(-"Varekoder") %>%
    dplyr::filter(.data$imports.exports == "Exports", !(stringr::str_detect(.data$grovsort, "440"))) %>%
    dplyr::mutate(year = as.numeric(.data$Tid))
  #head(plotdat)
  # table(plotdat$grovsort, plotdat$assortment)
  plotdat2 <- plotdat %>%
    dplyr::filter(stringr::str_detect(.data$assortment, "sawl|plp")) %>%
    dplyr::mutate(
      assortment = dplyr::case_when(
        .data$assortment == "Pine sawl" ~ "Conifer sawl",
        .data$assortment == "Spruce sawl" ~ "Conifer sawl",
        TRUE ~ .data$assortment),
      grovsort = dplyr::case_when(
        .data$grovsort == "Furu sagt" ~ "Bar sagt",
        .data$grovsort == "Gran sagt" ~ "Bar sagt",
        TRUE ~ .data$grovsort
      ),
      treslagskategori = dplyr::case_when(
        stringr::str_detect(.data$grovsort, "Bar|Gran|Furu") ~ "Bar",
        stringr::str_detect(.data$grovsort, "Lauv|Bjork") ~ "Lauv",
        TRUE ~ .data$grovsort
      ),
      speciescategory = dplyr::case_when(
        stringr::str_detect(.data$grovsort, "Bar|Gran|Furu") ~ "Conifers",
        stringr::str_detect(.data$grovsort, "Lauv|Bjork") ~ "Broadleaves",
        TRUE ~ .data$grovsort
      ),
      produktkategori = dplyr::case_when(
        stringr::str_detect(.data$grovsort, "mv") ~ "Massev",
        stringr::str_detect(.data$grovsort, "sagt") ~ "Sagt",
        TRUE ~ .data$grovsort
      ),
      productcategory = dplyr::case_when(
        stringr::str_detect(.data$grovsort, "mv") ~ "Pulpw",
        stringr::str_detect(.data$grovsort, "sagt") ~ "Sawlogs",
        TRUE ~ .data$grovsort
      ),
      grp = paste0(.data$productcategory, " ", .data$speciescategory)) %>%
    dplyr::group_by(.data$Tid, .data$produktkategori,.data$productcategory, .data$treslagskategori,.data$speciescategory, .data$grp) %>%
    dplyr::summarise(dplyr::across( dplyr::all_of(sumvars), sum)) %>%
    dplyr::mutate(year = as.numeric(.data$Tid),
                  pris_kr_m3 = .data$kr / .data$m3) %>%
    # dplyr::filter(.data$pris_kr_m3 < 1500, .data$m3 > 5000) %>%
    dplyr::group_by(.data$produktkategori, .data$treslagskategori, .data$grp) %>%
    dplyr::mutate(ndat = length(unique(.data$Tid)) ) %>%
    dplyr::ungroup() %>%
    dplyr::filter(.data$ndat > 15)

  #summary(plotdat2$pris_kr_m3)
  plotdat2 <- plotdat2 %>% dplyr::filter( .data$m3 > 20000)

  #plotdat2 %>% dplyr::filter(.data$pris_kr_m3 > 800)
  #plotdat2 %>% dplyr::filter(.data$pris_kr_m3 < 250)
  # head(plotdat2 %>% arrange(ndat))
  # plotdat2 %>% group_by(Tid, grp) %>% summarise(n = n()) %>% arrange(desc(n)) %>% head() # bare en obs pr gruppe og år!

  p_eksp_m3_en <-  ggplot2::ggplot(plotdat2,
    ggplot2::aes( x = .data$year, y = .data$m3/1000)) +
    ggplot2::geom_line(ggplot2::aes(group = .data$grp, color = .data$productcategory)) +
    ggplot2::geom_point(ggplot2::aes(shape = .data$speciescategory, color = .data$productcategory)) +
    ggpubr::theme_pubr()   +
    cowplot::background_grid() +
    ggplot2::guides(color = ggplot2::guide_legend(nrow = 2), shape = ggplot2::guide_legend(nrow = 2))+
    ggplot2::labs(x = "Year", y = expression("1000 "~ m^3), color = "Product", shape = "Species")
  # p_eksp_m3_en

  p_eksp_m3_no <-  ggplot2::ggplot(plotdat2 ,
                                   ggplot2::aes( x = .data$year, y = .data$m3/1000)) +
    ggplot2::geom_line(ggplot2::aes(group = .data$grp, color = .data$produktkategori)) +
    ggplot2::geom_point(ggplot2::aes(shape = .data$treslagskategori, color = .data$produktkategori)) +
    ggpubr::theme_pubr()   +
    cowplot::background_grid() +
    ggplot2::guides(color = ggplot2::guide_legend(nrow = 2), shape = ggplot2::guide_legend(nrow = 2))+
    ggplot2::labs(x = "Aar", y = expression("1000 "~ m^3), color = "Produkt", shape = "Treslag")
  #p_eksp_m3_no

  p_eksp_pris_en <-
    ggplot2::ggplot(plotdat2, # %>% dplyr::filter(.data$pris_kr_m3 < 1500),
                    ggplot2::aes( x = .data$year, y = .data$pris_kr_m3)) +
    ggplot2::geom_line(ggplot2::aes(group = .data$grp, color = .data$productcategory)) +
    ggplot2::guides(color = ggplot2::guide_legend(nrow = 2), shape = ggplot2::guide_legend(nrow = 2))+
    ggplot2::geom_point(ggplot2::aes(shape = .data$speciescategory, color = .data$productcategory)) +
    ggpubr::theme_pubr()   +
    cowplot::background_grid() +
    ggplot2::labs(x = "Year", y = expression("Price, NOK " ~ m^3^-1), color = "Product", shape = "Species")
   # p_eksp_pris_en

  p_eksp_pris_no <-
    ggplot2::ggplot(plotdat2, # %>% dplyr::filter(.data$pris_kr_m3 < 1500),
                    ggplot2::aes( x = .data$year, y = .data$pris_kr_m3)) +
    ggplot2::geom_line(ggplot2::aes(group = .data$grp, color = .data$produktkategori)) +
    ggplot2::geom_point(ggplot2::aes(shape = .data$treslagskategori, color = .data$produktkategori)) +
    ggpubr::theme_pubr()   +
    cowplot::background_grid() +
    ggplot2::guides(color = ggplot2::guide_legend(nrow = 2), shape = ggplot2::guide_legend(nrow = 2))+

    ggplot2::labs(x = "År", y = expression("Pris, kr per " ~ m^3), color = "Produkt", shape = "Treslag")
  # p_eksp_pris_no

retlist <- list(p_eksp_m3_en = p_eksp_m3_en,
                p_eksp_m3_no = p_eksp_m3_no,
                p_eksp_pris_en = p_eksp_pris_en,
                p_eksp_pris_no = p_eksp_pris_no,

                plotdat = plotdat2)
return(retlist)

}
hbelbo/vsop documentation built on June 13, 2025, 5:10 a.m.