Support for FRED Maps
samrkuhn opened this issue · 3 comments
GeoFRED is being retired on September 1st, 2022. FRED is replacing this tool with a map feature directly in all series with geographic variable. Would it be possible add a function that downloads the series as a group?
Example- Per Capita Personal Income in Colorado and select 'View Map', then select 'Download as .csv', this contains the relevant data with every state series ID included.
Since fredr
is just a set of R bindings for the FRED API, I'm not sure that sort of function should be included in the package.
However, how far can you get by using either categories or tags to identify a set of series grouped by geography? I'm not entirely sure how well this works for geographies so you'd have to do a little investigation. You could use something like fredr_series_search_tags()
/ fredr_series_search_text()
to find relevant tags or series then map fredr()
over the list of series.
It's all there already if you know where to look! That per-state data is aggregated into a release table, and there is an API for that. The key is finding the release table ID and element ID, which came from the URL.
library(fredr)
library(tidyverse)
# Release table for "Per Capita Personal Income by State, Annual"
# https://fred.stlouisfed.org/release/tables?rid=110&eid=257197
# Note the `rid` and `eid` from the URL!
release <- fredr_release_tables(
release_id = 110,
element_id = 257197
)
series <- release %>%
hoist(value, "series_id", state = "name") %>%
select(series_id, state)
series
#> # A tibble: 51 × 2
#> series_id state
#> <chr> <chr>
#> 1 ALPCPI Alabama
#> 2 AKPCPI Alaska
#> 3 AZPCPI Arizona
#> 4 ARPCPI Arkansas
#> 5 CAPCPI California
#> 6 COPCPI Colorado
#> 7 CTPCPI Connecticut
#> 8 DEPCPI Delaware
#> 9 DCPCPI District of Columbia
#> 10 FLPCPI Florida
#> # … with 41 more rows
#> # ℹ Use `print(n = ...)` to see more rows
series <- series %>%
mutate(obs = map(series_id, fredr_series_observations))
obs <- series %>%
select(-series_id) %>%
unnest(obs)
obs
#> # A tibble: 4,701 × 6
#> state date series_id value realtime_start realtime_end
#> <chr> <date> <chr> <dbl> <date> <date>
#> 1 Alabama 1929-01-01 ALPCPI 319 2022-07-21 2022-07-21
#> 2 Alabama 1930-01-01 ALPCPI 263 2022-07-21 2022-07-21
#> 3 Alabama 1931-01-01 ALPCPI 220 2022-07-21 2022-07-21
#> 4 Alabama 1932-01-01 ALPCPI 159 2022-07-21 2022-07-21
#> 5 Alabama 1933-01-01 ALPCPI 164 2022-07-21 2022-07-21
#> 6 Alabama 1934-01-01 ALPCPI 207 2022-07-21 2022-07-21
#> 7 Alabama 1935-01-01 ALPCPI 216 2022-07-21 2022-07-21
#> 8 Alabama 1936-01-01 ALPCPI 249 2022-07-21 2022-07-21
#> 9 Alabama 1937-01-01 ALPCPI 266 2022-07-21 2022-07-21
#> 10 Alabama 1938-01-01 ALPCPI 242 2022-07-21 2022-07-21
#> # … with 4,691 more rows
#> # ℹ Use `print(n = ...)` to see more rows
obs %>%
filter(state == "Alabama") %>%
ggplot(aes(x = date, y = value)) +
geom_line() +
labs(title = "Per Capita Personal Income in Alabama")
Created on 2022-07-21 by the reprex package (v2.0.1)
This is great - thank you @sboysel and @DavisVaughan