---
title: "A quick start guide to rKolada"
output: rmarkdown::html_vignette
vignette: >
  %\VignetteIndexEntry{A quick start guide to rKolada}
  %\VignetteEngine{knitr::rmarkdown}
  %\VignetteEncoding{UTF-8}
---

```{r, include = FALSE}
knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>"
)
```

This vignette provides a quick start guide to get up and running with rKolada as fast as possible. For a more comprehensive introduction to the rKolada package, see [Introduction to rKolada](introduction-to-rkolada.html).

```{r setup}
library("rKolada")
```

In this guide we walk you through five steps to download, inspect and search through Kolada metadata. We then use our search results to download data from Kolada and plot it.

### 1. Get metadata

Kolada contains five different types of metadata entities: 

1. `kpi`: Key Performance Indicators
1. `municipality`: Municipalities
1. `ou`: Operating Unit, a subunit of municipalities
1. `kpi_groups`: Thematic groupings of KPIs
1. `municipality_groups`: Thematic groupings of municipalities

To obtain data using `rKolada` it is usually a good idea to start by exploring metadata. `rKolada` comes with convenience functions for each of the five above mentioned entities. These functions are all names `get_[entity]()` and can be called as follows. The `cache` parameter allows you to temporarily store results on disk to avoid repeated calls to the API in case you need to re-run your code:

```{r, echo = FALSE}
kpis <- rKolada:::kpi_df
munic <- rKolada:::munic
```


```{r, eval = FALSE}
kpis <- get_kpi(cache = FALSE)
munic <- get_municipality(cache = FALSE)
```

If you have already familiarised yourself with the Kolada API (e.g. by reading the [official docs on GitHub](https://github.com/Hypergene/kolada)) you can access the full metadata API using `get_metadata()`.

### 2. Search metadata

Metadata tables are stored as regular `tibble`s so you can start inspecting them by simply viewing them in RStudio. For example, the KPI metadata we downloaded looks like this:

```{r}
dplyr::glimpse(kpis)
```

But `rKolada` also comes with a set of convenience functions to simplify the task of exploring KPI metadata. `kpi_search()` filters down a list of KPIs using a search term, and `kpi_minimize()` can be used to clean the KPI metadata table from columns that don't contain any information that distinguish KPIs from each other:

```{r}
# Get a list KPIs matching a search for "BRP" (Gross regional product)
kpi_res <- kpis %>%
  kpi_search("BRP") %>%
  # Keep only KPIs with data for the municipality level
  kpi_search("K", column = "municipality_type") %>%
  kpi_minimize(remove_undocumented_columns = TRUE, remove_monotonous_data = TRUE)

dplyr::glimpse(kpi_res)
```

Let's say we are interested in retrieving data for four Swedish municipalities. We thus want to create a table containing metadata about these four municipalities:

```{r}
munic_res <- munic %>% 
  # Only keep municipalities (drop regions)
  municipality_search("K", column = "type") %>% 
  # Only keep Stockholm, Gothenburg and Malmö
  municipality_search(c("Stockholm", "Göteborg", "Malmö"))

dplyr::glimpse(munic_res)
```



### 3. Describe KPIs

In addition to the information provided about every KPI in the `title` and `description` columns of a KPI table, `kpi_bind_keywords()` can be used to create a rough summary of every KPI creating a number of _keyword_ columns. The function `kpi_describe()` can be used to print a huamn readable table containing a summary of a table of KPIs. For instance, by setting the `knitr` chunk option `results='asis'`, the following code renders a Markdown section that is automatically inluded as a part of the HTML that renders this web page:

```{r, echo = TRUE, results='asis'}
kpi_res %>%
  kpi_bind_keywords(n = 4) %>% 
  kpi_describe(max_n = 1, format = "md", heading_level = 4, sub_heading_level = 5)
```

### 4. Get data

Once we have settled on what KPIs we are interested in the next step is to download actual data from Kolada. Use `get_values()` to do this. To download data from the Kolada API you need to provide at least two of the following parameters:

1. `kpi`: One or a vector of several KPI IDs
1. `municipality`: One or a vector of several municipality IDs or municipality group IDs
1. `period`: The years for which data should be downloaded.

The ID tags for KPIs and municipalities can be extracted using the convenience functions `kpi_extract_ids()` and `municipality_extract_ids()`:

```{r, echo = FALSE}
kld_data <- rKolada:::kld_data
```


```{r, eval = FALSE}
kld_data <- get_values(
  kpi = kpi_extract_ids(kpi_res),
  municipality = municipality_extract_ids(munic_res),
  period = 1990:2019,
  simplify = TRUE
)
```

Setting the `simplify` parameter to `TRUE`, again, makes results more human readable, by removing undocumented columns and relabeling data with human-friendly labels.


### 5. Inspect and visualise results

Finally, time to inspect our data:

```{r}
# Visualise results
library("ggplot2")

ggplot(kld_data, aes(x = year, y = value)) +
  geom_line(aes(color = municipality)) +
  facet_grid(kpi ~ .) +
  scale_y_continuous(labels = scales::comma) +
  labs(
    title = "Gross Regional Product",
    subtitle = "Yearly development in Sweden's three\nmost populous municipalities",
    x = "Year",
    y = "",
    caption = values_legend(kld_data, kpis)
  )
```



