--- title: "Getting started with statcanR" author: "Thierry Warin" output: rmarkdown::html_vignette vignette: > %\VignetteIndexEntry{Getting started with statcanR} %\VignetteEngine{knitr::rmarkdown} %\VignetteEncoding{UTF-8} --- ```{r, include = FALSE} knitr::opts_chunk$set( collapse = TRUE, comment = "#>", eval = FALSE ) ``` ## Overview `statcanR` connects R to [Statistics Canada's Web Data Service (WDS)](https://www.statcan.gc.ca/en/developers/wds). This vignette walks through a complete workflow: describing the data you need, choosing a table, understanding its identifier, downloading it, inspecting the result, and optionally saving a CSV copy. The package supports four common tasks: 1. Find likely tables from an ordinary-language description. 2. Search for exact keywords in the official table catalogue. 3. Download a complete table in English or French into R. 4. Save the downloaded table as a CSV file. The four public functions have distinct purposes: | Function | Use it when... | Result | |---|---|---| | `statcan_find()` | You can describe the subject, geography, or period you need | A ranked data frame of likely tables and reasons for each match | | `statcan_search()` | You know words that occur in the official table title | An interactive table of exact keyword matches | | `statcan_data()` | You want the complete table in R | A data frame | | `statcan_download_data()` | You want the data frame and a CSV copy | A data frame with the saved file path attached | The download functions retrieve a **complete table**, not a filtered selection of observations. A Statistics Canada table can be large. It is therefore useful to identify the right table before starting the download. ## Two concepts to know first ### Table number and Product ID Statistics Canada displays table numbers such as `10-10-0001-01`. The first eight digits form the WDS Product ID (PID), `10100001`; the final `01` identifies the displayed view. `statcanR` accepts either the displayed table number or the eight-digit PID: ```{r id-equivalence} table_data <- statcan_data("10-10-0001-01", "eng") table_data <- statcan_data("10100001", "eng") ``` These two calls request the same table. ### Language Use `lang = "eng"` for an English table and `lang = "fra"` for a French table. The language controls the table contents and labels returned by Statistics Canada; it is not a translation performed by `statcanR`. ## Install or upgrade The command used for a first installation also upgrades an older CRAN installation: ```{r install} install.packages("statcanR") ``` Then load the package: ```{r setup} library(statcanR) ``` If the package was loaded while you upgraded it, restart the R session before calling `library(statcanR)` again. Check which version R will use with: ```{r version} packageVersion("statcanR") ``` Version 0.3.0 preserves the familiar calls from earlier releases. In particular, code that supplies a table number and a language to `statcan_data()` or `statcan_download_data()` continues to work. ## Step 1: describe the table you need Use `statcan_find()` when you know what data you want but do not know the official title or table number. Write a short request containing as much of the subject, Canadian geography, and period as you know: ```{r find-eng} matches <- statcan_find( "R&D expenditures in Quebec since 2020", lang = "eng", n = 5 ) matches[, c("title", "id", "score", "match_reason")] ``` This request is interpreted as: - a **subject**: research and development expenditures; - a **geography**: Quebec; and - a **date requirement**: the table must include 2020. The result is an ordinary data frame. `rank` orders the candidates, `score` summarizes the strength of each match, and `match_reason` states which clues were confirmed. The score helps with discovery; it is not a measure of data quality. Read the candidate titles because two tables can represent different valid interpretations of the same short request. When a province or territory appears in the query, `statcan_find()` checks WDS metadata to confirm that the table includes it. `start_date` and `end_date` describe the coverage of the **whole table**. These checks help choose a table; they do not select rows. The download functions still retrieve the complete table, after which you filter its geography and reference-period columns. French requests and French catalogue titles are supported too: ```{r find-fra} matches_fr <- statcan_find( "Dépenses de R-D au Québec depuis 2020", lang = "fra" ) ``` The parser recognizes common wording and abbreviations, but it is deliberately simple and predictable. A concise request generally works better than a long question. If the results are too broad, add a more specific subject term. If there are no results, remove a detail or try an official keyword. ### Search exact title keywords Use `statcan_search()` when you know words that occur in the official title. It searches titles without regard to letter case: ```{r search-eng} statcan_search( c("federal", "expenditures", "objectives"), lang = "eng" ) ``` The result is an interactive table displayed in the RStudio Viewer or a browser. The most important columns are: - `title`: the official table title; - `id`: the table number to pass to a download function; - `release_date`: the catalogue release date; and - `lang`: the language searched. When several keywords are supplied, **all** of them must occur in the title. This makes searches precise, but it can also produce no matches. If that happens, remove one keyword or use a broader term: ```{r search-broad} statcan_search("expenditures", lang = "eng") ``` Search French titles by using `lang = "fra"`: ```{r search-fra} statcan_search(c("dépenses", "fédérales"), lang = "fra") ``` The catalogue is cached for 24 hours in R's platform-appropriate user cache directory. `statcan_find()` caches the table metadata used for geography checks for seven days. These caches make repeated searches faster and avoid unnecessary requests to Statistics Canada. Set `refresh = TRUE` only when you specifically need fresh information: ```{r search-refresh} statcan_find( "population in Alberta since 2021", lang = "eng", refresh = TRUE ) ``` If WDS is temporarily unavailable, catalogue searches use the most recent valid cache and issue a warning. If geography metadata cannot be refreshed, `statcan_find()` uses valid cached metadata where possible. Candidates whose geography could not be checked have `geography_match = NA`; the match explanation makes that uncertainty explicit. ## Step 2: download a complete table After choosing an identifier, pass it and the desired language to `statcan_data()`. This example uses a relatively small table that is convenient for learning: ```{r data-eng} table_data <- statcan_data("10-10-0001-01", lang = "eng") ``` The function downloads and unpacks the current full-table CSV archive, then returns a data frame. Start by examining its dimensions, names, and first observations: ```{r inspect} dim(table_data) names(table_data) head(table_data) ``` The exact columns depend on the table selected. `statcanR` applies a few consistent rules: - the first column is named `REF_DATE`; - annual, monthly, daily, and fiscal reference periods are converted to `Date` values when they can be interpreted safely; - coordinate columns remain character values so leading zeros and compound coordinates are not lost; and - `INDICATOR` contains the official table title read from its metadata. For example, you can select observations from 2020 onward with ordinary R subsetting: ```{r subset} recent_data <- table_data[ !is.na(table_data$REF_DATE) & table_data$REF_DATE >= as.Date("2020-01-01"), ] ``` To download the French version of the table, change the language: ```{r data-fra} table_fr <- statcan_data("10-10-0001-01", lang = "fra") ``` Most source column names remain in the selected language, so do not assume that every English column name has an identical French equivalent. ## Step 3: save a CSV copy when needed If you only need to analyse the data in the current R session, `statcan_data()` is sufficient. Use `statcan_download_data()` when you also need a CSV file. Existing two-argument calls save the file in the current working directory: ```{r save-default} table_data <- statcan_download_data("10-10-0001-01", "eng") getwd() ``` This creates `statcan_10100001_eng.csv`. To keep project files organized, create a dedicated directory and pass it through `path`: ```{r save-path} output_dir <- file.path(tempdir(), "statcanR-data") dir.create(output_dir, recursive = TRUE, showWarnings = FALSE) table_data <- statcan_download_data( "10-10-0001-01", "eng", path = output_dir ) attr(table_data, "statcan_file") ``` The output directory must already exist. The function returns the same data frame as `statcan_data()` and stores the exact CSV path in its `statcan_file` attribute. The CSV uses UTF-8 encoding, excludes R row names, and writes missing values as empty fields. ## Compatibility with earlier statcanR scripts The update does not require you to rewrite established calls: ```{r compatibility} # This familiar two-argument form remains valid. table_data <- statcan_data("10-10-0001-01", "eng") # This also remains valid and saves into the working directory. table_data <- statcan_download_data("10-10-0001-01", "eng") ``` The optional `path` argument extends `statcan_download_data()` without changing the meaning of the original arguments. Both hyphenated table numbers and eight-digit PIDs are accepted. ## Troubleshooting The package validates inputs before downloading and reports network or service problems explicitly. Common issues include: | Message or symptom | What to check | |---|---| | No natural-language results | Keep a clear subject, but remove a geography or date constraint; then inspect broader candidates | | No exact keyword results | Try fewer keywords, check the selected language, or use a broader official term | | Invalid `tableNumber` | Use a displayed number such as `10-10-0001-01` or an eight-digit PID such as `10100001` | | Invalid `lang` | Use exactly `"eng"` or `"fra"` | | Output directory does not exist | Create the directory before supplying it through `path` | | WDS is unavailable | Check the internet connection and try again later; catalogue search may use a valid cache | | Download takes a long time | The function retrieves the complete table, which may be large | Network failures, invalid tables, unexpected API responses, and malformed archives stop with messages that identify the affected Product ID. Temporary files created by a call are removed when it finishes; other files in the R session's temporary directory are left untouched. ## Reproducible use WDS provides the current version of a Statistics Canada table, and published observations may be revised. For work that must be reproduced later: 1. record the table identifier, language, package version, and retrieval date; 2. save a local CSV copy of the data used in the analysis; and 3. cite the table and Statistics Canada according to the applicable data licence. ## Data licence and citation Review the [Statistics Canada Open Licence](https://www.statcan.gc.ca/en/terms-conditions/open-licence) before redistributing downloaded data. To obtain the package's current citation, run: ```{r citation} citation("statcanR") ```