Skip to contents

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