Type: Package
Title: Convenient Access to Chicago Open Data API Endpoints
Version: 0.1.0
Description: Provides simple, reproducible access to datasets from the Chicago Open Data portal https://data.cityofchicago.org/. Functions return results as tidy tibbles and support optional filtering, sorting, and row limits via the Socrata API.
License: MIT + file LICENSE
Encoding: UTF-8
RoxygenNote: 7.3.3
Imports: dplyr, tibble, jsonlite, httr, janitor, rlang
Suggests: curl, knitr, ggplot2
URL: https://martinezc1.github.io/chiOpenData/, https://github.com/martinezc1/chiOpenData
BugReports: https://github.com/martinezc1/chiOpenData/issues
VignetteBuilder: knitr
Config/testthat/edition: 3
Depends: R (≥ 4.1.0)
NeedsCompilation: no
Packaged: 2026-04-09 17:56:05 UTC; christianmartinez
Author: Christian Martinez ORCID iD [aut, cre] (GitHub: martinezc1)
Maintainer: Christian Martinez <c.martinez0@outlook.com>
Repository: CRAN
Date/Publication: 2026-04-16 09:22:11 UTC

chiOpenData: Convenient Access to Chicago Open Data API Endpoints

Description

Provides simple, reproducible access to datasets from the Chicago Open Data portal https://data.cityofchicago.org/. Functions return results as tidy tibbles and support optional filtering, sorting, and row limits via the Socrata API.

Author(s)

Maintainer: Christian Martinez c.martinez0@outlook.com (ORCID) (martinezc1)

See Also

Useful links:


Load Any CHI Open Data Dataset

Description

Downloads any CHI Open Data dataset given its Socrata JSON endpoint.

Usage

chi_any_dataset(
  json_link,
  limit = 10000,
  timeout_sec = 30,
  clean_names = TRUE,
  coerce_types = TRUE
)

Arguments

json_link

A Socrata dataset JSON endpoint URL (e.g., "https://data.cityofchicago.org/resource/fuz6-n5nj.json").

limit

Number of rows to retrieve (default = 10,000).

timeout_sec

Request timeout in seconds (default = 30).

clean_names

Logical; if TRUE, convert column names to snake_case (default = TRUE).

coerce_types

Logical; if TRUE, attempt light type coercion (default = TRUE).

Value

A tibble containing the requested dataset.

Examples

# Examples that hit the live chi Open Data API are guarded so CRAN checks
# do not fail when the network is unavailable or slow.
if (interactive() && curl::has_internet()) {
  endpoint <- "https://data.cityofchicago.org/resource/fuz6-n5nj.json"
  out <- try(chi_any_dataset(endpoint, limit = 3), silent = TRUE)
  if (!inherits(out, "try-error")) {
    head(out)
  }
}

List datasets available in chiOpenData

Description

Retrieves the current Open NY catalog and returns datasets available for use with 'chi_pull_dataset()'.

Usage

chi_list_datasets()

Details

Keys are generated from dataset names using 'janitor::make_clean_names()'.

Value

A tibble of available datasets, including generated 'key', dataset 'uid', and dataset 'name'.

Examples

if (interactive() && curl::has_internet()) {
  chi_list_datasets()
}

Pull a CHI Open Data dataset from the CHI Open Data catalog

Description

Uses a dataset 'key' or 'id' from 'chi_list_datasets()' to pull data from CHI Open Data.

Usage

chi_pull_dataset(
  dataset,
  limit = 10000,
  filters = list(),
  date = NULL,
  from = NULL,
  to = NULL,
  date_field = NULL,
  where = NULL,
  order = NULL,
  timeout_sec = 30,
  clean_names = TRUE,
  coerce_types = TRUE
)

Arguments

dataset

A dataset key or ID from 'chi_list_datasets()'.

limit

Number of rows to retrieve (default = 10,000).

filters

Optional named list of filters. Supports vectors (translated to IN()).

date

Optional single date (matches all times that day) using 'date_field'.

from

Optional start date (inclusive) using 'date_field'.

to

Optional end date (exclusive) using 'date_field'.

date_field

Optional date/datetime column to use with 'date', 'from', or 'to'. Must be supplied when 'date', 'from', or 'to' are used.

where

Optional raw SoQL WHERE clause. If 'date', 'from', or 'to' are provided, their conditions are AND-ed with this.

order

Optional SoQL ORDER BY clause.

timeout_sec

Request timeout in seconds (default = 30).

clean_names

Logical; if TRUE, convert column names to snake_case (default = TRUE).

coerce_types

Logical; if TRUE, attempt light type coercion (default = TRUE).

Details

Dataset keys are generated from dataset titles using 'janitor::make_clean_names()'. Because keys are derived from live catalog metadata, dataset IDs are the more stable option.

Value

A tibble.

Examples

if (interactive() && curl::has_internet()) {
  # Pull by key
  chi_pull_dataset("current_employee_names_salaries_and_position_titles", limit = 3)

  # Pull by ID
  chi_pull_dataset("xzkq-xp2w", limit = 3)

  # Filters
  chi_pull_dataset("xzkq-xp2w", limit = 3, filters = list(salary_or_hourly = "HOURLY"))

}