Compare commits
41 Commits
1f9cfb8f9c
...
main
Author | SHA1 | Date | |
---|---|---|---|
3c43e62428 | |||
3f17d75ad2 | |||
172ba6e76c | |||
19ceeb55d8 | |||
1b58d335f8 | |||
113b3d30e8 | |||
8fbb0504c6 | |||
1a8ec40550 | |||
82c93e6689 | |||
9127b43f27 | |||
312ab95578 | |||
072af64293 | |||
618ac4eff7 | |||
419d39c569 | |||
81e5fbef6c | |||
beeb68040f | |||
9f46e49b10 | |||
6177bd0b6d | |||
8f86f15abe | |||
ccfc3bd2b8 | |||
80f1bc5bc7 | |||
e63602b908 | |||
aefda00799 | |||
447b148560 | |||
86f7e9db77 | |||
e23828dfe7 | |||
bd856dd399 | |||
3865b24190 | |||
ef8494ffec | |||
2e7ffe9414 | |||
c92fc08ab1 | |||
1a4eea6621 | |||
88b9b7fe5b | |||
4af130d240 | |||
883fd8606b | |||
647d6df134 | |||
98eef8a2fd | |||
35bff3b7a2 | |||
cd7b11c16b | |||
8e4929e629 | |||
38b71628f2 |
26
README.md
@ -8,16 +8,27 @@ This is a work in progress. It is not intended to be immediately useful for
|
||||
detailed analysis, but to act as a guide for further investigation. As we figure out
|
||||
how to slice up and caveat data, it will get more organized.
|
||||
|
||||
There may be errors! If something looks amiss, question it!
|
||||
|
||||
# Resources (not all integrated yet)
|
||||
- Various items in the [issue queue](https://amiok.net/gitea/W1CDN/ham-radio-licenses/issues)
|
||||
- Post from KE9V that started this: https://mastodon.sdf.org/@jdavis/111720350879036543
|
||||
- Blog post: https://ke9v.net/2024/01/08/fading-away.html
|
||||
- ARRL stats on the Internet Wayback Machine: https://web.archive.org/web/20150905095114/http://www.arrl.org/fcc-license-counts
|
||||
- ARRL FCC counts: https://web.archive.org/web/20150905095114/
|
||||
- Added to Internet Wayback Machine daily: https://web.archive.org/web/20150905095114/http://www.arrl.org/fcc-license-counts
|
||||
- Scraped daily, periodically added to dataset
|
||||
- W5YI Report FCC counts: https://archive.org/details/w5yi_report?sort=date
|
||||
- Screenshots to [issue queue](https://amiok.net/gitea/W1CDN/ham-radio-licenses/issues), then entered manually
|
||||
- HamCall.net counts: https://hamcall.net/hamcallcounts.html
|
||||
- Added to Internet Wayback Machine daily: https://web.archive.org/web/20240000000000*/%20https://hamcall.net/hamcallcounts.html
|
||||
- Scraped daily, periodically added to dataset
|
||||
- AE7Q counts: https://www.ae7q.com/query/stat/LicenseUSA.php
|
||||
- Added to Internet Wayback Machine daily: https://web.archive.org/web/20240000000000*/https://www.ae7q.com/query/stat/LicenseUSA.php
|
||||
- AH0A data from FCC
|
||||
- Total stats: http://ah0a.org/FCC/Licenses.html
|
||||
- Main page: http://ah0a.org/FCC/index.html
|
||||
- Total stats: http://ah0a.org/FCC/Licenses.html ([Wayback Machine](https://web.archive.org/web/20240000000000*/https://ah0a.org/FCC/Licenses.html))
|
||||
- Main page: http://ah0a.org/FCC/index.html ([Wayback Machine](https://web.archive.org/web/20240000000000*/https://ah0a.org/FCC/index.html))
|
||||
- FCC numbers as images of tables: https://sites.google.com/site/amateurradiodata/home
|
||||
- K8VSY's per capita estimates: https://k8vsy.radio/2021/09/ham-radio-licenses-us-states-per-capita.html
|
||||
- Post from KE9V that started this: https://mastodon.sdf.org/@jdavis/111720350879036543
|
||||
- Blog post: https://ke9v.net/2024/01/08/fading-away.html
|
||||
|
||||
# Contributing
|
||||
I am trying to stage new data in the [issues](https://amiok.net/gitea/W1CDN/ham-radio-licenses/issues) list,
|
||||
@ -31,6 +42,8 @@ If you want to help, here are some ways:
|
||||
- choose your own way to contribute!
|
||||
|
||||
# Rough Plots
|
||||
These are geneeral plots that aren't perfected every time the dataset is updated.
|
||||
All the data in these plots is in https://amiok.net/gitea/W1CDN/ham-radio-licenses/src/branch/main/data.
|
||||

|
||||

|
||||

|
||||
@ -41,3 +54,6 @@ If you want to help, here are some ways:
|
||||

|
||||

|
||||

|
||||

|
||||

|
||||
|
||||
|
@ -8,6 +8,7 @@ library(plotly)
|
||||
library(htmlwidgets)
|
||||
library(lubridate)
|
||||
library(ggrepel)
|
||||
library(zoo)
|
||||
|
||||
#### Total/State/Class ####
|
||||
# Read in total/state/class data
|
||||
@ -39,7 +40,19 @@ d_state_total_long <- d %>% filter(State.Territory != "TOTAL") %>%
|
||||
city_raw <- read.csv("data/us cities ham radio licenses over time.csv")
|
||||
city <- city_raw %>% mutate(Date = as.Date(Date),
|
||||
city_label = paste0(City, ", ", State))
|
||||
|
||||
|
||||
#### License Actions ####
|
||||
ae7q_actions <- read.csv("data/ae7q-actions-scraped.csv") %>%
|
||||
mutate(date = as.Date(date)) %>%
|
||||
filter(!is.na(action)) %>%
|
||||
arrange(date) %>%
|
||||
group_by(action) %>%
|
||||
mutate(mean_30 = rollmean(count, k=30, fill=NA, align='right'))
|
||||
|
||||
# Make sure all the dates are there
|
||||
#date_vec <- seq(min(ae7q_actions$date), max(ae7q_actions$date), by="days")
|
||||
#all(date_vec == unique(ae7q_actions$date))
|
||||
|
||||
#### Plots ####
|
||||
|
||||
##### Total over time, y = 0 #####
|
||||
@ -63,8 +76,8 @@ ggplotly()
|
||||
|
||||
ggsave("plots/total-over-time-y.png", width = 6, height = 4)
|
||||
|
||||
p <- ggplotly()
|
||||
htmlwidgets::saveWidget(as_widget(p), selfcontained = TRUE, file = "plots/total-over-time-y.html")
|
||||
#p <- ggplotly()
|
||||
#htmlwidgets::saveWidget(as_widget(p), selfcontained = TRUE, file = "plots/total-over-time-y.html")
|
||||
|
||||
##### Total over time, since 2000 #####
|
||||
ggplot(data = d_total %>% filter(Date >= as.Date("2000-01-01")),
|
||||
@ -213,7 +226,8 @@ ggsave("plots/class-over-time-facet.png", width = 15, height = 9)
|
||||
##### By state #####
|
||||
ggplot(data = d_state_total_long,
|
||||
aes(x = Date,
|
||||
y = Total)) +
|
||||
y = Total,
|
||||
color = source_name)) +
|
||||
geom_line() +
|
||||
geom_point(size = 0.3) +
|
||||
facet_wrap(~State.Territory,
|
||||
@ -234,7 +248,8 @@ ggsave("plots/states-over-time-freey.png", width = 15, height = 9)
|
||||
a <- city %>% group_by(city_label) %>%
|
||||
mutate(plot_label = if_else(Date == max(Date),
|
||||
city_label,
|
||||
NA_character_))
|
||||
NA_character_)) %>%
|
||||
distinct()
|
||||
ggplot(data = a,
|
||||
aes(x = Date,
|
||||
y = Count,
|
||||
@ -263,7 +278,8 @@ ggsave("plots/cities-over-time.png", width = 15, height = 9)
|
||||
ggplot(data = city,
|
||||
aes(x = Date,
|
||||
y = Count,
|
||||
group = city_label)) +
|
||||
group = city_label,
|
||||
color = source_name)) +
|
||||
geom_line() +
|
||||
geom_point(size = 0.3) +
|
||||
facet_wrap(~city_label,
|
||||
@ -280,3 +296,55 @@ ggplot(data = city,
|
||||
theme(legend.position="bottom")
|
||||
|
||||
ggsave("plots/cities-over-time-freey.png", width = 15, height = 9)
|
||||
|
||||
##### Actions Over Time #####
|
||||
ggplot(data = ae7q_actions,
|
||||
aes(x = date,
|
||||
y = count,
|
||||
color = action)) +
|
||||
geom_line() +
|
||||
geom_line(data = ae7q_actions,
|
||||
aes(x = date,
|
||||
y = mean_30),
|
||||
color = "black") +
|
||||
scale_x_date(date_breaks = "5 years",
|
||||
date_minor_breaks = "1 year",
|
||||
date_labels = "%Y") +
|
||||
facet_wrap(~action,
|
||||
scales = "free_y") +
|
||||
theme_bw() +
|
||||
labs(title = "US Amateur License Actions",
|
||||
subtitle = "with 30-day rolling mean",
|
||||
y = "Count",
|
||||
x = "Date",
|
||||
caption = "w1cdn.net; source: ae7q.com",
|
||||
color = "Action") +
|
||||
guides(color = "none")
|
||||
|
||||
ggsave("plots/actions-over-time.png", width = 6, height = 4)
|
||||
|
||||
##### Actions Over Time, last two years #####
|
||||
ggplot(data = ae7q_actions %>% filter(date >= Sys.Date() - years(2)),
|
||||
aes(x = date,
|
||||
y = count,
|
||||
color = action)) +
|
||||
geom_line() +
|
||||
geom_line(data = ae7q_actions %>% filter(date >= Sys.Date() - years(2)),
|
||||
aes(x = date,
|
||||
y = mean_30),
|
||||
color = "black") +
|
||||
scale_x_date(date_breaks = "6 months",
|
||||
date_minor_breaks = "1 months",
|
||||
date_labels = "%Y-%m") +
|
||||
facet_wrap(~action,
|
||||
scales = "free_y") +
|
||||
theme_bw() +
|
||||
labs(title = paste0("US Amateur License Actions since ", Sys.Date() - years(2)),
|
||||
subtitle = "with 30-day rolling mean",
|
||||
y = "Count",
|
||||
x = "Date",
|
||||
caption = "w1cdn.net; source: ae7q.com",
|
||||
color = "Action") +
|
||||
guides(color = "none")
|
||||
|
||||
ggsave("plots/actions-over-time-2-years.png", width = 9, height = 6)
|
||||
|
70
bin/scrape-ae7q-mass.R
Normal file
@ -0,0 +1,70 @@
|
||||
|
||||
# Counts of license actions by date
|
||||
# Use this file to scrape a series of dates from AE7Q
|
||||
|
||||
# Set start and end date
|
||||
date_vec <- seq(as.Date("2024-09-22"), as.Date("2024-11-26"), by="days")
|
||||
# Randomize dates we are querying
|
||||
date_vec <- sample(date_vec)
|
||||
|
||||
dvbackup <- date_vec
|
||||
#date_vec <- date_vec[1687:7176]
|
||||
|
||||
ae7q_list <- list()
|
||||
for(i in 1:length(date_vec)){
|
||||
ae7q_new_url <- paste0("https://www.ae7q.com/query/list/ProcessDate.php?DATE=", date_vec[i])
|
||||
print(ae7q_new_url)
|
||||
|
||||
# Read the page
|
||||
ae7q_new_raw <- read_html(ae7q_new_url)
|
||||
|
||||
# Make sure the new license table exists first
|
||||
if(!grepl("No license grants found issued on", ae7q_new_raw %>% html_text())){
|
||||
# Get tables and clean up
|
||||
ae7q_new_tables <- ae7q_new_raw %>%
|
||||
html_elements(xpath = "//table") %>%
|
||||
html_table()
|
||||
|
||||
# Find the right table by the column names
|
||||
right_table_id <- grep(paste(c("Callsign",
|
||||
"Region/ State",
|
||||
"Entity Name",
|
||||
"Applicant Type",
|
||||
"Licensee Class",
|
||||
"License Status",
|
||||
"Action Type"), collapse = " "),
|
||||
lapply(ae7q_new_tables, function(x) paste(names(x), collapse = " ")))
|
||||
|
||||
ae7q_table_new <- ae7q_new_tables[[right_table_id]]
|
||||
|
||||
ae7q_list[[i]] <- ae7q_table_new %>%
|
||||
#mutate(across(everything(), ~na_if(., "\""))) %>%
|
||||
mutate(across(everything(),
|
||||
~replace(., . == "\"", NA))) %>%
|
||||
fill(everything()) %>%
|
||||
group_by(`Action Type`) %>%
|
||||
summarize(count = n(), .groups = "keep") %>%
|
||||
|
||||
mutate(date = date_vec[i],
|
||||
source = "AE7Q", source_detail = ae7q_new_url) %>%
|
||||
relocate(date)
|
||||
} else {
|
||||
ae7q_list[[i]]<- data.frame("date" = date_vec[i],
|
||||
"Action Type" = NA,
|
||||
"count" = NA,
|
||||
"source" = "AE7Q",
|
||||
"source_detail" = ae7q_new_url)
|
||||
}
|
||||
# Wait for random time up to 10 seconds
|
||||
Sys.sleep(sample(1:5, 1))
|
||||
}
|
||||
|
||||
# Combine all the data and sort by date
|
||||
a <- bind_rows(ae7q_list) %>%
|
||||
arrange(date) %>%
|
||||
filter(!is.na(date))
|
||||
|
||||
write.csv(a, "out/ae7q-actions-scraped03.csv", row.names = F)
|
||||
|
||||
|
||||
|
@ -1,50 +0,0 @@
|
||||
|
||||
library(rvest)
|
||||
library(dplyr)
|
||||
library(tidyr)
|
||||
|
||||
# sudo crontab -e
|
||||
# 5 9 * * * su matt -c "cd /home/matt/ham-radio-licenses/; Rscript /home/matt/ham-radio-licenses/scrape-arrl-fcc.R">/dev/null 2>&1
|
||||
|
||||
arrl_url <- "https://www.arrl.org/fcc-license-counts"
|
||||
|
||||
# Read the page
|
||||
d_raw <- read_html(arrl_url)
|
||||
|
||||
# Get date
|
||||
date_raw <- d_raw %>%
|
||||
html_nodes(xpath = "/html/body/div[1]/div/div[2]/div/div[2]/div[1]/p[2]/em") %>%
|
||||
# Get date
|
||||
html_text() %>%
|
||||
gsub(".*, ","",.) %>%
|
||||
as.Date(format = "%d-%b-%Y")
|
||||
|
||||
# Get table and clean up
|
||||
tab <- d_raw %>%
|
||||
html_nodes(xpath="/html/body/div[1]/div/div[2]/div/div[2]/div[1]/table") %>%
|
||||
html_table() %>%
|
||||
.[[1]] %>%
|
||||
# Add date col
|
||||
bind_cols(Date = date_raw, .) %>%
|
||||
# Insert Tech Plus for compatibility
|
||||
mutate("Tech-Plus" = NA,
|
||||
.before = General) %>%
|
||||
mutate(a=NA, b=NA, c=NA, d=NA, e=NA, f=NA, g=NA,
|
||||
source_name = "ARRL FCC License Counts",
|
||||
source_detail = "http://www.arrl.org/fcc-license-counts")
|
||||
|
||||
# Append table
|
||||
write.table(tab, file = "out/arrl-fcc-licenses-scraped.csv", sep = ",",
|
||||
append = TRUE, quote = FALSE,
|
||||
col.names = TRUE, row.names = FALSE,
|
||||
na = "")
|
||||
|
||||
# Clean up table to remove any duplicates (sometimes the page isn't updated regularly)
|
||||
# db <- read.csv("out/arrl-fcc-licenses-scraped.csv")
|
||||
# db2 <- db %>% distinct(.keep_all = TRUE) %>%
|
||||
# filter(Date != "Date")
|
||||
# write.csv(db2, "out/arrl-fcc-licenses-scraped.csv",
|
||||
# quote = F,
|
||||
# row.names = F,
|
||||
# na = "")
|
||||
|
237
bin/scrape-license-counts.R
Normal file
@ -0,0 +1,237 @@
|
||||
|
||||
library(rvest)
|
||||
library(dplyr)
|
||||
library(tidyr)
|
||||
|
||||
# sudo crontab -e
|
||||
# 5 9 * * * su matt -c "cd /home/matt/ham-radio-licenses/; Rscript /home/matt/ham-radio-licenses/scrape-license-counts.R">/dev/null 2>&1
|
||||
|
||||
###### ARRL ######
|
||||
arrl_url <- "https://www.arrl.org/fcc-license-counts"
|
||||
|
||||
# Read the page
|
||||
d_raw <- read_html(arrl_url)
|
||||
|
||||
# Get date
|
||||
date_raw <- d_raw %>%
|
||||
html_nodes(xpath = "/html/body/div[1]/div/div[2]/div/div[2]/div[1]/p[2]/em") %>%
|
||||
# Get date
|
||||
html_text() %>%
|
||||
gsub(".*, ","",.) %>%
|
||||
as.Date(format = "%d-%b-%Y")
|
||||
|
||||
# Get table and clean up
|
||||
tab <- d_raw %>%
|
||||
html_nodes(xpath="/html/body/div[1]/div/div[2]/div/div[2]/div[1]/table") %>%
|
||||
html_table() %>%
|
||||
.[[1]] %>%
|
||||
# Add date col
|
||||
bind_cols(Date = date_raw, .) %>%
|
||||
# Insert Tech Plus for compatibility
|
||||
mutate("Tech-Plus" = NA,
|
||||
.before = General) %>%
|
||||
mutate(a=NA, b=NA, c=NA, d=NA, e=NA, f=NA, g=NA,
|
||||
source_name = "ARRL FCC License Counts",
|
||||
source_detail = "http://www.arrl.org/fcc-license-counts")
|
||||
|
||||
# Append table
|
||||
write.table(tab, file = "out/arrl-fcc-licenses-scraped.csv", sep = ",",
|
||||
append = TRUE, quote = FALSE,
|
||||
col.names = F, row.names = FALSE,
|
||||
na = "")
|
||||
|
||||
# Clean up table to remove any duplicates (sometimes the page isn't updated regularly)
|
||||
# db <- read.csv("out/arrl-fcc-licenses-scraped.csv")
|
||||
# db2 <- db %>% distinct(.keep_all = TRUE) %>%
|
||||
# filter(Date != "Date")
|
||||
# write.csv(db2, "out/arrl-fcc-licenses-scraped.csv",
|
||||
# quote = F,
|
||||
# row.names = F,
|
||||
# na = "")
|
||||
|
||||
###### HamCall ######
|
||||
hamcall_url <- "https://hamcall.net/hamcallcounts.html"
|
||||
|
||||
# Read the page
|
||||
hamcall_raw <- read_html(hamcall_url)
|
||||
|
||||
# Get date (weird for HamCall because no xpath)
|
||||
hamcall_date <- hamcall_raw %>%
|
||||
html_text() %>%
|
||||
as.character() %>%
|
||||
gsub(".*All counts current as of ", "", .) %>%
|
||||
gsub("\n\r\n\r\nAll Current US Hams.*", "", .) %>%
|
||||
as.Date()
|
||||
|
||||
# Get tables and clean up
|
||||
hamcall_tables <- hamcall_raw %>%
|
||||
html_elements(xpath = "//table") %>%
|
||||
html_table()
|
||||
|
||||
hamcall_table_all_hams_raw <- hamcall_tables[[2]]
|
||||
hamcall_table_class_raw <- hamcall_tables[[3]]
|
||||
hamcall_table_city_raw <- hamcall_tables[[4]]
|
||||
hamcall_table_state_raw <- hamcall_tables[[5]]
|
||||
|
||||
# Total licenses and class counts
|
||||
hamcall_table_class_pivot <- hamcall_table_class_raw %>%
|
||||
pivot_wider(names_from = "Class",
|
||||
values_from = "Count") %>%
|
||||
# Grab total and date
|
||||
mutate(date = hamcall_date,
|
||||
state = "TOTAL",
|
||||
techplus = NA,
|
||||
total = hamcall_table_all_hams_raw[1,2] %>% pull()) %>%
|
||||
# Arrange columns
|
||||
relocate(date, state, N, T, techplus, G, A, E, total) %>%
|
||||
select(1:9) %>%
|
||||
mutate(a = NA, b = NA,
|
||||
club = hamcall_table_all_hams_raw[2,2] %>% pull(),
|
||||
military = hamcall_table_all_hams_raw[3,2] %>% pull(),
|
||||
c = NA, d = NA, e = NA,
|
||||
source_name = "HamCall",
|
||||
source_detail = hamcall_url)
|
||||
|
||||
# City counts
|
||||
hamcall_table_city <- hamcall_table_city_raw %>%
|
||||
mutate(date = hamcall_date,
|
||||
source_name = "HamCall",
|
||||
source_detail = hamcall_url) %>%
|
||||
relocate(date)
|
||||
|
||||
# State counts
|
||||
hamcall_table_state <- hamcall_table_state_raw %>%
|
||||
mutate(date = hamcall_date,
|
||||
source_name = "HamCall",
|
||||
source_detail = hamcall_url) %>%
|
||||
relocate(date, State, Count, source_name, source_detail)
|
||||
|
||||
# https://stackoverflow.com/questions/5411979/state-name-to-abbreviation
|
||||
state_codes <- tibble(state = state.name) %>%
|
||||
bind_cols(tibble(code = state.abb)) %>%
|
||||
bind_rows(tibble(state = "District of Columbia", code = "DC")) %>%
|
||||
bind_rows(tibble(state = "Armed Forces America", code = "AA")) %>%
|
||||
bind_rows(tibble(state = "American Samoa", code = "AS")) %>%
|
||||
bind_rows(tibble(state = "Armed Forces Pacific", code = "AP")) %>%
|
||||
bind_rows(tibble(state = "Armed Forces Europe", code = "AE")) %>%
|
||||
bind_rows(tibble(state = "Virgin Islands", code = "VI")) %>%
|
||||
bind_rows(tibble(state = "Guam", code = "GU")) %>%
|
||||
bind_rows(tibble(state = "Northern Mariana Islands", code = "MP")) %>%
|
||||
bind_rows(tibble(state = "Puerto Rico", code = "PR"))
|
||||
|
||||
hamcall_table_state <- left_join(hamcall_table_state, state_codes, by = join_by(State == code), keep = F) %>%
|
||||
mutate(a=NA, b=NA, c=NA, d=NA, e=NA, f=NA,
|
||||
g=NA, h=NA, i=NA, j=NA, k=NA, l=NA, m=NA) %>%
|
||||
select(-State) %>%
|
||||
relocate(state, .after = date) %>%
|
||||
relocate(Count, .after = f) %>%
|
||||
relocate(source_name:source_detail, .after = m)
|
||||
|
||||
|
||||
###### AE7Q States ######
|
||||
ae7q_url <- "https://www.ae7q.com/query/stat/LicenseUSA.php"
|
||||
|
||||
# Read the page
|
||||
ae7q_raw <- read_html(ae7q_url)
|
||||
|
||||
# Get tables and clean up
|
||||
ae7q_tables <- ae7q_raw %>%
|
||||
html_elements(xpath = "//table") %>%
|
||||
html_table()
|
||||
ae7q_table_state_raw <- ae7q_tables[[20]]
|
||||
# Fix names
|
||||
names(ae7q_table_state_raw) <- ae7q_table_state_raw[1,]
|
||||
ae7q_table_state_raw <- ae7q_table_state_raw[-1,]
|
||||
|
||||
ae7q_table_state <- ae7q_table_state_raw %>%
|
||||
pivot_longer(cols = -"State or Territory") %>%
|
||||
# remove percentages
|
||||
mutate(value = gsub("\\s*\\([^\\)]+\\)", "", value)) %>%
|
||||
pivot_wider(id_cols = "State or Territory") %>%
|
||||
# Split states
|
||||
separate(`State or Territory`,
|
||||
into = c("state_code", "state_name"),
|
||||
sep = " - ",
|
||||
fill = "right") %>%
|
||||
mutate(state_name = case_when(state_code == "-" ~ "Other*",
|
||||
state_code == "Totals" ~ "TOTAL",
|
||||
TRUE ~ state_name)) %>%
|
||||
# Organize
|
||||
select(c(-GeoRegion, -state_code)) %>%
|
||||
mutate(date = Sys.Date(),
|
||||
ttp=NA, conditional=NA, military=NA, multiple=NA, repeater=NA,
|
||||
gmrs=NA, source="AE7Q", source_detail=ae7q_url) %>%
|
||||
relocate(date, state_name, Novice, Technician, TechnicianPlus,
|
||||
General, Advanced, AmateurExtra, Total, ttp, conditional,
|
||||
Club)
|
||||
|
||||
###### AE7Q License Actions ######
|
||||
ae7q_new_url <- paste0("https://www.ae7q.com/query/list/ProcessDate.php?DATE=", Sys.Date()-1)
|
||||
#ae7q_new_url <- paste0("https://www.ae7q.com/query/list/ProcessDate.php?DATE=2024-11-01")
|
||||
|
||||
# Read the page
|
||||
ae7q_new_raw <- read_html(ae7q_new_url)
|
||||
|
||||
# Make sure the new license table exists first
|
||||
if(!grepl("No license grants found issued on", ae7q_new_raw %>% html_text())){
|
||||
# Get tables and clean up
|
||||
ae7q_new_tables <- ae7q_new_raw %>%
|
||||
html_elements(xpath = "//table") %>%
|
||||
html_table()
|
||||
|
||||
# Find the right table by the column names
|
||||
right_table_id <- grep(paste(c("Callsign",
|
||||
"Region/ State",
|
||||
"Entity Name",
|
||||
"Applicant Type",
|
||||
"Licensee Class",
|
||||
"License Status",
|
||||
"Action Type"), collapse = " "),
|
||||
lapply(ae7q_new_tables, function(x) paste(names(x), collapse = " ")))
|
||||
|
||||
ae7q_table_new <- ae7q_new_tables[[right_table_id]]
|
||||
|
||||
ae7q_sum01 <- ae7q_table_new %>%
|
||||
#mutate(across(everything(), ~na_if(., "\""))) %>%
|
||||
mutate(across(everything(),
|
||||
~replace(., . == "\"", NA))) %>%
|
||||
fill(everything()) %>%
|
||||
group_by(`Action Type`) %>%
|
||||
summarize(count = n(), .groups = "keep") %>%
|
||||
mutate(date = Sys.Date()-1,
|
||||
source = "AE7Q", source_detail = ae7q_new_url) %>%
|
||||
relocate(date)
|
||||
} else {
|
||||
ae7q_sum01<- data.frame("date" = Sys.Date(),
|
||||
"Action Type" = NA,
|
||||
"count" = NA,
|
||||
"source" = "AE7Q",
|
||||
"source_detail" = ae7q_new_url)
|
||||
}
|
||||
|
||||
|
||||
##### Append tables #####
|
||||
write.table(hamcall_table_class_pivot, file = "out/hamcall-licenses-scraped.csv", sep = ",",
|
||||
append = TRUE, quote = FALSE,
|
||||
col.names = F, row.names = FALSE,
|
||||
na = "")
|
||||
|
||||
write.table(hamcall_table_city, file = "out/hamcall-cities-scraped.csv", sep = ",",
|
||||
append = TRUE, quote = FALSE,
|
||||
col.names = F, row.names = FALSE,
|
||||
na = "")
|
||||
|
||||
write.table(hamcall_table_state, file = "out/hamcall-states-scraped.csv", sep = ",",
|
||||
append = TRUE, quote = FALSE,
|
||||
col.names = F, row.names = FALSE,
|
||||
na = "")
|
||||
|
||||
write.table(ae7q_table_state, file = "out/ae7q-states-scraped.csv", sep = ",",
|
||||
append = TRUE, quote = FALSE,
|
||||
col.names = F, row.names = FALSE,
|
||||
na = "")
|
||||
|
||||
write.table(ae7q_sum01, file = "out/ae7q-actions-scraped.csv", sep = ",",
|
||||
append = TRUE, quote = FALSE,
|
||||
col.names = F, row.names = FALSE,
|
||||
na = "")
|
16008
data/ae7q-actions-scraped.csv
Normal file
@ -20,3 +20,4 @@ Date,Members,source_name,source_detail
|
||||
2005-12-31,148887,ARRL Annual Report,2006 https://www.arrl.org/files/file/Annual_Report_2006_web.pdf
|
||||
2004-12-31,151727,ARRL Annual Report,2004 https://www.arrl.org/files/file/About%20ARRL/Annual-Reportm%202004.pdf
|
||||
2003-12-31,154545,ARRL Annual Report,2003 https://www.arrl.org/files/file/About%20ARRL/Annual%20Reports/2003%20Annual%20Report.pdf
|
||||
1993-12-31,170000,W5YI Report,FCC numbers in W5YI Report 1994-04-01 p. 4
|
||||
|
|
7911
data/hamcall-states-scraped.csv
Normal file
@ -55,3 +55,117 @@ Date,State.Territory,Novice,Tech,Tech.Plus,General,Advanced,Extra,Total,a,b,c,d,
|
||||
2024-04-06,Wyoming,9,1023,,659,107,487,2285,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-06,Other*,1,282,,98,6,194,581,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-06,TOTAL,5703,373205,,186231,31407,155380,751926,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
Date,State/Territory,Novice,Tech,Tech-Plus,General,Advanced,Extra,Total,a,b,c,d,e,f,g,source_name,source_detail
|
||||
2024-04-20,Alabama,64,5446,,3164,505,2891,12070,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-20,Alaska,17,1536,,876,134,671,3234,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-20,Arizona,109,10994,,5100,946,4574,21723,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-20,Arkansas,37,4132,,1978,296,1627,8070,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-20,California,633,57519,,19214,3265,15428,96059,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-20,Colorado,85,10595,,4533,677,3805,19695,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-20,Connecticut,118,3063,,1865,373,1681,7100,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-20,Delaware,19,762,,503,82,419,1785,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-20,District of Columbia,4,263,,115,19,121,522,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-20,Florida,410,18163,,11752,2432,9974,42731,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-20,Georgia,104,8773,,4947,797,4135,18756,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-20,Guam,1,96,,46,8,101,252,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-20,Hawaii,26,1991,,756,141,679,3593,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-20,Idaho,27,6412,,2548,244,1649,10880,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-20,Illinois,248,8463,,5260,959,4374,19304,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-20,Indiana,158,7162,,4144,677,3184,15325,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-20,Iowa,50,2982,,1671,383,1492,6578,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-20,Kansas,66,3359,,1933,281,1521,7160,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-20,Kentucky,70,4549,,2570,376,2026,9591,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-20,Louisiana,59,2605,,1692,316,1352,6024,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-20,Maine,38,1827,,1261,202,1098,4426,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-20,Maryland,100,4738,,2778,526,2670,10812,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-20,Massachusetts,144,5766,,3450,636,3274,13270,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-20,Michigan,167,9725,,5335,938,4675,20840,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-20,Minnesota,103,5200,,2959,569,2509,11340,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-20,Mississippi,20,2127,,1346,213,1256,4962,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-20,Missouri,93,7456,,3853,598,3097,15097,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-20,Montana,27,2251,,1180,165,834,4457,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-20,Nebraska,25,1701,,1028,214,759,3727,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-20,Nevada,38,4433,,1872,309,1540,8192,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-20,New Hampshire,51,2412,,1501,252,1506,5722,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-20,New Jersey,189,5874,,3170,680,3063,12976,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-20,New Mexico,27,3160,,1451,258,1331,6227,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-20,New York,382,11613,,6694,1305,5936,25930,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-20,North Carolina,141,10344,,5891,967,5160,22503,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-20,North Dakota,9,727,,417,61,303,1517,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-20,Ohio,308,12182,,7357,1237,6114,27198,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-20,Oklahoma,44,4979,,2527,354,1975,9879,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-20,Oregon,93,11148,,4919,670,3597,20427,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-20,Pennsylvania,262,10514,,6271,1249,5607,23903,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-20,Puerto Rico,99,2976,,1202,165,725,5167,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-20,Rhode Island,20,832,,482,87,459,1880,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-20,South Carolina,54,4673,,2735,441,2386,10289,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-20,South Dakota,16,905,,588,114,499,2122,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-20,Tennessee,110,9356,,5223,780,4421,19890,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-20,Texas,278,26569,,13326,2167,11235,53575,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-20,Utah,35,12609,,3288,294,2161,18387,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-20,Vermont,13,966,,524,100,497,2100,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-20,Virgin Islands,,120,,71,11,52,254,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-20,Virginia,168,9332,,5306,887,4848,20541,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-20,Washington,177,18642,,8059,1087,5729,33694,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-20,West Virginia,40,3030,,1439,198,1260,5967,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-20,Wisconsin,88,4761,,3194,541,2577,11161,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-20,Wyoming,9,1026,,661,107,490,2293,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-20,Other*,1,280,,97,5,193,576,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-20,TOTAL,5674,373119,,186122,31298,155540,751753,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
Date,State/Territory,Novice,Tech,Tech-Plus,General,Advanced,Extra,Total,a,b,c,d,e,f,g,source_name,source_detail
|
||||
2024-04-20,Alabama,64,5446,,3164,505,2891,12070,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-20,Alaska,17,1536,,876,134,671,3234,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-20,Arizona,109,10994,,5100,946,4574,21723,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-20,Arkansas,37,4132,,1978,296,1627,8070,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-20,California,633,57519,,19214,3265,15428,96059,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-20,Colorado,85,10595,,4533,677,3805,19695,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-20,Connecticut,118,3063,,1865,373,1681,7100,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-20,Delaware,19,762,,503,82,419,1785,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-20,District of Columbia,4,263,,115,19,121,522,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-20,Florida,410,18163,,11752,2432,9974,42731,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-20,Georgia,104,8773,,4947,797,4135,18756,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-20,Guam,1,96,,46,8,101,252,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-20,Hawaii,26,1991,,756,141,679,3593,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-20,Idaho,27,6412,,2548,244,1649,10880,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-20,Illinois,248,8463,,5260,959,4374,19304,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-20,Indiana,158,7162,,4144,677,3184,15325,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-20,Iowa,50,2982,,1671,383,1492,6578,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-20,Kansas,66,3359,,1933,281,1521,7160,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-20,Kentucky,70,4549,,2570,376,2026,9591,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-20,Louisiana,59,2605,,1692,316,1352,6024,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-20,Maine,38,1827,,1261,202,1098,4426,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-20,Maryland,100,4738,,2778,526,2670,10812,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-20,Massachusetts,144,5766,,3450,636,3274,13270,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-20,Michigan,167,9725,,5335,938,4675,20840,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-20,Minnesota,103,5200,,2959,569,2509,11340,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-20,Mississippi,20,2127,,1346,213,1256,4962,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-20,Missouri,93,7456,,3853,598,3097,15097,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-20,Montana,27,2251,,1180,165,834,4457,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-20,Nebraska,25,1701,,1028,214,759,3727,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-20,Nevada,38,4433,,1872,309,1540,8192,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-20,New Hampshire,51,2412,,1501,252,1506,5722,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-20,New Jersey,189,5874,,3170,680,3063,12976,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-20,New Mexico,27,3160,,1451,258,1331,6227,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-20,New York,382,11613,,6694,1305,5936,25930,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-20,North Carolina,141,10344,,5891,967,5160,22503,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-20,North Dakota,9,727,,417,61,303,1517,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-20,Ohio,308,12182,,7357,1237,6114,27198,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-20,Oklahoma,44,4979,,2527,354,1975,9879,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-20,Oregon,93,11148,,4919,670,3597,20427,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-20,Pennsylvania,262,10514,,6271,1249,5607,23903,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-20,Puerto Rico,99,2976,,1202,165,725,5167,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-20,Rhode Island,20,832,,482,87,459,1880,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-20,South Carolina,54,4673,,2735,441,2386,10289,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-20,South Dakota,16,905,,588,114,499,2122,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-20,Tennessee,110,9356,,5223,780,4421,19890,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-20,Texas,278,26569,,13326,2167,11235,53575,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-20,Utah,35,12609,,3288,294,2161,18387,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-20,Vermont,13,966,,524,100,497,2100,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-20,Virgin Islands,,120,,71,11,52,254,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-20,Virginia,168,9332,,5306,887,4848,20541,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-20,Washington,177,18642,,8059,1087,5729,33694,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-20,West Virginia,40,3030,,1439,198,1260,5967,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-20,Wisconsin,88,4761,,3194,541,2577,11161,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-20,Wyoming,9,1026,,661,107,490,2293,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-20,Other*,1,280,,97,5,193,576,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-20,TOTAL,5674,373119,,186122,31298,155540,751753,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
|
|
BIN
plots/actions-over-time-2-years.png
Normal file
After Width: | Height: | Size: 572 KiB |
BIN
plots/actions-over-time.png
Normal file
After Width: | Height: | Size: 242 KiB |
Before Width: | Height: | Size: 1.1 MiB After Width: | Height: | Size: 1.1 MiB |
Before Width: | Height: | Size: 1.0 MiB After Width: | Height: | Size: 1.1 MiB |
Before Width: | Height: | Size: 191 KiB After Width: | Height: | Size: 216 KiB |
Before Width: | Height: | Size: 629 KiB After Width: | Height: | Size: 642 KiB |
Before Width: | Height: | Size: 595 KiB After Width: | Height: | Size: 615 KiB |
Before Width: | Height: | Size: 1.3 MiB After Width: | Height: | Size: 1.4 MiB |
Before Width: | Height: | Size: 161 KiB After Width: | Height: | Size: 152 KiB |
Before Width: | Height: | Size: 137 KiB After Width: | Height: | Size: 148 KiB |
Before Width: | Height: | Size: 182 KiB After Width: | Height: | Size: 185 KiB |
Before Width: | Height: | Size: 176 KiB After Width: | Height: | Size: 176 KiB |