The goal of cori.data.fcc
is to facilitate the discovery, analysis, and use of FCC public data releases.
The package provides access to data from the following sources:
Installation
You can install the development version of cori.data.fcc
from GitHub with:
# install.packages("devtools")
devtools::install_github("ruralinnovation/cori.data.fcc")
Examples
National Broadband Map
Key uses:
- Access parquet files stored in a CORI s3 bucket, by county:
guilford_cty <- get_county_nbm_raw(geoid_co = "37081")
dplyr::glimpse(guilford_cty)
#> Rows: 1,337,541
#> Columns: 14
#> $ frn <chr> "0001857952", "0001857952", "0001857952"…
#> $ provider_id <chr> "130077", "130077", "130077", "130077", …
#> $ brand_name <chr> "AT&T", "AT&T", "AT&T", "AT&T", "AT&T", …
#> $ location_id <chr> "1344960789", "1344965855", "1344971572"…
#> $ technology <dbl> 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, …
#> $ max_advertised_download_speed <int> 10, 0, 10, 50, 50, 75, 50, 10, 50, 0, 10…
#> $ max_advertised_upload_speed <int> 1, 0, 1, 10, 10, 20, 10, 1, 10, 0, 1, 5,…
#> $ low_latency <lgl> TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE…
#> $ business_residential_code <chr> "X", "X", "X", "X", "X", "X", "X", "X", …
#> $ state_usps <chr> "NC", "NC", "NC", "NC", "NC", "NC", "NC"…
#> $ geoid_bl <chr> "370810161022008", "370810168003003", "3…
#> $ geoid_co <chr> "37081", "37081", "37081", "37081", "370…
#> $ file_time_stamp <date> 2024-09-03, 2024-09-03, 2024-09-03, 202…
#> $ release <date> 2023-12-01, 2023-12-01, 2023-12-01, 202…
- Access a CORI-opinionated, Census-block level version of the latest NBM release:
# get a county
nbm_bl <- get_nbm_bl(geoid_co = "47051")
dplyr::glimpse(nbm_bl)
#> Rows: 2,146
#> Columns: 21
#> $ geoid_bl <chr> "470519601001000", "4705196010…
#> $ geoid_st <chr> "47", "47", "47", "47", "47", …
#> $ geoid_co <chr> "47051", "47051", "47051", "47…
#> $ state_abbr <chr> "TN", "TN", "TN", "TN", "TN", …
#> $ cnt_total_locations <int> NA, NA, NA, NA, 8, NA, 8, 3, 1…
#> $ cnt_bead_locations <int> NA, NA, NA, NA, 0, NA, 0, 0, 0…
#> $ cnt_copper_locations <int> NA, NA, NA, NA, 0, NA, 0, 0, 0…
#> $ cnt_cable_locations <int> NA, NA, NA, NA, 0, NA, 0, 0, 0…
#> $ cnt_fiber_locations <int> NA, NA, NA, NA, 0, NA, 0, 0, 0…
#> $ cnt_other_locations <int> NA, NA, NA, NA, 0, NA, 0, 0, 0…
#> $ cnt_unlicensed_fixed_wireless_locations <int> NA, NA, NA, NA, 7, NA, 8, 3, 1…
#> $ cnt_licensed_fixed_wireless_locations <int> NA, NA, NA, NA, 0, NA, 0, 0, 0…
#> $ cnt_LBR_fixed_wireless_locations <int> NA, NA, NA, NA, 0, NA, 0, 0, 0…
#> $ cnt_terrestrial_locations <int> NA, NA, NA, NA, 0, NA, 0, 0, 0…
#> $ cnt_25_3 <int> NA, NA, NA, NA, 0, NA, 0, 0, 0…
#> $ cnt_100_20 <int> NA, NA, NA, NA, 0, NA, 0, 0, 0…
#> $ cnt_100_100 <int> NA, NA, NA, NA, 0, NA, 0, 0, 0…
#> $ cnt_distcint_frn <int> NA, NA, NA, NA, NA, NA, NA, NA…
#> $ array_frn <list> <NULL>, <NULL>, <NULL>, <NULL…
#> $ combo_frn <dbl> NA, NA, NA, NA, NA, NA, NA, NA…
#> $ release <date> 2023-12-01, 2023-12-01, 2023-…
# get census block covered by an ISP identified by their FRN
skymesh <- get_frn_nbm_bl("0027136753")
dplyr::glimpse(skymesh)
#> Rows: 3
#> Columns: 21
#> $ geoid_bl <chr> "390375301004009", "3903755510…
#> $ geoid_st <chr> "39", "39", "39"
#> $ geoid_co <chr> "39037", "39037", "39109"
#> $ state_abbr <chr> "OH", "OH", "OH"
#> $ cnt_total_locations <int> 13, 7, 15
#> $ cnt_bead_locations <int> 13, 6, 15
#> $ cnt_copper_locations <int> 9, 2, 10
#> $ cnt_cable_locations <int> 10, 0, 0
#> $ cnt_fiber_locations <int> 13, 5, 2
#> $ cnt_other_locations <int> 0, 0, 0
#> $ cnt_unlicensed_fixed_wireless_locations <int> 13, 7, 15
#> $ cnt_licensed_fixed_wireless_locations <int> 13, 6, 14
#> $ cnt_LBR_fixed_wireless_locations <int> 11, 0, 0
#> $ cnt_terrestrial_locations <int> 13, 6, 15
#> $ cnt_25_3 <int> 13, 6, 14
#> $ cnt_100_20 <int> 13, 5, 14
#> $ cnt_100_100 <int> 13, 5, 5
#> $ cnt_distcint_frn <int> 9, 6, 8
#> $ array_frn <list> <"0002930980", "0004328688", "…
#> $ combo_frn <dbl> 1.241130e+19, 7.392885e+18, 6.…
#> $ release <date> 2023-12-01, 2023-12-01, 2023-1…
Form 477
Access state data for multiple years:
f477_vt <- get_f477("VT")
dplyr::glimpse(f477_vt)
#> Rows: 1,147,267
#> Columns: 15
#> $ Provider_Id <chr> "9395", "9395", "9395", "9395", "9395", "9395", "93…
#> $ FRN <chr> "0021002092", "0021002092", "0021002092", "00210020…
#> $ ProviderName <chr> "Stowe Cablevision, Inc.", "Stowe Cablevision, Inc.…
#> $ DBAName <chr> "Stowe Access, LLC", "Stowe Access, LLC", "Stowe Ac…
#> $ HoldingCompanyName <chr> "Stowe Cablevision, Inc.", "Stowe Cablevision, Inc.…
#> $ HocoNum <chr> "240090", "240090", "240090", "240090", "240090", "…
#> $ HocoFinal <chr> "Stowe Cablevision, Inc.", "Stowe Cablevision, Inc.…
#> $ StateAbbr <chr> "VT", "VT", "VT", "VT", "VT", "VT", "VT", "VT", "VT…
#> $ BlockCode <chr> "500159531001026", "500159531001026", "500159531001…
#> $ TechCode <chr> "42", "41", "50", "42", "41", "50", "42", "41", "50…
#> $ Consumer <lgl> TRUE, TRUE, FALSE, TRUE, TRUE, FALSE, TRUE, TRUE, F…
#> $ MaxAdDown <int> 25, 25, 0, 25, 25, 0, 25, 25, 0, 25, 25, 0, 25, 25,…
#> $ MaxAdUp <int> 5, 5, 0, 5, 5, 0, 5, 5, 0, 5, 5, 0, 5, 5, 0, 5, 5, …
#> $ Business <lgl> TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRU…
#> $ Date <dttm> 2014-12-01, 2014-12-01, 2014-12-01, 2014-12-01, 20…
Utilities
Access the dictionary for each dataset:
dplyr::glimpse(get_fcc_dictionary())
#> Rows: 50
#> Columns: 5
#> $ dataset <chr> "f477", "f477", "f477", "f477", "f477", "f477", "f477"…
#> $ var_name <chr> "Provider_Id", "FRN", "ProviderName", "DBAName", "Hold…
#> $ var_type <chr> "TEXT", "TEXT", "VARCHAR", "VARCHAR", "VARCHAR", "TEXT…
#> $ var_description <chr> "filing number (assigned by FCC)", "FCC registration n…
#> $ var_example <chr> "8026", "0001570936", "Arctic Slope Telephone Associat…
The package also provides a list of Provider IDs and FRNs.
str(fcc_provider)
#> 'data.frame': 4456 obs. of 5 variables:
#> $ provider_name : chr "@Link Services, LLC" "1 Point Communications" "101Netlink" "123.Net, Inc" ...
#> $ affiliation : chr "AtLink Services, LLC" "1 Point Communications" "101Netlink" "123.Net, Inc." ...
#> $ operation_type: chr "Non-ILEC" "Non-ILEC" "Non-ILEC" "Non-ILEC" ...
#> $ frn : chr "0016085920" "0021352968" "0018247254" "0008590846" ...
#> $ provider_id : num 290004 270002 190002 460000 490000 ...
Inspiration
This package was inspired by https://github.com/bbcommons/bfm-explorer