sboysel/fredr

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