We demonstrate how to import data from the CensusMapper API. The code for this notbook can be found on GitHub.

To work with the CensusMapper API we need to specify our API key. We load the API key in the environment variable “CM_API_KEY”, which we assume was set prior to running the script. We could also specify it directly in the code, but than we have to be careful not to expose our API key when sharing our code.

library(cancensus)
# set environment variable via 
# Sys.setenv(CM_API_KEY='<your API key>')
# or
# cancensus.set_api_key('<your API key>')

To tie into the CensusMapper API we utilize the “censusmapper” library. As an example we choose the “occupied dwellings by structural type of dwelling” data from 2016, CT level, for the Vancouver CMA. The CensusMapper convenience function expects the year (2016), aggregation level (CT), geographies (CMA 59993), and CensusMapper internal variable names as input. We also need to speficy the CensusMapper API key for access. Lastly we may specify the “geo” flag, if it is set to TRUE we will also load the spatial data.

#set the data vectors we are interested in
vectors=c("v_CA16_408","v_CA16_409","v_CA16_410","v_CA16_412","v_CA16_413","v_CA16_414","v_CA16_415","v_CA16_416","v_CA16_417")
#set the regions we are intereseted in
regions_string='{"CMA":["59933"]}'
#load the data
census_data <- cancensus.load(dataset='CA16',level='CT',regions=regions_string,vectors=vectors)

Downloading: 3.2 kB     
Downloading: 3.2 kB     
Downloading: 7.3 kB     
Downloading: 7.3 kB     
Downloading: 11 kB     
Downloading: 11 kB     
Downloading: 13 kB     
Downloading: 13 kB     
Downloading: 13 kB     
Downloading: 13 kB     
Downloading: 13 kB     
Downloading: 13 kB     

Mapping

We compute a the percentage of single detached dwellings out of all occupied dwelling units and map it.

census_data$sd <- census_data$`v_CA16_409: Single-detached house` / census_data$`v_CA16_408: Occupied private dwellings by structural type of dwelling data`
library(tmap)
tm_shape(census_data) +
  tm_polygons("sd", style="quantile", title="Single Detached Homes")

Or using the ggplot library.

# requires dev build of tiverse/ggplot2, install using devtools and install_github('tidyverse/ggplot2') if needed
library(sf)
library(tidyverse)
library(viridis)
library(rvest)
ggplot(census_data) +
  geom_sf(aes(fill = sd)) +
  scale_fill_viridis("%SD") +
  ggtitle("Proportion of Dwelling Units that are Single Detached") +
  theme_bw()

Or we can explore the data through non-map based means, for example how the proportion of single detached and duplex dwelling relate. Duplex dwellings are in most cases suited single family homes. We can explore how the relationship between single family homes and duplexes depend on the municipal regulations allowing for secondary suites.

census_data$duplex <- census_data$`v_CA16_414: Apartment or flat in a duplex`/ census_data$`v_CA16_408: Occupied private dwellings by structural type of dwelling data`
census_data$color_code <- ifelse(census_data$`Region Name` == "Vancouver", 'red', ifelse(census_data$`Region Name` == "Burnaby", 'blue', ifelse(census_data$`Region Name` == "Surrey", 'green', 'grey')))
plot(census_data$sd, census_data$duplex, xlab="Single Detached", ylab="Duplex", col=census_data$color_code)

LS0tCnRpdGxlOiAiQ2Vuc3VzTWFwcGVyIERlbW8iCmF1dGhvcjogIkplbnMgdm9uIEJlcmdtYW5uIgpkYXRlOiAiMjAxNy0wNy0zMSIKb3V0cHV0OiBodG1sX25vdGVib29rCiNvdXRwdXQ6IHJtYXJrZG93bjo6aHRtbF92aWduZXR0ZQp2aWduZXR0ZTogPgogICVcVmlnbmV0dGVJbmRleEVudHJ5e1ZpZ25ldHRlIFRpdGxlfQogICVcVmlnbmV0dGVFbmdpbmV7a25pdHI6OnJtYXJrZG93bn0KICAlXFZpZ25ldHRlRW5jb2Rpbmd7VVRGLTh9Ci0tLQoKV2UgZGVtb25zdHJhdGUgaG93IHRvIGltcG9ydCBkYXRhIGZyb20gdGhlIFtDZW5zdXNNYXBwZXJdKGh0dHBzOi8vQ2Vuc3VzTWFwcGVyLmNhKSBBUEkuIFRoZSBjb2RlIGZvciB0aGlzIG5vdGJvb2sgY2FuIGJlIGZvdW5kIG9uIFtHaXRIdWJdKGh0dHBzOi8vZ2l0aHViLmNvbS9tb3VudGFpbk1hdGgvY2FuY2Vuc3VzKS4KClRvIHdvcmsgd2l0aCB0aGUgQ2Vuc3VzTWFwcGVyIEFQSSB3ZSBuZWVkIHRvIHNwZWNpZnkgb3VyIEFQSSBrZXkuIFdlIGxvYWQgdGhlIEFQSSBrZXkgaW4gdGhlIGVudmlyb25tZW50IHZhcmlhYmxlICJDTV9BUElfS0VZIiwgd2hpY2ggd2UgYXNzdW1lIHdhcyBzZXQgcHJpb3IgdG8gcnVubmluZyB0aGUgc2NyaXB0LiBXZSBjb3VsZCBhbHNvIHNwZWNpZnkgaXQgZGlyZWN0bHkgaW4gdGhlIGNvZGUsIGJ1dCB0aGFuIHdlIGhhdmUgdG8gYmUgY2FyZWZ1bCBub3QgdG8gZXhwb3NlIG91ciBBUEkga2V5IHdoZW4gc2hhcmluZyBvdXIgY29kZS4KCmBgYHtyIEFQSSBLZXksIGVjaG89VFJVRX0KbGlicmFyeShjYW5jZW5zdXMpCiMgc2V0IGVudmlyb25tZW50IHZhcmlhYmxlIHZpYSAKIyBTeXMuc2V0ZW52KENNX0FQSV9LRVk9Jzx5b3VyIEFQSSBrZXk+JykKIyBvcgojIGNhbmNlbnN1cy5zZXRfYXBpX2tleSgnPHlvdXIgQVBJIGtleT4nKQpgYGAKClRvIHRpZSBpbnRvIHRoZSBDZW5zdXNNYXBwZXIgQVBJIHdlIHV0aWxpemUgdGhlICJjZW5zdXNtYXBwZXIiIGxpYnJhcnkuIEFzIGFuIGV4YW1wbGUgd2UgY2hvb3NlIHRoZSAib2NjdXBpZWQgZHdlbGxpbmdzIGJ5IHN0cnVjdHVyYWwgdHlwZSBvZiBkd2VsbGluZyIgZGF0YSBmcm9tIDIwMTYsIENUIGxldmVsLCBmb3IgdGhlIFZhbmNvdXZlciBDTUEuIFRoZSBDZW5zdXNNYXBwZXIgY29udmVuaWVuY2UgZnVuY3Rpb24gZXhwZWN0cyB0aGUgeWVhciAoMjAxNiksIGFnZ3JlZ2F0aW9uIGxldmVsIChDVCksIGdlb2dyYXBoaWVzIChDTUEgNTk5OTMpLCBhbmQgQ2Vuc3VzTWFwcGVyIGludGVybmFsIHZhcmlhYmxlIG5hbWVzIGFzIGlucHV0LiBXZSBhbHNvIG5lZWQgdG8gc3BlZmljeSB0aGUgQ2Vuc3VzTWFwcGVyIEFQSSBrZXkgZm9yIGFjY2Vzcy4gTGFzdGx5IHdlIG1heSBzcGVjaWZ5IHRoZSAiZ2VvIiBmbGFnLCBpZiBpdCBpcyBzZXQgdG8gVFJVRSB3ZSB3aWxsIGFsc28gbG9hZCB0aGUgc3BhdGlhbCBkYXRhLgoKYGBge3IsIGVjaG89VFJVRSwgbWVzc2FnZT1UUlVFLCB3YXJuaW5nPVRSVUV9CiNzZXQgdGhlIGRhdGEgdmVjdG9ycyB3ZSBhcmUgaW50ZXJlc3RlZCBpbgp2ZWN0b3JzPWMoInZfQ0ExNl80MDgiLCJ2X0NBMTZfNDA5Iiwidl9DQTE2XzQxMCIsInZfQ0ExNl80MTIiLCJ2X0NBMTZfNDEzIiwidl9DQTE2XzQxNCIsInZfQ0ExNl80MTUiLCJ2X0NBMTZfNDE2Iiwidl9DQTE2XzQxNyIpCiNzZXQgdGhlIHJlZ2lvbnMgd2UgYXJlIGludGVyZXNldGVkIGluCnJlZ2lvbnNfc3RyaW5nPSd7IkNNQSI6WyI1OTkzMyJdfScKI2xvYWQgdGhlIGRhdGEKY2Vuc3VzX2RhdGEgPC0gY2FuY2Vuc3VzLmxvYWQoZGF0YXNldD0nQ0ExNicsbGV2ZWw9J0NUJyxyZWdpb25zPXJlZ2lvbnNfc3RyaW5nLHZlY3RvcnM9dmVjdG9ycykKYGBgCgojIyBNYXBwaW5nCgpXZSBjb21wdXRlIGEgdGhlIHBlcmNlbnRhZ2Ugb2Ygc2luZ2xlIGRldGFjaGVkIGR3ZWxsaW5ncyBvdXQgb2YgYWxsIG9jY3VwaWVkIGR3ZWxsaW5nIHVuaXRzIGFuZCBtYXAgaXQuCgpgYGB7ciwgZWNobz1UUlVFfQpjZW5zdXNfZGF0YSRzZCA8LSBjZW5zdXNfZGF0YSRgdl9DQTE2XzQwOTogU2luZ2xlLWRldGFjaGVkIGhvdXNlYCAvIGNlbnN1c19kYXRhJGB2X0NBMTZfNDA4OiBPY2N1cGllZCBwcml2YXRlIGR3ZWxsaW5ncyBieSBzdHJ1Y3R1cmFsIHR5cGUgb2YgZHdlbGxpbmcgZGF0YWAKCmxpYnJhcnkodG1hcCkKdG1fc2hhcGUoY2Vuc3VzX2RhdGEpICsKICB0bV9wb2x5Z29ucygic2QiLCBzdHlsZT0icXVhbnRpbGUiLCB0aXRsZT0iU2luZ2xlIERldGFjaGVkIEhvbWVzIikKYGBgCgpPciB1c2luZyB0aGUgZ2dwbG90IGxpYnJhcnkuCgpgYGB7ciwgZWNobz1UUlVFfQoKIyByZXF1aXJlcyBkZXYgYnVpbGQgb2YgdGl2ZXJzZS9nZ3Bsb3QyLCBpbnN0YWxsIHVzaW5nIGRldnRvb2xzIGFuZCBpbnN0YWxsX2dpdGh1YigndGlkeXZlcnNlL2dncGxvdDInKSBpZiBuZWVkZWQKbGlicmFyeShzZikKbGlicmFyeSh0aWR5dmVyc2UpCmxpYnJhcnkodmlyaWRpcykKbGlicmFyeShydmVzdCkKCgpnZ3Bsb3QoY2Vuc3VzX2RhdGEpICsKICBnZW9tX3NmKGFlcyhmaWxsID0gc2QpKSArCiAgc2NhbGVfZmlsbF92aXJpZGlzKCIlU0QiKSArCiAgZ2d0aXRsZSgiUHJvcG9ydGlvbiBvZiBEd2VsbGluZyBVbml0cyB0aGF0IGFyZSBTaW5nbGUgRGV0YWNoZWQiKSArCiAgdGhlbWVfYncoKQpgYGAKCgpPciB3ZSBjYW4gZXhwbG9yZSB0aGUgZGF0YSB0aHJvdWdoIG5vbi1tYXAgYmFzZWQgbWVhbnMsIGZvciBleGFtcGxlIGhvdyB0aGUgcHJvcG9ydGlvbiBvZiBzaW5nbGUgZGV0YWNoZWQgYW5kIGR1cGxleCBkd2VsbGluZyByZWxhdGUuIER1cGxleCBkd2VsbGluZ3MgYXJlIGluIG1vc3QgY2FzZXMgc3VpdGVkIHNpbmdsZSBmYW1pbHkgaG9tZXMuIFdlIGNhbiBleHBsb3JlIGhvdyB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gc2luZ2xlIGZhbWlseSBob21lcyBhbmQgZHVwbGV4ZXMgZGVwZW5kIG9uIHRoZSBtdW5pY2lwYWwgcmVndWxhdGlvbnMgYWxsb3dpbmcgZm9yIHNlY29uZGFyeSBzdWl0ZXMuCgpgYGB7cn0KY2Vuc3VzX2RhdGEkZHVwbGV4IDwtIGNlbnN1c19kYXRhJGB2X0NBMTZfNDE0OiBBcGFydG1lbnQgb3IgZmxhdCBpbiBhIGR1cGxleGAvIGNlbnN1c19kYXRhJGB2X0NBMTZfNDA4OiBPY2N1cGllZCBwcml2YXRlIGR3ZWxsaW5ncyBieSBzdHJ1Y3R1cmFsIHR5cGUgb2YgZHdlbGxpbmcgZGF0YWAKCmNlbnN1c19kYXRhJGNvbG9yX2NvZGUgPC0gaWZlbHNlKGNlbnN1c19kYXRhJGBSZWdpb24gTmFtZWAgPT0gIlZhbmNvdXZlciIsICdyZWQnLCBpZmVsc2UoY2Vuc3VzX2RhdGEkYFJlZ2lvbiBOYW1lYCA9PSAiQnVybmFieSIsICdibHVlJywgaWZlbHNlKGNlbnN1c19kYXRhJGBSZWdpb24gTmFtZWAgPT0gIlN1cnJleSIsICdncmVlbicsICdncmV5JykpKQoKcGxvdChjZW5zdXNfZGF0YSRzZCwgY2Vuc3VzX2RhdGEkZHVwbGV4LCB4bGFiPSJTaW5nbGUgRGV0YWNoZWQiLCB5bGFiPSJEdXBsZXgiLCBjb2w9Y2Vuc3VzX2RhdGEkY29sb3JfY29kZSkKYGBgCgo=