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:
You can install the development version of cori.data.fcc
from
GitHub with:
# install.packages("devtools")
devtools::install_github("ruralinnovation/cori.data.fcc")
::: {.callout-note}
We were encountering problems with devtools::check()
related to specific dependencies. Make sure to have the latest version of these packages:
waldo
duckdb
:::
library(cori.data.fcc)
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…
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…
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 ...
This package was inspired by https://github.com/bbcommons/bfm-explorer
Footnotes
-
This data describes what internet services are available to individual locations across the country, along with new maps of mobile coverage, as reported by Internet Service Providers (ISPs). It is part of the FCC’s ongoing Broadband Data Collection). ↩