Compare commits
82 Commits
590786aa18
...
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 | |||
1f9cfb8f9c | |||
c7a2fbddb8 | |||
6951769b72 | |||
2ee77a2e58 | |||
08b1b3edc5 | |||
3b9d756f6f | |||
ddcc8aa5c8 | |||
9aa807a4c8 | |||
8f706be08a | |||
d68668ba4f | |||
7d79c982be | |||
9c612b98e5 | |||
643adc4c4c | |||
5e79b43beb | |||
4596199794 | |||
3faee40a32 | |||
0b7e9db564 | |||
694ca425a3 | |||
317f0a0d3a | |||
b6cba8d62d | |||
49f9185cdb | |||
40fa3ba622 | |||
5fce27125a | |||
fc6f236b8b | |||
3bb8e9f515 | |||
7897d08871 | |||
2af20ea961 | |||
a3a110fe5a | |||
b956604c30 | |||
239b1da005 | |||
d7036e60c9 | |||
fee62c7451 | |||
e99aed3617 | |||
ba5552054b | |||
875882f799 | |||
c5f436e69b | |||
63bb876ff3 | |||
be336b3b83 | |||
2d3bf77cf8 | |||
5afc074044 | |||
386192d752 |
2
.gitignore
vendored
@ -2,3 +2,5 @@
|
||||
.Rhistory
|
||||
.RData
|
||||
.Ruserdata
|
||||
.~lock*
|
||||
README.html
|
||||
|
56
README.md
@ -2,14 +2,58 @@
|
||||
|
||||
Data and code for analysis at https://mastodon.radio/@W1CDN/111723969200676208.
|
||||
|
||||
I'll get a blog post up at https://w1cdn.net at some point.
|
||||
Introductory blog post: https://w1cdn.net/2024/01/us-ham-radio-license-counts-over-time/
|
||||
|
||||
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)
|
||||
- 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
|
||||
- Various items in the [issue queue](https://amiok.net/gitea/W1CDN/ham-radio-licenses/issues)
|
||||
- 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,
|
||||
then copy that data into tabular format at a later date.
|
||||
|
||||
If you want to help, here are some ways:
|
||||
- look at the issues and copy data into tabular format, share back in CSV format or pull request
|
||||
- find new sources and create an issue for each new chunk of data (use best judgement)
|
||||
- download data and QC: look for potential errors and inconsistencies, share those in a new issue
|
||||
- download data and run analyses: share your interpretations
|
||||
- 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.
|
||||

|
||||

|
||||

|
||||

|
||||

|
||||

|
||||

|
||||

|
||||

|
||||

|
||||

|
||||

|
||||
|
||||
|
325
bin/data-plots.R
@ -4,9 +4,14 @@ library(tidyr)
|
||||
library(dplyr)
|
||||
library(forcats)
|
||||
library(ggthemes)
|
||||
library(plotly)
|
||||
library(htmlwidgets)
|
||||
library(lubridate)
|
||||
library(ggrepel)
|
||||
library(zoo)
|
||||
|
||||
# Read in data from Wayback Machine archive of http://www.arrl.org/fcc-license-counts
|
||||
|
||||
#### Total/State/Class ####
|
||||
# Read in total/state/class data
|
||||
d_raw <- read.csv("data/us ham radio licenses over time.csv")
|
||||
|
||||
# What dates do we have?
|
||||
@ -14,37 +19,41 @@ unique(d_raw$Date)
|
||||
|
||||
# Clean up here if needed
|
||||
d <- d_raw %>%
|
||||
mutate(Date = as.Date(Date)) %>%
|
||||
mutate(Date = as.Date(Date)) #%>%
|
||||
# Drop Tech alone and leave Tech and Tech Plus
|
||||
select(-c(Tech, Tech.Plus)) %>%
|
||||
mutate(across(c(3:8), as.numeric))
|
||||
#select(-c(Tech, Tech.Plus))
|
||||
|
||||
|
||||
d_total <- d %>% filter(State.Territory == "TOTAL")
|
||||
|
||||
d_total_long <- d_total %>%
|
||||
pivot_longer(cols = 3:8,
|
||||
pivot_longer(cols = !c("Date", "State.Territory", "source_name", "source_detail"),
|
||||
names_to = "lclass",
|
||||
values_to = "count")
|
||||
|
||||
values_to = "count") %>%
|
||||
# only keep rows with data so plots look right
|
||||
filter(!is.na(count))
|
||||
|
||||
d_state_total_long <- d %>% filter(State.Territory != "TOTAL") %>%
|
||||
select(Date, State.Territory, Total, source_name, source_detail) %>%
|
||||
filter(!is.na(Total))
|
||||
|
||||
#### City ####
|
||||
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 #####
|
||||
ggplot(data = d_total,
|
||||
aes(x = Date,
|
||||
y = Total,
|
||||
color = source_name)) +
|
||||
geom_line() +
|
||||
geom_point() +
|
||||
scale_x_date(date_breaks = "10 years",
|
||||
date_minor_breaks = "1 year",
|
||||
date_labels = "%Y") +
|
||||
scale_y_continuous(labels = scales::comma) +
|
||||
theme_bw() +
|
||||
labs(title = "US Amateur Licenses",
|
||||
subtitle = "ARRL, AH0A",
|
||||
caption = "w1cdn.net",
|
||||
color = "Source")
|
||||
|
||||
##### Total over time, y = 0 #####
|
||||
ggplot(data = d_total,
|
||||
@ -52,7 +61,7 @@ ggplot(data = d_total,
|
||||
y = Total,
|
||||
color = source_name)) +
|
||||
geom_line() +
|
||||
geom_point() +
|
||||
geom_point(size = 0.3) +
|
||||
scale_x_date(date_breaks = "10 years",
|
||||
date_minor_breaks = "1 year",
|
||||
date_labels = "%Y") +
|
||||
@ -60,17 +69,82 @@ ggplot(data = d_total,
|
||||
limits = c(0, NA)) +
|
||||
theme_bw() +
|
||||
labs(title = "US Amateur Licenses",
|
||||
subtitle = "ARRL, AH0A",
|
||||
caption = "w1cdn.net",
|
||||
color = "Source")
|
||||
color = "Source") +
|
||||
theme(legend.position="bottom")
|
||||
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")
|
||||
|
||||
##### Total over time, since 2000 #####
|
||||
ggplot(data = d_total %>% filter(Date >= as.Date("2000-01-01")),
|
||||
aes(x = Date,
|
||||
y = Total,
|
||||
color = source_name)) +
|
||||
geom_line() +
|
||||
geom_point(size = 0.3) +
|
||||
scale_x_date(date_breaks = "2 years",
|
||||
date_minor_breaks = "3 months",
|
||||
date_labels = "%Y") +
|
||||
scale_y_continuous(labels = scales::comma) +
|
||||
theme_bw() +
|
||||
labs(title = "US Amateur Licenses since 2000",
|
||||
caption = "w1cdn.net",
|
||||
color = "Source") +
|
||||
theme(legend.position="bottom")
|
||||
|
||||
ggsave("plots/total-over-time-2000.png", width = 6, height = 4)
|
||||
|
||||
##### Total over time, 2 years #####
|
||||
ggplot(data = d_total %>% filter(Date >= Sys.Date() - years(2)),
|
||||
aes(x = Date,
|
||||
y = Total,
|
||||
color = source_name)) +
|
||||
geom_line() +
|
||||
geom_point(size = 0.3) +
|
||||
scale_x_date(date_breaks = "3 months",
|
||||
date_minor_breaks = "1 month",
|
||||
date_labels = "%Y-%m") +
|
||||
scale_y_continuous(labels = scales::comma) +
|
||||
theme_bw() +
|
||||
labs(title = paste0("US Amateur Licenses since ", Sys.Date() - years(2)),
|
||||
caption = "w1cdn.net",
|
||||
color = "Source") +
|
||||
theme(legend.position="bottom")
|
||||
|
||||
ggsave("plots/total-over-time-2-years.png", width = 6, height = 4)
|
||||
|
||||
##### ARRL Total over time, 2 months #####
|
||||
ggplot(data = d_total %>% filter(Date >= Sys.Date() - months(2),
|
||||
source_name == "ARRL FCC License Counts"),
|
||||
aes(x = Date,
|
||||
y = Total,
|
||||
color = source_name)) +
|
||||
geom_line() +
|
||||
geom_point(size = 0.3) +
|
||||
scale_x_date(date_breaks = "7 days",
|
||||
date_minor_breaks = "1 days",
|
||||
date_labels = "%m-%d") +
|
||||
scale_y_continuous(labels = scales::comma) +
|
||||
theme_bw() +
|
||||
labs(title = paste0("US Amateur Licenses since ", Sys.Date() - months(2)),
|
||||
caption = "w1cdn.net",
|
||||
color = "Source") +
|
||||
theme(legend.position="bottom")
|
||||
|
||||
ggsave("plots/total-over-time-2-months.png", width = 6, height = 4)
|
||||
|
||||
##### By license class #####
|
||||
ggplot(data = d_total_long %>% filter(lclass != "Total"),
|
||||
aes(x = Date,
|
||||
y = count,
|
||||
color = fct_reorder2(lclass, Date, count))) +
|
||||
color = fct_reorder2(lclass, Date, count),
|
||||
linetype = source_name)) +
|
||||
geom_line() +
|
||||
geom_point() +
|
||||
geom_point(size = 0.3) +
|
||||
scale_x_date(date_breaks = "10 years",
|
||||
date_minor_breaks = "1 year",
|
||||
date_labels = "%Y") +
|
||||
@ -78,26 +152,199 @@ ggplot(data = d_total_long %>% filter(lclass != "Total"),
|
||||
scale_color_colorblind() +
|
||||
theme_bw() +
|
||||
labs(title = "US Amateur Licenses by Class",
|
||||
subtitle = "ARRL, AH0A",
|
||||
y = "Count",
|
||||
color = "Class",
|
||||
caption = "w1cdn.net")
|
||||
caption = "w1cdn.net") +
|
||||
theme(legend.position="bottom")
|
||||
|
||||
##### By license class, stacked #####
|
||||
ggsave("plots/class-over-time.png", width = 12, height = 8)
|
||||
|
||||
##### By license class, 2 years #####
|
||||
ggplot(data = d_total_long %>% filter(lclass != "Total",
|
||||
Date >= Sys.Date() - years(2)),
|
||||
aes(x = Date,
|
||||
y = count,
|
||||
color = fct_reorder2(lclass, Date, count),
|
||||
linetype = source_name)) +
|
||||
geom_line() +
|
||||
geom_point(size = 0.3) +
|
||||
scale_x_date(date_breaks = "3 months",
|
||||
date_minor_breaks = "1 month",
|
||||
date_labels = "%Y-%m") +
|
||||
scale_y_continuous(labels = scales::comma) +
|
||||
scale_color_colorblind() +
|
||||
theme_bw() +
|
||||
labs(title = paste0("US Amateur Licenses by Class since ", Sys.Date() - years(2)),
|
||||
y = "Count",
|
||||
color = "Class",
|
||||
caption = "w1cdn.net") +
|
||||
theme(legend.position="bottom")
|
||||
|
||||
ggsave("plots/class-over-time-2-years.png", width = 6, height = 4)
|
||||
|
||||
##### By license class, facet #####
|
||||
ggplot(data = d_total_long %>% filter(lclass != "Total"),
|
||||
aes(x = Date,
|
||||
y = count,
|
||||
fill = fct_reorder2(lclass, Date, count))) +
|
||||
geom_area() +
|
||||
scale_fill_colorblind() +
|
||||
color = source_name)) +
|
||||
geom_line() +
|
||||
geom_point(size = 0.3) +
|
||||
facet_wrap(~lclass) +
|
||||
scale_x_date(date_breaks = "10 years",
|
||||
date_minor_breaks = "1 year",
|
||||
date_labels = "%Y") +
|
||||
scale_y_continuous(labels = scales::comma) +
|
||||
scale_color_colorblind() +
|
||||
theme_bw() +
|
||||
labs(title = "US Amateur Licenses by Class",
|
||||
subtitle = "ARRL, AH0A",
|
||||
fill = "Class",
|
||||
caption = "w1cdn.net")
|
||||
y = "Count",
|
||||
color = "Class",
|
||||
caption = "w1cdn.net") +
|
||||
theme(legend.position="bottom")
|
||||
|
||||
ggsave("plots/class-over-time-facet.png", width = 15, height = 9)
|
||||
|
||||
##### By license class, stacked #####
|
||||
# ggplot(data = d_total_long %>% filter(lclass != "Total"),
|
||||
# aes(x = Date,
|
||||
# y = count,
|
||||
# fill = fct_reorder2(lclass, Date, count))) +
|
||||
# geom_area() +
|
||||
# scale_fill_colorblind() +
|
||||
# scale_x_date(date_breaks = "10 years",
|
||||
# date_minor_breaks = "1 year",
|
||||
# date_labels = "%Y") +
|
||||
# scale_y_continuous(labels = scales::comma) +
|
||||
# theme_bw() +
|
||||
# labs(title = "US Amateur Licenses by Class",
|
||||
# fill = "Class",
|
||||
# caption = "w1cdn.net") +
|
||||
# theme(legend.position="bottom")
|
||||
|
||||
#ggsave("plots/class-over-time-stacked.png", width = 6, height = 4)
|
||||
|
||||
##### By state #####
|
||||
ggplot(data = d_state_total_long,
|
||||
aes(x = Date,
|
||||
y = Total,
|
||||
color = source_name)) +
|
||||
geom_line() +
|
||||
geom_point(size = 0.3) +
|
||||
facet_wrap(~State.Territory,
|
||||
scales = "free_y") +
|
||||
scale_x_date(date_breaks = "10 years",
|
||||
#date_minor_breaks = "1 year",
|
||||
date_labels = "%Y") +
|
||||
scale_y_continuous(labels = scales::comma) +
|
||||
theme_bw() +
|
||||
labs(title = "US Amateur Licenses by State",
|
||||
y = "Count",
|
||||
caption = "w1cdn.net") +
|
||||
theme(legend.position="bottom")
|
||||
|
||||
ggsave("plots/states-over-time-freey.png", width = 15, height = 9)
|
||||
|
||||
##### By city #####
|
||||
a <- city %>% group_by(city_label) %>%
|
||||
mutate(plot_label = if_else(Date == max(Date),
|
||||
city_label,
|
||||
NA_character_)) %>%
|
||||
distinct()
|
||||
ggplot(data = a,
|
||||
aes(x = Date,
|
||||
y = Count,
|
||||
color = city_label)) +
|
||||
geom_line() +
|
||||
geom_point(size = 0.3) +
|
||||
scale_x_date(date_breaks = "1 years",
|
||||
date_minor_breaks = "1 month",
|
||||
date_labels = "%Y",
|
||||
limits = c(NA_Date_, Sys.Date() + years(4))) +
|
||||
scale_y_continuous(labels = scales::comma) +
|
||||
theme_bw() +
|
||||
geom_label_repel(aes(label = plot_label),
|
||||
nudge_x = 1,
|
||||
na.rm = TRUE,
|
||||
segment.colour = NA) +
|
||||
labs(title = "US Amateur Licenses by City",
|
||||
y = "Count",
|
||||
caption = "w1cdn.net") +
|
||||
theme(legend.position="bottom") +
|
||||
guides(color = "none")
|
||||
|
||||
ggsave("plots/cities-over-time.png", width = 15, height = 9)
|
||||
|
||||
##### By city, free y #####
|
||||
ggplot(data = city,
|
||||
aes(x = Date,
|
||||
y = Count,
|
||||
group = city_label,
|
||||
color = source_name)) +
|
||||
geom_line() +
|
||||
geom_point(size = 0.3) +
|
||||
facet_wrap(~city_label,
|
||||
scales = "free_y"
|
||||
) +
|
||||
scale_x_date(date_breaks = "4 years",
|
||||
date_minor_breaks = "1 years",
|
||||
date_labels = "%Y") +
|
||||
scale_y_continuous(labels = scales::comma) +
|
||||
theme_bw() +
|
||||
labs(title = "US Amateur Licenses by City",
|
||||
y = "Count",
|
||||
caption = "w1cdn.net") +
|
||||
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)
|
||||
|
||||
|
||||
|
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
23
data/arrl membership over time.csv
Normal file
@ -0,0 +1,23 @@
|
||||
Date,Members,source_name,source_detail
|
||||
2022-12-31,151840,ARRL Annual Report,2022 https://www.arrl.org/files/file/About%20ARRL/Annual%20Reports/2022%20Annual%20Report%20ARRL%20AR2022%20072023C.pdf
|
||||
2021-12-31,158601,ARRL Annual Report,2021 https://www.arrl.org/files/file/About%20ARRL/Annual%20Reports/2021%20ARRL%20new%20AR2021%20071822.pdf
|
||||
2020-12-31,158494,ARRL Annual Report,2021 https://www.arrl.org/files/file/About%20ARRL/Annual%20Reports/2021%20ARRL%20new%20AR2021%20071822.pdf
|
||||
2020-12-31,158494,ARRL Annual Report,2020 https://www.arrl.org/files/file/About%20ARRL/Annual%20Reports/2020%20Annual%20Report%20ARRL%20AR%20062521%20Singles.pdf
|
||||
2019-12-31,156755,ARRL Annual Report,2019 https://www.arrl.org/files/file/About%20ARRL/Annual%20Reports/2019%20annual%20report%20ARRL%20AR%20092520.pdf
|
||||
2018-12-31,156899,ARRL Annual Report,2019 https://www.arrl.org/files/file/About%20ARRL/Annual%20Reports/2019%20annual%20report%20ARRL%20AR%20092520.pdf
|
||||
2017-12-31,159070,ARRL Annual Report,2017 https://www.arrl.org/files/file/About%20ARRL/Annual%20Reports/ARRL%202017%20Annual%20Report.pdf
|
||||
2016-12-31,164070,ARRL Annual Report,2016 https://www.arrl.org/files/file/About%20ARRL/Annual%20Reports/ARRL%202016%20Annual%20Report.pdf
|
||||
2015-12-31,170528,ARRL Annual Report,2015 https://www.arrl.org/files/file/About%20ARRL/Annual%20Reports/2015%20ARRL%20ANNUAL%20REPORT.pdf
|
||||
2014-12-31,165663,ARRL Annual Report,2014 https://www.arrl.org/files/file/About%20ARRL/Annual%20Reports/2014-AnnualReport-Web.pdf
|
||||
2013-12-31,162215,ARRL Annual Report,2013 https://www.arrl.org/files/file/About%20ARRL/Annual%20Reports/2013-ARRL-Annual-Report.pdf
|
||||
2012-12-31,160278,ARRL Annual Report,2012 https://www.arrl.org/files/file/About%20ARRL/Annual%20Reports/2012-ARRL-Annual-Report.pdf
|
||||
2011-12-31,157818,ARRL Annual Report,2011 https://www.arrl.org/files/file/About%20ARRL/Annual%20Reports/2011%20ANNUAL%20REPORT%20for%20viewing_indd.pdf
|
||||
2010-12-31,156475,ARRL Annual Report,2010 https://www.arrl.org/files/file/About%20ARRL/Annual%20Reports/2010%20ANNUAL%20REPORT%20for%20Web%20indd.pdf
|
||||
2009-12-31,156125,ARRL Annual Report,2009 https://www.arrl.org/files/file/About%20ARRL/ARRL%20Annual%20Report%20for%202009.pdf
|
||||
2008-12-31,154627,ARRL Annual Report,2008 https://www.arrl.org/files/file/About%20ARRL/2008-Annual-Report.pdf
|
||||
2007-12-31,153535,ARRL Annual Report,2007 https://www.arrl.org/files/file/2007-Annual-Report.pdf
|
||||
2006-12-31,148641,ARRL Annual Report,2006 https://www.arrl.org/files/file/Annual_Report_2006_web.pdf
|
||||
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
6526
data/us cities ham radio licenses over time.csv
Normal file
171
out/arrl-fcc-licenses-scraped.csv
Normal file
@ -0,0 +1,171 @@
|
||||
Date,State.Territory,Novice,Tech,Tech.Plus,General,Advanced,Extra,Total,a,b,c,d,e,f,g,source_name,source_detail
|
||||
2024-04-06,Alabama,65,5448,,3159,508,2891,12071,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-06,Alaska,17,1540,,880,134,672,3243,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-06,Arizona,110,10983,,5095,951,4569,21708,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-06,Arkansas,37,4143,,1973,297,1629,8079,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-06,California,634,57579,,19258,3283,15428,96182,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-06,Colorado,85,10579,,4545,676,3799,19684,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-06,Connecticut,117,3069,,1871,373,1678,7108,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-06,Delaware,20,757,,501,83,418,1779,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-06,District of Columbia,4,267,,112,19,120,522,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-06,Florida,411,18148,,11784,2439,9958,42740,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-06,Georgia,104,8757,,4946,797,4127,18731,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-06,Guam,1,97,,46,8,101,253,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-06,Hawaii,26,1997,,759,141,677,3600,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-06,Idaho,27,6401,,2547,242,1640,10857,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-06,Illinois,250,8465,,5252,962,4373,19302,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-06,Indiana,161,7175,,4149,683,3181,15349,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-06,Iowa,50,2986,,1669,385,1489,6579,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-06,Kansas,68,3368,,1924,281,1521,7162,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-06,Kentucky,71,4541,,2572,376,2019,9579,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-06,Louisiana,59,2618,,1693,319,1347,6036,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-06,Maine,38,1830,,1263,202,1092,4425,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-06,Maryland,100,4750,,2776,528,2673,10827,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-06,Massachusetts,146,5756,,3450,637,3272,13261,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-06,Michigan,169,9714,,5335,940,4676,20834,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-06,Minnesota,104,5197,,2962,571,2514,11348,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-06,Mississippi,21,2133,,1346,214,1257,4971,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-06,Missouri,94,7427,,3851,601,3095,15068,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-06,Montana,27,2250,,1175,165,832,4449,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-06,Nebraska,26,1695,,1027,216,759,3723,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-06,Nevada,38,4429,,1871,310,1542,8190,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-06,New Hampshire,51,2414,,1504,251,1500,5720,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-06,New Jersey,189,5889,,3177,679,3063,12997,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-06,New Mexico,27,3161,,1461,258,1326,6233,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-06,New York,384,11635,,6705,1310,5935,25969,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-06,North Carolina,141,10320,,5900,973,5151,22485,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-06,North Dakota,9,728,,418,61,303,1519,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-06,Ohio,308,12176,,7361,1246,6111,27202,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-06,Oklahoma,44,4975,,2525,357,1970,9871,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-06,Oregon,93,11186,,4923,670,3596,20468,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-06,Pennsylvania,265,10517,,6293,1255,5596,23926,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-06,Puerto Rico,99,2974,,1191,166,720,5150,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-06,Rhode Island,20,837,,482,87,459,1885,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-06,South Carolina,53,4680,,2736,443,2380,10292,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-06,South Dakota,16,906,,590,115,499,2126,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-06,Tennessee,109,9345,,5224,781,4414,19873,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-06,Texas,281,26570,,13316,2171,11225,53563,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-06,Utah,35,12620,,3283,294,2157,18389,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-06,Vermont,13,960,,524,101,495,2093,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-06,Virgin Islands,,121,,70,11,52,254,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-06,Virginia,170,9353,,5310,895,4839,20567,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-06,Washington,178,18629,,8055,1090,5723,33675,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-06,West Virginia,40,3034,,1447,198,1260,5979,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
2024-04-06,Wisconsin,88,4771,,3188,541,2576,11164,,,,,,,,ARRL FCC License Counts,http://www.arrl.org/fcc-license-counts
|
||||
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 |
BIN
plots/cities-over-time-freey.png
Normal file
After Width: | Height: | Size: 1.1 MiB |
BIN
plots/cities-over-time.png
Normal file
After Width: | Height: | Size: 1.1 MiB |
BIN
plots/class-over-time-2-years.png
Normal file
After Width: | Height: | Size: 216 KiB |
BIN
plots/class-over-time-facet.png
Normal file
After Width: | Height: | Size: 642 KiB |
BIN
plots/class-over-time-stacked.png
Normal file
After Width: | Height: | Size: 198 KiB |
BIN
plots/class-over-time.png
Normal file
After Width: | Height: | Size: 615 KiB |
BIN
plots/states-over-time-freey.png
Normal file
After Width: | Height: | Size: 1.4 MiB |
BIN
plots/total-over-time-2-months.png
Normal file
After Width: | Height: | Size: 152 KiB |
BIN
plots/total-over-time-2-years.png
Normal file
After Width: | Height: | Size: 148 KiB |
BIN
plots/total-over-time-2000.png
Normal file
After Width: | Height: | Size: 185 KiB |
1952
plots/total-over-time-y.html
Normal file
BIN
plots/total-over-time-y.png
Normal file
After Width: | Height: | Size: 176 KiB |