Code
source("R/table_with_options.R")
January 2, 2025
We have multiple sources from FCC to define a provider.
Two are coming from the Broadband Data Collection:
The first one from FCC, accessed the 26-04-2024
The second is comming from our pipelines of NBM (June 2023 release)
One is comming from the Emergency Broadband Benefit1 and can be downloaded here (accessed the 26-04-2024)
cori.data.fcc is a small R package that contains providers data and is used here
Data is downlable using the download button
FCC provider
has 4 341 rows and 5 columns.
Those columns are:
Provider.Name
: Same than Brand Name?
Affiliation
: Same number than Provider.ID
Type | Nb. |
---|---|
ILEC | 972 |
Non-ILEC | 3484 |
Operation.Type
: Only two options “ILEC” or “Non-ILEC”
FRN
: FCC Registration Number; “number of the entity that submited the data”. It is supposed to be a string of 10 characters (with padding 0). Slighly more number than Provider.Name
and seems to be the primary key.
Provider.ID
: An ID for Affiliations
Count of unique values | |
---|---|
provider_name | 4435 |
affiliation | 3619 |
operation_type | 2 |
frn | 4456 |
provider_id | 3619 |
We can confirm that:
FRN
here is unique for every row in this data set (our primary key)
We have a bit less Provider.Name
(4321 / 4341) than FRN
We have the same number of Affiliations
and Provider.ID
The number of Provider.ID
/Affiliations
is smaller than FRN.
A quick check indicate that all Provider.ID
are 6 characters. FRN
is also always 10 characters.
Hence the one with 7 characters in FCC NBM is probably an error.
FRN
:We probably have cases where companies have same name (“Farmers Mutual Telephone company”) but we have probably company that have multiple FRN (“Grand Mound Cooperative Telephone Association”). Granted the low numbers I think we are fair to assume it does not matter to much.
provider.name_by_FRN <- sapply(split(isp$frn, isp$provider_name), function(x) unique(x))
multiple.frn <- provider.name_by_FRN[lengths(provider.name_by_FRN)> 1]
provider.name_by_FRN.dat <- data.frame(provider_name = names(multiple.frn),
FRN = sapply(multiple.frn, toString)
)
table_with_options(provider.name_by_FRN.dat)
Affiliations
/Provider.ID
?As expected most of of the relations FRN / provider are one to one (3135) while 387 have more than one FRN.
get_me_FRN_affiliations <- function(isp) {
FRN_by_affiliations <- sapply(split(isp[["frn"]], isp[["affiliation"]]),
function(x) length(unique(x)))
FRN_by_affiliations.dat <- data.frame(Affiliations = names(FRN_by_affiliations),
count_frn = FRN_by_affiliations)
return(FRN_by_affiliations.dat)
}
FRN_affiliations.dat <- get_me_FRN_affiliations(isp)
cnt_affiliation <- as.data.frame(table(FRN_affiliations.dat$count_frn),
responseName = "")
cnt_affiliation[["Num. of Affiliations / FRN"]] <-
ifelse(as.numeric(cnt_affiliation[[1]]) < 10, cnt_affiliation[[1]], "10+")
cnt_affiliation <- aggregate(cnt_affiliation[[2]],
list(cnt_affiliation[["Num. of Affiliations / FRN"]]),
sum)
names(cnt_affiliation) <- c("Number of Affiliations / FRN", "Count")
knitr::kable(cnt_affiliation[c(1, 3:9, 2 ),], row.names = FALSE)
Number of Affiliations / FRN | Count |
---|---|
1 | 3226 |
2 | 259 |
3 | 66 |
4 | 29 |
5 | 8 |
6 | 8 |
7 | 3 |
8 | 2 |
10+ | 15 |
You can explore those 387 affiliations here:
This data set is one that is coming from the ACP program.
The Emergency Broadband Benefit is the precursor of the Affordable Connectivity Program, source: https://www.fcc.gov/broadbandbenefit↩︎