diff --git a/Makefile b/Makefile
index 00660d8..38ba8e2 100644
--- a/Makefile
+++ b/Makefile
@@ -22,7 +22,7 @@ check_all:
${RSCRIPT} -e "library(methods); devtools::check(cran=TRUE)"
README.md: README.Rmd
- Rscript -e 'library(methods); devtools::load_all(); rmarkdown::render("README.Rmd", output="README.md")'
+ Rscript -e 'library(methods); devtools::load_all(); rmarkdown::render("README.Rmd", output_file="README.md")'
sed -i.bak 's/[[:space:]]*$$//' $@
rm -f $@.bak
diff --git a/README.Rmd b/README.Rmd
index 2bd5c65..9be611e 100644
--- a/README.Rmd
+++ b/README.Rmd
@@ -2,7 +2,7 @@
title: "speedtest"
output:
github_document:
- html_preview: false
+ html_preview: true
---
```{r include=FALSE}
knitr::opts_chunk$set(cache=TRUE, message=FALSE, warning=FALSE, error=FALSE, fig.retina=2)
diff --git a/README.html b/README.html
new file mode 100644
index 0000000..87f0532
--- /dev/null
+++ b/README.html
@@ -0,0 +1,829 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+speedtest
+Tools to Test and Compare Internet Bandwidth Speeds
+Description
+The ‘Ookla’ ‘Speedtest’ site http://beta.speedtest.net/about provides interactive and programmatic services to test and compare bandwidth speeds from a source node on the Internet to thousands of test servers. Tools are provided to obtain test server lists, identify target servers for testing and performing speed/bandwidth tests.
+What’s Inside The Tin
+The following functions are implemented:
+
+spd_best_servers
: Find “best” servers (latency-wise) from master server list
+spd_closest_servers
: Find “closest” servers (geography-wise) from master server list
+spd_compute_bandwidth
: Compute bandwidth from bytes transferred and time taken
+spd_config
: Retrieve client configuration information for the speedtest
+spd_download_test
: Perform a download speed/bandwidth test
+spd_servers
: Retrieve a list of SpeedTest servers
+spd_upload_test
: Perform an upload speed/bandwidth test
+spd_test
: Test your internet speed/bandwidth
+
+Make a CLI utility
+While you can run spd_test()
from an R console, it was desgined to be an easily wrapped into a bash
(et al) alias or put into a small batch script. Or, you can just type out the following if you’re fleet-of-finger/have dexterous digits:
+Rscript --quiet -e 'speedtest::spd_test()'
+
+which will look something like:
+
+TODO
+Folks interested in contributing can take a look at the TODOs and pick as many as you like! Ones with question marks are truly a “I dunno if we shld” kinda thing. Ones with exclamation marks are essentials.
+
+- [ ] Cache config in memory at startup vs pass around to functions?
+- [ ] Figure out how to use beta sockets hidden API vs the old Flash API?
+- [ ] Ensure the efficacy of relying on the cURL timings for speed measures for the Flash API
+- [ ] Figure out best way to capture the results for post-processing
+- [ ] Upload results to speedtest (tis only fair)!
+- [ ] Incorporate more network or host measures for better statistical determination of the best target!
+- [ ]
autoplot
support!
+- [ ] RStudio Add-in
+- [ ] Shiny app?
+
+Installation
+devtools::install_github("hrbrmstr/speedtest")
+options(width=120)
+Usage
+library(speedtest)
+library(stringi)
+library(hrbrthemes)
+library(ggbeeswarm)
+library(tidyverse)
+
+# current verison
+packageVersion("speedtest")
+## [1] '0.1.0'
+
+Download Speed
+config <- spd_config()
+
+servers <- spd_servers(config=config)
+closest_servers <- spd_closest_servers(servers, config=config)
+only_the_best_severs <- spd_best_servers(closest_servers, config)
+Individual download tests
+glimpse(spd_download_test(closest_servers[1,], config=config))
+## Observations: 1
+## Variables: 15
+## $ url <chr> "http://speed0.xcelx.net/speedtest/upload.php"
+## $ lat <dbl> 42.3875
+## $ lng <dbl> -71.1
+## $ name <chr> "Somerville, MA"
+## $ country <chr> "United States"
+## $ cc <chr> "US"
+## $ sponsor <chr> "Axcelx Technologies LLC"
+## $ id <chr> "5960"
+## $ host <chr> "speed0.xcelx.net:8080"
+## $ url2 <chr> "http://speed1.xcelx.net/speedtest/upload.php"
+## $ min <dbl> 14.40439
+## $ mean <dbl> 60.06834
+## $ median <dbl> 55.28457
+## $ max <dbl> 127.9436
+## $ sd <dbl> 34.20695
+
+glimpse(spd_download_test(only_the_best_severs[1,], config=config))
+## Observations: 1
+## Variables: 18
+## $ ping_time <dbl> 0.02712567
+## $ total_time <dbl> 0.059917
+## $ retrieval_time <dbl> 2.3e-05
+## $ url <chr> "http://speed0.xcelx.net/speedtest/upload.php"
+## $ lat <dbl> 42.3875
+## $ lng <dbl> -71.1
+## $ name <chr> "Somerville, MA"
+## $ country <chr> "United States"
+## $ cc <chr> "US"
+## $ sponsor <chr> "Axcelx Technologies LLC"
+## $ id <chr> "5960"
+## $ host <chr> "speed0.xcelx.net:8080"
+## $ url2 <chr> "http://speed1.xcelx.net/speedtest/upload.php"
+## $ min <dbl> 14.64922
+## $ mean <dbl> 56.15303
+## $ median <dbl> 51.89162
+## $ max <dbl> 107.5084
+## $ sd <dbl> 31.8866
+
+Individual upload tests
+glimpse(spd_upload_test(only_the_best_severs[1,], config=config))
+## Observations: 1
+## Variables: 18
+## $ ping_time <dbl> 0.02712567
+## $ total_time <dbl> 0.059917
+## $ retrieval_time <dbl> 2.3e-05
+## $ url <chr> "http://speed0.xcelx.net/speedtest/upload.php"
+## $ lat <dbl> 42.3875
+## $ lng <dbl> -71.1
+## $ name <chr> "Somerville, MA"
+## $ country <chr> "United States"
+## $ cc <chr> "US"
+## $ sponsor <chr> "Axcelx Technologies LLC"
+## $ id <chr> "5960"
+## $ host <chr> "speed0.xcelx.net:8080"
+## $ url2 <chr> "http://speed1.xcelx.net/speedtest/upload.php"
+## $ min <dbl> 6.240858
+## $ mean <dbl> 9.527599
+## $ median <dbl> 9.303148
+## $ max <dbl> 12.56686
+## $ sd <dbl> 2.451778
+
+glimpse(spd_upload_test(closest_servers[1,], config=config))
+## Observations: 1
+## Variables: 15
+## $ url <chr> "http://speed0.xcelx.net/speedtest/upload.php"
+## $ lat <dbl> 42.3875
+## $ lng <dbl> -71.1
+## $ name <chr> "Somerville, MA"
+## $ country <chr> "United States"
+## $ cc <chr> "US"
+## $ sponsor <chr> "Axcelx Technologies LLC"
+## $ id <chr> "5960"
+## $ host <chr> "speed0.xcelx.net:8080"
+## $ url2 <chr> "http://speed1.xcelx.net/speedtest/upload.php"
+## $ min <dbl> 6.764702
+## $ mean <dbl> 9.896179
+## $ median <dbl> 10.3605
+## $ max <dbl> 12.85389
+## $ sd <dbl> 2.359868
+
+Moar download tests
+Choose closest, “best” and randomly (there can be, and are, some dups as a result for best/closest), run the test and chart the results. This will show just how disparate the results are from these core/crude tests. Most of the test servers compensate when they present the results. Newer, “socket”-based tests are more accurate but there are no free/hidden exposed APIs yet for most of them.
+set.seed(8675309)
+
+bind_rows(
+
+ closest_servers[1:3,] %>%
+ mutate(type="closest"),
+
+ only_the_best_severs[1:3,] %>%
+ mutate(type="best"),
+
+ filter(servers, !(id %in% c(closest_servers[1:3,]$id, only_the_best_severs[1:3,]$id))) %>%
+ sample_n(3) %>%
+ mutate(type="random")
+
+) %>%
+ group_by(type) %>%
+ ungroup() -> to_compare
+
+select(to_compare, sponsor, name, country, host, type)
+## # A tibble: 9 x 5
+## sponsor name country
+## <chr> <chr> <chr>
+## 1 Axcelx Technologies LLC Somerville, MA United States
+## 2 Comcast Boston, MA United States
+## 3 Starry, Inc. Boston, MA United States
+## 4 Axcelx Technologies LLC Somerville, MA United States
+## 5 Norwood Light Broadband Norwood, MA United States
+## 6 CCI - New England Providence, RI United States
+## 7 PirxNet Gliwice Poland
+## 8 Interoute VDC Los Angeles, CA United States
+## 9 UNPAD Bandung Indonesia
+## # ... with 2 more variables: host <chr>, type <chr>
+
+map_df(1:nrow(to_compare), ~{
+ spd_download_test(to_compare[.x,], config=config, summarise=FALSE, timeout=30)
+}) -> dl_results_full
+mutate(dl_results_full, type=stri_trans_totitle(type)) %>%
+ ggplot(aes(type, bw, fill=type)) +
+ geom_quasirandom(aes(size=size, color=type), width=0.15, shape=21, stroke=0.25) +
+ scale_y_continuous(expand=c(0,5), labels=c(sprintf("%s", seq(0,150,50)), "200 Mb/s"), limits=c(0,200)) +
+ scale_size(range=c(2,6)) +
+ scale_color_manual(values=c(Random="#b2b2b2", Best="#2b2b2b", Closest="#2b2b2b")) +
+ scale_fill_ipsum() +
+ labs(x=NULL, y=NULL, title="Download bandwidth test by selected server type",
+ subtitle="Circle size scaled by size of file used in that speed test") +
+ theme_ipsum_rc(grid="Y") +
+ theme(legend.position="none")
+
+
+Moar upload tests
+Choose closest and “best” and filter duplicates out since we’re really trying to measure here vs show the disparity:
+bind_rows(
+ closest_servers[1:3,] %>% mutate(type="closest"),
+ only_the_best_severs[1:3,] %>% mutate(type="best")
+) %>%
+ distinct(.keep_all=TRUE) -> to_compare
+
+select(to_compare, sponsor, name, country, host, type)
+## # A tibble: 6 x 5
+## sponsor name country
+## <chr> <chr> <chr>
+## 1 Axcelx Technologies LLC Somerville, MA United States
+## 2 Comcast Boston, MA United States
+## 3 Starry, Inc. Boston, MA United States
+## 4 Axcelx Technologies LLC Somerville, MA United States
+## 5 Norwood Light Broadband Norwood, MA United States
+## 6 CCI - New England Providence, RI United States
+## # ... with 2 more variables: host <chr>, type <chr>
+
+map_df(1:nrow(to_compare), ~{
+ spd_upload_test(to_compare[.x,], config=config, summarise=FALSE, timeout=30)
+}) -> ul_results_full
+ggplot(ul_results_full, aes(x="Upload Test", y=bw)) +
+ geom_quasirandom(aes(size=size, fill="col"), width=0.1, shape=21, stroke=0.25, color="#2b2b2b") +
+ scale_y_continuous(expand=c(0,0.5), breaks=seq(0,16,4),
+ labels=c(sprintf("%s", seq(0,12,4)), "16 Mb/s"), limits=c(0,16)) +
+ scale_size(range=c(2,6)) +
+ scale_fill_ipsum() +
+ labs(x=NULL, y=NULL, title="Upload bandwidth test by selected server type",
+ subtitle="Circle size scaled by size of file used in that speed test") +
+ theme_ipsum_rc(grid="Y") +
+ theme(legend.position="none")
+
+
+Code of Conduct
+Please note that this project is released with a Contributor Code of Conduct. By participating in this project you agree to abide by its terms.
+
+
+
diff --git a/README.md b/README.md
index 41ab55e..dae81ab 100644
--- a/README.md
+++ b/README.md
@@ -26,6 +26,20 @@ The following functions are implemented:
- `spd_download_test`: Perform a download speed/bandwidth test
- `spd_servers`: Retrieve a list of SpeedTest servers
- `spd_upload_test`: Perform an upload speed/bandwidth test
+ - `spd_test`: Test your internet speed/bandwidth
+
+## Make a CLI utility
+
+While you can run `spd_test()` from an R console, it was desgined to be
+an easily wrapped into a `bash` (et al) alias or put into a small batch
+script. Or, you can just type out the following if you’re
+fleet-of-finger/have dexterous digits:
+
+ Rscript --quiet -e 'speedtest::spd_test()'
+
+which will look something like:
+
+![](imgs/spdtst.gif)
## TODO
@@ -44,7 +58,6 @@ we shld” kinda thing. Ones with exclamation marks are essentials.
statistical determination of the best target\!
- \[ \] `autoplot` support\!
- \[ \] RStudio Add-in
- - \[ \] CLI wrapper
- \[ \] Shiny app?
## Installation
@@ -53,6 +66,10 @@ we shld” kinda thing. Ones with exclamation marks are essentials.
devtools::install_github("hrbrmstr/speedtest")
```
+``` r
+options(width=120)
+```
+
## Usage
``` r
@@ -96,11 +113,11 @@ glimpse(spd_download_test(closest_servers[1,], config=config))
## $ id "5960"
## $ host "speed0.xcelx.net:8080"
## $ url2 "http://speed1.xcelx.net/speedtest/upload.php"
- ## $ min 15.08594
- ## $ mean 72.25247
- ## $ median 77.6195
- ## $ max 126.3629
- ## $ sd 42.88343
+ ## $ min 14.40439
+ ## $ mean 60.06834
+ ## $ median 55.28457
+ ## $ max 127.9436
+ ## $ sd 34.20695
``` r
glimpse(spd_download_test(only_the_best_severs[1,], config=config))
@@ -108,24 +125,24 @@ glimpse(spd_download_test(only_the_best_severs[1,], config=config))
## Observations: 1
## Variables: 18
- ## $ ping_time 0.036793
- ## $ total_time 0.06847
- ## $ retrieval_time 1.5e-05
- ## $ url "http://speedtest.norwoodlight.com/speedtest/upload.php"
- ## $ lat 42.1944
- ## $ lng -71.2
- ## $ name "Norwood, MA"
+ ## $ ping_time 0.02712567
+ ## $ total_time 0.059917
+ ## $ retrieval_time 2.3e-05
+ ## $ url "http://speed0.xcelx.net/speedtest/upload.php"
+ ## $ lat 42.3875
+ ## $ lng -71.1
+ ## $ name "Somerville, MA"
## $ country "United States"
## $ cc "US"
- ## $ sponsor "Norwood Light Broadband"
- ## $ id "4920"
- ## $ host "speedtest.norwoodlight.com:8080"
- ## $ url2 "http://netgauge.norwoodlight.com/speedtest/upload.php"
- ## $ min 10.0315
- ## $ mean 65.53074
- ## $ median 29.70143
- ## $ max 169.5498
- ## $ sd 62.35961
+ ## $ sponsor "Axcelx Technologies LLC"
+ ## $ id "5960"
+ ## $ host "speed0.xcelx.net:8080"
+ ## $ url2 "http://speed1.xcelx.net/speedtest/upload.php"
+ ## $ min 14.64922
+ ## $ mean 56.15303
+ ## $ median 51.89162
+ ## $ max 107.5084
+ ## $ sd 31.8866
### Individual upload tests
@@ -135,24 +152,24 @@ glimpse(spd_upload_test(only_the_best_severs[1,], config=config))
## Observations: 1
## Variables: 18
- ## $ ping_time 0.036793
- ## $ total_time 0.06847
- ## $ retrieval_time 1.5e-05
- ## $ url "http://speedtest.norwoodlight.com/speedtest/upload.php"
- ## $ lat 42.1944
- ## $ lng -71.2
- ## $ name "Norwood, MA"
+ ## $ ping_time 0.02712567
+ ## $ total_time 0.059917
+ ## $ retrieval_time 2.3e-05
+ ## $ url "http://speed0.xcelx.net/speedtest/upload.php"
+ ## $ lat 42.3875
+ ## $ lng -71.1
+ ## $ name "Somerville, MA"
## $ country "United States"
## $ cc "US"
- ## $ sponsor "Norwood Light Broadband"
- ## $ id "4920"
- ## $ host "speedtest.norwoodlight.com:8080"
- ## $ url2 "http://netgauge.norwoodlight.com/speedtest/upload.php"
- ## $ min 6.855551
- ## $ mean 8.643362
- ## $ median 8.680511
- ## $ max 10.2592
- ## $ sd 1.52269
+ ## $ sponsor "Axcelx Technologies LLC"
+ ## $ id "5960"
+ ## $ host "speed0.xcelx.net:8080"
+ ## $ url2 "http://speed1.xcelx.net/speedtest/upload.php"
+ ## $ min 6.240858
+ ## $ mean 9.527599
+ ## $ median 9.303148
+ ## $ max 12.56686
+ ## $ sd 2.451778
``` r
glimpse(spd_upload_test(closest_servers[1,], config=config))
@@ -170,11 +187,11 @@ glimpse(spd_upload_test(closest_servers[1,], config=config))
## $ id "5960"
## $ host "speed0.xcelx.net:8080"
## $ url2 "http://speed1.xcelx.net/speedtest/upload.php"
- ## $ min 3.505325
- ## $ mean 6.558145
- ## $ median 7.087147
- ## $ max 9.341766
- ## $ sd 2.102159
+ ## $ min 6.764702
+ ## $ mean 9.896179
+ ## $ median 10.3605
+ ## $ max 12.85389
+ ## $ sd 2.359868
### Moar download tests
@@ -208,17 +225,18 @@ select(to_compare, sponsor, name, country, host, type)
```
## # A tibble: 9 x 5
- ## sponsor name country host type
- ##
- ## 1 Axcelx Technologies LLC Somerville, MA United States speed0.xcelx.net:8080 closest
- ## 2 Comcast Boston, MA United States stosat-ndhm-01.sys.comcast.net:8080 closest
- ## 3 Starry, Inc. Boston, MA United States speedtest-server.starry.com:8080 closest
- ## 4 Norwood Light Broadband Norwood, MA United States speedtest.norwoodlight.com:8080 best
- ## 5 vzalpha Waltham, MA United States pdi-ookla2.vzalpha.com:8080 best
- ## 6 BELD Broadband Braintree, MA United States wotan.beld.net:8080 best
- ## 7 SowNet Gliwice Poland speedtest.sownet.pl:8080 random
- ## 8 SingTel Los Angeles, CA United States speedtest-la.singnet.com.sg:8080 random
- ## 9 StarNet Bandung Indonesia speedtest.starnet.net.id:8080 random
+ ## sponsor name country
+ ##
+ ## 1 Axcelx Technologies LLC Somerville, MA United States
+ ## 2 Comcast Boston, MA United States
+ ## 3 Starry, Inc. Boston, MA United States
+ ## 4 Axcelx Technologies LLC Somerville, MA United States
+ ## 5 Norwood Light Broadband Norwood, MA United States
+ ## 6 CCI - New England Providence, RI United States
+ ## 7 PirxNet Gliwice Poland
+ ## 8 Interoute VDC Los Angeles, CA United States
+ ## 9 UNPAD Bandung Indonesia
+ ## # ... with 2 more variables: host , type
``` r
map_df(1:nrow(to_compare), ~{
@@ -240,7 +258,7 @@ mutate(dl_results_full, type=stri_trans_totitle(type)) %>%
theme(legend.position="none")
```
-![](README_files/figure-gfm/unnamed-chunk-9-1.png)
+
### Moar upload tests
@@ -258,14 +276,15 @@ select(to_compare, sponsor, name, country, host, type)
```
## # A tibble: 6 x 5
- ## sponsor name country host type
- ##
- ## 1 Axcelx Technologies LLC Somerville, MA United States speed0.xcelx.net:8080 closest
- ## 2 Comcast Boston, MA United States stosat-ndhm-01.sys.comcast.net:8080 closest
- ## 3 Starry, Inc. Boston, MA United States speedtest-server.starry.com:8080 closest
- ## 4 Norwood Light Broadband Norwood, MA United States speedtest.norwoodlight.com:8080 best
- ## 5 vzalpha Waltham, MA United States pdi-ookla2.vzalpha.com:8080 best
- ## 6 BELD Broadband Braintree, MA United States wotan.beld.net:8080 best
+ ## sponsor name country
+ ##
+ ## 1 Axcelx Technologies LLC Somerville, MA United States
+ ## 2 Comcast Boston, MA United States
+ ## 3 Starry, Inc. Boston, MA United States
+ ## 4 Axcelx Technologies LLC Somerville, MA United States
+ ## 5 Norwood Light Broadband Norwood, MA United States
+ ## 6 CCI - New England Providence, RI United States
+ ## # ... with 2 more variables: host , type
``` r
map_df(1:nrow(to_compare), ~{
@@ -286,7 +305,7 @@ ggplot(ul_results_full, aes(x="Upload Test", y=bw)) +
theme(legend.position="none")
```
-![](README_files/figure-gfm/unnamed-chunk-11-1.png)
+
## Code of Conduct
diff --git a/README_cache/gfm/unnamed-chunk-10_4d98d1659e285abd58b2e63521be5f01.RData b/README_cache/gfm/unnamed-chunk-10_4d98d1659e285abd58b2e63521be5f01.RData
deleted file mode 100644
index c78f26b..0000000
Binary files a/README_cache/gfm/unnamed-chunk-10_4d98d1659e285abd58b2e63521be5f01.RData and /dev/null differ
diff --git a/README_cache/gfm/unnamed-chunk-10_e8754b5b331ba823e763a65b62d6a4df.RData b/README_cache/gfm/unnamed-chunk-10_e8754b5b331ba823e763a65b62d6a4df.RData
new file mode 100644
index 0000000..86d083e
Binary files /dev/null and b/README_cache/gfm/unnamed-chunk-10_e8754b5b331ba823e763a65b62d6a4df.RData differ
diff --git a/README_cache/gfm/unnamed-chunk-7_be30a4052cd886d3cd693fdb7d88514b.rdb b/README_cache/gfm/unnamed-chunk-10_e8754b5b331ba823e763a65b62d6a4df.rdb
similarity index 100%
rename from README_cache/gfm/unnamed-chunk-7_be30a4052cd886d3cd693fdb7d88514b.rdb
rename to README_cache/gfm/unnamed-chunk-10_e8754b5b331ba823e763a65b62d6a4df.rdb
diff --git a/README_cache/gfm/unnamed-chunk-7_be30a4052cd886d3cd693fdb7d88514b.rdx b/README_cache/gfm/unnamed-chunk-10_e8754b5b331ba823e763a65b62d6a4df.rdx
similarity index 100%
rename from README_cache/gfm/unnamed-chunk-7_be30a4052cd886d3cd693fdb7d88514b.rdx
rename to README_cache/gfm/unnamed-chunk-10_e8754b5b331ba823e763a65b62d6a4df.rdx
diff --git a/README_cache/gfm/unnamed-chunk-11_39b45efd40b24f84231df0d94958feec.RData b/README_cache/gfm/unnamed-chunk-11_39b45efd40b24f84231df0d94958feec.RData
deleted file mode 100644
index 25d6585..0000000
Binary files a/README_cache/gfm/unnamed-chunk-11_39b45efd40b24f84231df0d94958feec.RData and /dev/null differ
diff --git a/README_cache/gfm/unnamed-chunk-11_39b45efd40b24f84231df0d94958feec.rdb b/README_cache/gfm/unnamed-chunk-11_39b45efd40b24f84231df0d94958feec.rdb
deleted file mode 100644
index 2be1980..0000000
Binary files a/README_cache/gfm/unnamed-chunk-11_39b45efd40b24f84231df0d94958feec.rdb and /dev/null differ
diff --git a/README_cache/gfm/unnamed-chunk-11_39b45efd40b24f84231df0d94958feec.rdx b/README_cache/gfm/unnamed-chunk-11_39b45efd40b24f84231df0d94958feec.rdx
deleted file mode 100644
index 81623e5..0000000
Binary files a/README_cache/gfm/unnamed-chunk-11_39b45efd40b24f84231df0d94958feec.rdx and /dev/null differ
diff --git a/README_cache/gfm/unnamed-chunk-11_7def8c4e0574346221b17493aa83ccd1.RData b/README_cache/gfm/unnamed-chunk-11_7def8c4e0574346221b17493aa83ccd1.RData
new file mode 100644
index 0000000..48696b9
Binary files /dev/null and b/README_cache/gfm/unnamed-chunk-11_7def8c4e0574346221b17493aa83ccd1.RData differ
diff --git a/README_cache/gfm/unnamed-chunk-11_7def8c4e0574346221b17493aa83ccd1.rdb b/README_cache/gfm/unnamed-chunk-11_7def8c4e0574346221b17493aa83ccd1.rdb
new file mode 100644
index 0000000..ad15c31
Binary files /dev/null and b/README_cache/gfm/unnamed-chunk-11_7def8c4e0574346221b17493aa83ccd1.rdb differ
diff --git a/README_cache/gfm/unnamed-chunk-11_7def8c4e0574346221b17493aa83ccd1.rdx b/README_cache/gfm/unnamed-chunk-11_7def8c4e0574346221b17493aa83ccd1.rdx
new file mode 100644
index 0000000..463df2c
Binary files /dev/null and b/README_cache/gfm/unnamed-chunk-11_7def8c4e0574346221b17493aa83ccd1.rdx differ
diff --git a/README_cache/gfm/unnamed-chunk-12_3e0d1e073d3190e79d40300a41b9847f.RData b/README_cache/gfm/unnamed-chunk-12_3e0d1e073d3190e79d40300a41b9847f.RData
deleted file mode 100644
index e39594f..0000000
Binary files a/README_cache/gfm/unnamed-chunk-12_3e0d1e073d3190e79d40300a41b9847f.RData and /dev/null differ
diff --git a/README_cache/gfm/unnamed-chunk-12_4aea996115d1adb3628289f0593b852d.RData b/README_cache/gfm/unnamed-chunk-12_4aea996115d1adb3628289f0593b852d.RData
new file mode 100644
index 0000000..c663a6e
Binary files /dev/null and b/README_cache/gfm/unnamed-chunk-12_4aea996115d1adb3628289f0593b852d.RData differ
diff --git a/README_cache/gfm/unnamed-chunk-6_0c85fb28e508cb26554f94f8ddf73552.rdb b/README_cache/gfm/unnamed-chunk-12_4aea996115d1adb3628289f0593b852d.rdb
similarity index 100%
rename from README_cache/gfm/unnamed-chunk-6_0c85fb28e508cb26554f94f8ddf73552.rdb
rename to README_cache/gfm/unnamed-chunk-12_4aea996115d1adb3628289f0593b852d.rdb
diff --git a/README_cache/gfm/unnamed-chunk-6_0c85fb28e508cb26554f94f8ddf73552.rdx b/README_cache/gfm/unnamed-chunk-12_4aea996115d1adb3628289f0593b852d.rdx
similarity index 100%
rename from README_cache/gfm/unnamed-chunk-6_0c85fb28e508cb26554f94f8ddf73552.rdx
rename to README_cache/gfm/unnamed-chunk-12_4aea996115d1adb3628289f0593b852d.rdx
diff --git a/README_cache/gfm/unnamed-chunk-2_44beb6ecb7c370fc7485c585cf493f0c.RData b/README_cache/gfm/unnamed-chunk-2_44beb6ecb7c370fc7485c585cf493f0c.RData
deleted file mode 100644
index 1c7932c..0000000
Binary files a/README_cache/gfm/unnamed-chunk-2_44beb6ecb7c370fc7485c585cf493f0c.RData and /dev/null differ
diff --git a/README_cache/gfm/unnamed-chunk-2_5b0ba01bb43aefa1232c8b724a6601e4.RData b/README_cache/gfm/unnamed-chunk-2_5b0ba01bb43aefa1232c8b724a6601e4.RData
new file mode 100644
index 0000000..9eeec78
Binary files /dev/null and b/README_cache/gfm/unnamed-chunk-2_5b0ba01bb43aefa1232c8b724a6601e4.RData differ
diff --git a/README_cache/gfm/unnamed-chunk-3_ab442556d166aa13ea2e9166ec787eb1.rdb b/README_cache/gfm/unnamed-chunk-2_5b0ba01bb43aefa1232c8b724a6601e4.rdb
similarity index 100%
rename from README_cache/gfm/unnamed-chunk-3_ab442556d166aa13ea2e9166ec787eb1.rdb
rename to README_cache/gfm/unnamed-chunk-2_5b0ba01bb43aefa1232c8b724a6601e4.rdb
diff --git a/README_cache/gfm/unnamed-chunk-3_ab442556d166aa13ea2e9166ec787eb1.rdx b/README_cache/gfm/unnamed-chunk-2_5b0ba01bb43aefa1232c8b724a6601e4.rdx
similarity index 100%
rename from README_cache/gfm/unnamed-chunk-3_ab442556d166aa13ea2e9166ec787eb1.rdx
rename to README_cache/gfm/unnamed-chunk-2_5b0ba01bb43aefa1232c8b724a6601e4.rdx
diff --git a/README_cache/gfm/unnamed-chunk-3_ab442556d166aa13ea2e9166ec787eb1.RData b/README_cache/gfm/unnamed-chunk-3_ab442556d166aa13ea2e9166ec787eb1.RData
deleted file mode 100644
index 7872c7d..0000000
Binary files a/README_cache/gfm/unnamed-chunk-3_ab442556d166aa13ea2e9166ec787eb1.RData and /dev/null differ
diff --git a/README_cache/gfm/unnamed-chunk-3_c2d6adad80c87c748cd07e4fbf805a99.RData b/README_cache/gfm/unnamed-chunk-3_c2d6adad80c87c748cd07e4fbf805a99.RData
new file mode 100644
index 0000000..0e4d8e5
Binary files /dev/null and b/README_cache/gfm/unnamed-chunk-3_c2d6adad80c87c748cd07e4fbf805a99.RData differ
diff --git a/README_cache/gfm/unnamed-chunk-2_44beb6ecb7c370fc7485c585cf493f0c.rdb b/README_cache/gfm/unnamed-chunk-3_c2d6adad80c87c748cd07e4fbf805a99.rdb
similarity index 100%
rename from README_cache/gfm/unnamed-chunk-2_44beb6ecb7c370fc7485c585cf493f0c.rdb
rename to README_cache/gfm/unnamed-chunk-3_c2d6adad80c87c748cd07e4fbf805a99.rdb
diff --git a/README_cache/gfm/unnamed-chunk-2_44beb6ecb7c370fc7485c585cf493f0c.rdx b/README_cache/gfm/unnamed-chunk-3_c2d6adad80c87c748cd07e4fbf805a99.rdx
similarity index 100%
rename from README_cache/gfm/unnamed-chunk-2_44beb6ecb7c370fc7485c585cf493f0c.rdx
rename to README_cache/gfm/unnamed-chunk-3_c2d6adad80c87c748cd07e4fbf805a99.rdx
diff --git a/README_cache/gfm/unnamed-chunk-5_08af825d6f4cb3312e5f922882aff56f.RData b/README_cache/gfm/unnamed-chunk-5_08af825d6f4cb3312e5f922882aff56f.RData
new file mode 100644
index 0000000..0491bf8
Binary files /dev/null and b/README_cache/gfm/unnamed-chunk-5_08af825d6f4cb3312e5f922882aff56f.RData differ
diff --git a/README_cache/gfm/unnamed-chunk-5_08af825d6f4cb3312e5f922882aff56f.rdb b/README_cache/gfm/unnamed-chunk-5_08af825d6f4cb3312e5f922882aff56f.rdb
new file mode 100644
index 0000000..2b5aca2
Binary files /dev/null and b/README_cache/gfm/unnamed-chunk-5_08af825d6f4cb3312e5f922882aff56f.rdb differ
diff --git a/README_cache/gfm/unnamed-chunk-5_08af825d6f4cb3312e5f922882aff56f.rdx b/README_cache/gfm/unnamed-chunk-5_08af825d6f4cb3312e5f922882aff56f.rdx
new file mode 100644
index 0000000..b63131f
Binary files /dev/null and b/README_cache/gfm/unnamed-chunk-5_08af825d6f4cb3312e5f922882aff56f.rdx differ
diff --git a/README_cache/gfm/unnamed-chunk-5_38a84ac6249d2b3cbc6790bd447d8f38.RData b/README_cache/gfm/unnamed-chunk-5_38a84ac6249d2b3cbc6790bd447d8f38.RData
deleted file mode 100644
index c8a6df3..0000000
Binary files a/README_cache/gfm/unnamed-chunk-5_38a84ac6249d2b3cbc6790bd447d8f38.RData and /dev/null differ
diff --git a/README_cache/gfm/unnamed-chunk-5_38a84ac6249d2b3cbc6790bd447d8f38.rdb b/README_cache/gfm/unnamed-chunk-5_38a84ac6249d2b3cbc6790bd447d8f38.rdb
deleted file mode 100644
index 88976f2..0000000
Binary files a/README_cache/gfm/unnamed-chunk-5_38a84ac6249d2b3cbc6790bd447d8f38.rdb and /dev/null differ
diff --git a/README_cache/gfm/unnamed-chunk-5_38a84ac6249d2b3cbc6790bd447d8f38.rdx b/README_cache/gfm/unnamed-chunk-5_38a84ac6249d2b3cbc6790bd447d8f38.rdx
deleted file mode 100644
index 4fb1f03..0000000
Binary files a/README_cache/gfm/unnamed-chunk-5_38a84ac6249d2b3cbc6790bd447d8f38.rdx and /dev/null differ
diff --git a/README_cache/gfm/unnamed-chunk-6_0c85fb28e508cb26554f94f8ddf73552.RData b/README_cache/gfm/unnamed-chunk-6_0c85fb28e508cb26554f94f8ddf73552.RData
deleted file mode 100644
index ca6e89d..0000000
Binary files a/README_cache/gfm/unnamed-chunk-6_0c85fb28e508cb26554f94f8ddf73552.RData and /dev/null differ
diff --git a/README_cache/gfm/unnamed-chunk-6_a08421919cfedfed307e2451eebc3090.RData b/README_cache/gfm/unnamed-chunk-6_a08421919cfedfed307e2451eebc3090.RData
new file mode 100644
index 0000000..463af02
Binary files /dev/null and b/README_cache/gfm/unnamed-chunk-6_a08421919cfedfed307e2451eebc3090.RData differ
diff --git a/README_cache/gfm/unnamed-chunk-12_3e0d1e073d3190e79d40300a41b9847f.rdb b/README_cache/gfm/unnamed-chunk-6_a08421919cfedfed307e2451eebc3090.rdb
similarity index 100%
rename from README_cache/gfm/unnamed-chunk-12_3e0d1e073d3190e79d40300a41b9847f.rdb
rename to README_cache/gfm/unnamed-chunk-6_a08421919cfedfed307e2451eebc3090.rdb
diff --git a/README_cache/gfm/unnamed-chunk-12_3e0d1e073d3190e79d40300a41b9847f.rdx b/README_cache/gfm/unnamed-chunk-6_a08421919cfedfed307e2451eebc3090.rdx
similarity index 100%
rename from README_cache/gfm/unnamed-chunk-12_3e0d1e073d3190e79d40300a41b9847f.rdx
rename to README_cache/gfm/unnamed-chunk-6_a08421919cfedfed307e2451eebc3090.rdx
diff --git a/README_cache/gfm/unnamed-chunk-7_be30a4052cd886d3cd693fdb7d88514b.RData b/README_cache/gfm/unnamed-chunk-7_be30a4052cd886d3cd693fdb7d88514b.RData
deleted file mode 100644
index f4492c4..0000000
Binary files a/README_cache/gfm/unnamed-chunk-7_be30a4052cd886d3cd693fdb7d88514b.RData and /dev/null differ
diff --git a/README_cache/gfm/unnamed-chunk-7_c4f4f0b44c2fc2d6ee8870ae77830ebf.RData b/README_cache/gfm/unnamed-chunk-7_c4f4f0b44c2fc2d6ee8870ae77830ebf.RData
new file mode 100644
index 0000000..acbd3c7
Binary files /dev/null and b/README_cache/gfm/unnamed-chunk-7_c4f4f0b44c2fc2d6ee8870ae77830ebf.RData differ
diff --git a/README_cache/gfm/unnamed-chunk-10_4d98d1659e285abd58b2e63521be5f01.rdb b/README_cache/gfm/unnamed-chunk-7_c4f4f0b44c2fc2d6ee8870ae77830ebf.rdb
similarity index 100%
rename from README_cache/gfm/unnamed-chunk-10_4d98d1659e285abd58b2e63521be5f01.rdb
rename to README_cache/gfm/unnamed-chunk-7_c4f4f0b44c2fc2d6ee8870ae77830ebf.rdb
diff --git a/README_cache/gfm/unnamed-chunk-10_4d98d1659e285abd58b2e63521be5f01.rdx b/README_cache/gfm/unnamed-chunk-7_c4f4f0b44c2fc2d6ee8870ae77830ebf.rdx
similarity index 100%
rename from README_cache/gfm/unnamed-chunk-10_4d98d1659e285abd58b2e63521be5f01.rdx
rename to README_cache/gfm/unnamed-chunk-7_c4f4f0b44c2fc2d6ee8870ae77830ebf.rdx
diff --git a/README_cache/gfm/unnamed-chunk-8_589608964690a85b75a2c454d204378e.RData b/README_cache/gfm/unnamed-chunk-8_589608964690a85b75a2c454d204378e.RData
new file mode 100644
index 0000000..e44f245
Binary files /dev/null and b/README_cache/gfm/unnamed-chunk-8_589608964690a85b75a2c454d204378e.RData differ
diff --git a/README_cache/gfm/unnamed-chunk-8_589608964690a85b75a2c454d204378e.rdb b/README_cache/gfm/unnamed-chunk-8_589608964690a85b75a2c454d204378e.rdb
new file mode 100644
index 0000000..730ba8b
Binary files /dev/null and b/README_cache/gfm/unnamed-chunk-8_589608964690a85b75a2c454d204378e.rdb differ
diff --git a/README_cache/gfm/unnamed-chunk-8_589608964690a85b75a2c454d204378e.rdx b/README_cache/gfm/unnamed-chunk-8_589608964690a85b75a2c454d204378e.rdx
new file mode 100644
index 0000000..1c195a1
Binary files /dev/null and b/README_cache/gfm/unnamed-chunk-8_589608964690a85b75a2c454d204378e.rdx differ
diff --git a/README_cache/gfm/unnamed-chunk-8_bb3d1883dfa63f203c351034b7b48347.RData b/README_cache/gfm/unnamed-chunk-8_bb3d1883dfa63f203c351034b7b48347.RData
deleted file mode 100644
index 0877bbe..0000000
Binary files a/README_cache/gfm/unnamed-chunk-8_bb3d1883dfa63f203c351034b7b48347.RData and /dev/null differ
diff --git a/README_cache/gfm/unnamed-chunk-8_bb3d1883dfa63f203c351034b7b48347.rdb b/README_cache/gfm/unnamed-chunk-8_bb3d1883dfa63f203c351034b7b48347.rdb
deleted file mode 100644
index 51254bf..0000000
Binary files a/README_cache/gfm/unnamed-chunk-8_bb3d1883dfa63f203c351034b7b48347.rdb and /dev/null differ
diff --git a/README_cache/gfm/unnamed-chunk-8_bb3d1883dfa63f203c351034b7b48347.rdx b/README_cache/gfm/unnamed-chunk-8_bb3d1883dfa63f203c351034b7b48347.rdx
deleted file mode 100644
index 58ef4d3..0000000
Binary files a/README_cache/gfm/unnamed-chunk-8_bb3d1883dfa63f203c351034b7b48347.rdx and /dev/null differ
diff --git a/README_cache/gfm/unnamed-chunk-9_985a1f13399eac6c2318ad4ac811995b.rdb b/README_cache/gfm/unnamed-chunk-9_985a1f13399eac6c2318ad4ac811995b.rdb
deleted file mode 100644
index 2b4ad0f..0000000
Binary files a/README_cache/gfm/unnamed-chunk-9_985a1f13399eac6c2318ad4ac811995b.rdb and /dev/null differ
diff --git a/README_cache/gfm/unnamed-chunk-9_985a1f13399eac6c2318ad4ac811995b.rdx b/README_cache/gfm/unnamed-chunk-9_985a1f13399eac6c2318ad4ac811995b.rdx
deleted file mode 100644
index bd2e8a9..0000000
Binary files a/README_cache/gfm/unnamed-chunk-9_985a1f13399eac6c2318ad4ac811995b.rdx and /dev/null differ
diff --git a/README_cache/gfm/unnamed-chunk-9_985a1f13399eac6c2318ad4ac811995b.RData b/README_cache/gfm/unnamed-chunk-9_c2b4b56b83ed174d8c32859946fd3840.RData
similarity index 97%
rename from README_cache/gfm/unnamed-chunk-9_985a1f13399eac6c2318ad4ac811995b.RData
rename to README_cache/gfm/unnamed-chunk-9_c2b4b56b83ed174d8c32859946fd3840.RData
index 9134cdf..9cf9b55 100644
Binary files a/README_cache/gfm/unnamed-chunk-9_985a1f13399eac6c2318ad4ac811995b.RData and b/README_cache/gfm/unnamed-chunk-9_c2b4b56b83ed174d8c32859946fd3840.RData differ
diff --git a/README_cache/gfm/unnamed-chunk-9_c2b4b56b83ed174d8c32859946fd3840.rdb b/README_cache/gfm/unnamed-chunk-9_c2b4b56b83ed174d8c32859946fd3840.rdb
new file mode 100644
index 0000000..7c02803
Binary files /dev/null and b/README_cache/gfm/unnamed-chunk-9_c2b4b56b83ed174d8c32859946fd3840.rdb differ
diff --git a/README_cache/gfm/unnamed-chunk-9_c2b4b56b83ed174d8c32859946fd3840.rdx b/README_cache/gfm/unnamed-chunk-9_c2b4b56b83ed174d8c32859946fd3840.rdx
new file mode 100644
index 0000000..6240861
Binary files /dev/null and b/README_cache/gfm/unnamed-chunk-9_c2b4b56b83ed174d8c32859946fd3840.rdx differ
diff --git a/README_files/figure-gfm/unnamed-chunk-10-1.png b/README_files/figure-gfm/unnamed-chunk-10-1.png
new file mode 100644
index 0000000..2975c88
Binary files /dev/null and b/README_files/figure-gfm/unnamed-chunk-10-1.png differ
diff --git a/README_files/figure-gfm/unnamed-chunk-12-1.png b/README_files/figure-gfm/unnamed-chunk-12-1.png
new file mode 100644
index 0000000..4b42207
Binary files /dev/null and b/README_files/figure-gfm/unnamed-chunk-12-1.png differ