diff --git a/.github/workflows/release_main.yml b/.github/workflows/release_main.yml index 3adc85c3f..1e4e061b6 100644 --- a/.github/workflows/release_main.yml +++ b/.github/workflows/release_main.yml @@ -57,7 +57,7 @@ jobs: - name: Build Assets run: npm pack - name: Upload Release Asset - uses: AButler/upload-release-assets@v2.0 + uses: AButler/upload-release-assets@v3.0 with: files: "www-main-*.tgz" repo-token: ${{ secrets.GITHUB_TOKEN }} diff --git a/README.md b/README.md index e94923272..0bfae9ebb 100644 --- a/README.md +++ b/README.md @@ -83,6 +83,7 @@ As an alternative you can use Docker and Docker Compose: 1. `docker-compose up -d` to create a docker container for the current environment. 1. `docker-compose exec r bash` to jump into the container. 1. `micromamba activate www-main` to activate the environment +2. `export API_KEY=y0urAp1kEy` to add your own api key as env variable. Now you have the environment ready to start converting .Rmd blog files to html. #### Commands diff --git a/content/about/_index.md b/content/about/_index.md index fa260b7b5..61e72ac20 100644 --- a/content/about/_index.md +++ b/content/about/_index.md @@ -34,3 +34,79 @@ We're a research group based out of Carnegie Mellon University dedicated to deve ### Who is our audience? Public health authorities (federal, state, local), the healthcare industry, the public and private sectors, fellow researchers working on epidemic tracking and forecasting, data journalists, and the general public. + +### Milestones + +* **September 2023.** We were selected to be a Center of Innovation in Outbreak Analytics and Disease Modeling by the Centers for Disease Control and Prevention’s [Center for Forecasting and Outbreak Analytics](https://www.cdc.gov/forecast-outbreak-analytics/index.html). We are one of thirteen centers serving as the core of [Insight Net](https://www.cdc.gov/forecast-outbreak-analytics/partners/insightnet/index.html). + +* **March 2023.** With the sunsetting of regular COVID-19 Case reporting by both JHU CSSE and USAFacts, we are no longer focusing on case tracking and forecasting and are now prioritizing COVID and influenza-related hospitalizations, and on gearing up for tracking other circulating and emerging pathogens. + +* **February 2023.** We commenced a new project supporting the [CDC’s Center for Outbreak Forecasting and Analytics](https://www.cdc.gov/forecast-outbreak-analytics/index.html), which includes, among other goals, the prototyping of federated epidemic surveillance. + +* **September 2022.** We launched [Epidata v4](https://delphi.cmu.edu/blog/2022/12/14/introducing-epidata-v4/), prioritizing fast access to the most up-to-date data while retaining the deep data revision history needed by researchers. + +* **June 2022.** We ended data collection for the [COVID-19 Trends and Impact Survey (CTIS)](https://delphi.cmu.edu/covid19/ctis/) after more than two years, during which we received 29.5 million survey responses in the US (and [well over 100m globally](https://covidmap.umd.edu/)). + +* **April 2022.** We received the [Allen Newell Award for Research Excellence in SCS at CMU](https://www.cs.cmu.edu/events/newell-award), which is awarded annually and recognizes an outstanding body of work that epitomizes Allen Newell's research style. + +* **April 2022.** We received [the Policy Impact Award and the Warren J. Mitofsky Innovators Award from the the American Association of Public Opinion Research (AAPOR)](https://www.cs.cmu.edu/news/2022/delphi-aapor-awards), along with our partners from the University of Maryland Social Data Science Center and Meta, for our work on the [COVID-19 Trends and Impact Survey](https://delphi.cmu.edu/covid19/ctis/) (CTIS). + +* **January 2022.** We added selected signals from the White House COVID-19 Data Strategy and Execution Workgroup’s [Community Profile Report (CPR)](https://healthdata.gov/Health/COVID-19-Community-Profile-Report/gqxm-d9w9), including hospital admission and vaccination rates. This data source was discontinued in February 2023. + +* **January 2022.** After the CDC paused flu forecasting for the 2020-2021 season due to too little flu activity, we restarted generating flu forecasts for the 2021-2022 flu season. + +* **December 2021.** Our work was highlighted in a Proceedings of the National Academy of Sciences Special Feature, ["Beyond Cases and Deaths: The Benefits of Auxiliary Data Streams In Tracking the COVID-19 Pandemic"](https://www.pnas.org/topic/548) + +* **May 2021.** We received the 2021 [Statistical Partnerships Among Academe, Industry, and Government (SPAIG) award](https://www.cmu.edu/dietrich/news/news-stories/2021/may/spaig-covid.html) from the American Statistical Association (ASA) along with our COVIDcast collaborators. + +* **April 2021.** We launched our redesigned website, which included [COVIDcast 2.0](https://delphi.cmu.edu/covidcast/). + +* **March 2021.** We added PCR testing data from [COVID Act Now](https://covidactnow.org/). These data were discontinued in December 2021. + +* **January 2021.** We added signals on adult and pediatric COVID hospitalizations from the U.S. Department of Health & Human Services. In particular, we include the sum of all confirmed adult and pediatric COVID-19 hospital admissions. This sum is used as the "ground truth" for hospitalizations by the [COVID-19 Forecast Hub](https://covid19forecasthub.org/). + +* **December 2020.** We added national provisional death counts, from the National Center for Health Statistics (NCHS). [These data are](https://www.cdc.gov/nchs/nvss/vsrr/COVID19/index.htm)[ based on death certificate data received and coded by NCHS](https://www.cdc.gov/nchs/nvss/vsrr/COVID19/index.htm). + +* **December 2020.** We added inpatient and outpatient COVID-19 signals based on aggregated statistics from medical claims, provided to us by [Change Healthcare](https://www.changehealthcare.com/). + +* **November 2020.** Shifting from our original Google Health Trends data source, we added our Google Symptoms signals, which estimate the volume of searches mapped to symptom sets related to COVID-19. + +* **October 2020.** [Thirteen volunteer Googlers joined our group](https://www.cmu.edu/news/stories/archives/2020/september/covidcast-google.html) for six months via [Google.org Fellowships](https://www.google.org/our-approach/), bringing in professional experience and dramatically increasing our productivity. + +* **September 2020.** [The COVID-19 Symptom Data Challenge was launched](https://healthpolicy.duke.edu/events/covid-19-symptom-data-challenge). Sponsored by Delphi along with Meta, University of Maryland, the Duke Margolis Center for Health Policy, and Resolve to Save Lives, the Challenge asked participants to "enable earlier detection and improved situational awareness of the outbreak" using [CTIS data](https://delphi.cmu.edu/covidcast/survey-results/). + +* **August 2020.** We built upon our pre-pandemic relationship with Quidel and added signals based on positivity rates of their COVID-19 antigen tests. This data source was discontinued in August 2023. + +* **June 2020.** We added several new data sources, including: + + * Anonymized location data from mobile phones from [Safegraph](https://www.safegraph.com/). This source was discontinued in July 2022. + + * County-level confirmed COVID-19 case and death data from [USAFacts](https://usafacts.org/). This source was deactivated in January 2023. + + * Inpatient and outpatient COVID-19 hospitalization signals we derived from aggregated statistics from medical claims, provided to us by [Optum](https://www.optum.com/). + +* **May 2020.** We added signals for COVID-19 Cases and Deaths, mirrored from the [Center for Systems Science and Engineering](https://systems.jhu.edu/research/public-health/ncov/) at Johns Hopkins University. + +* **April 2020.** We partnered with Meta to launch the [COVID-19 Trends and Impact Survey (CTIS)](https://delphi.cmu.edu/covid19/ctis/) to monitor in real-time the spread and impact of the COVID-19 pandemic in the United States. + +* **April 2020.** We added signals from two new data sources: + + * Signals related to COVID-related doctor visits, derived from aggregated statistics from medical claims, provided to us by [Optum](https://www.optum.com/). + + * Data from Google Health Trends, which estimate the volume of COVID-related searches in a given location, on a given day. This data source was discontinued in March 2021. + +* **April 2020.** We began supporting and advising the U.S. CDC’s community-driven COVID-19 forecasting effort, including creating and maintaining an ensemble forecast from the models submitted to the [COVID-19 Forecast Hub](https://covid19forecasthub.org/), and a [forecast evaluation dashboard](https://delphi.cmu.edu/forecast-eval/). + +* **March 2020.** Working with Brett Slatkin (head of Google Surveys) and Hal Varian (Google’s Chief Economist), we launched our [Google Symptom Survey](https://delphi.cmu.edu/blog/2020/09/18/covid-19-symptom-surveys-through-google/), which ended in May 2020. + +* **March 2020.** We launched [COVIDcast](https://delphi.cmu.edu/covidcast/), the nation’s largest public repository of diverse, real-time indicators of COVID-19 activity, freely accessible through the [Epidata API](https://cmu-delphi.github.io/delphi-epidata/api/covidcast.html), which is updated daily with the latest data. + +* **2019.** We became a CDC National Center of Excellence for Influenza Forecasting, one of two nationally (and a 5-year designation). + +* **2016.** We developed and deployed [influenza nowcasts](https://delphi.cmu.edu/nowcast/) for the CDC, state departments of public health, and the public. + +* **2016.** We developed and deployed the [Epidata API](https://cmu-delphi.github.io/delphi-epidata/), which provides real-time access to epidemiological surveillance data. + +* **2013.** We began supporting the U.S. CDC’s Influenza Division in advancing and growing a [scientific community around influenza forecasting](https://www.cdc.gov/flu/weekly/flusight/index.html). We’ve been [perennial leaders in forecasting accuracy](https://www.cs.cmu.edu/~roni/CDC%20Flu%20Challenge%202014-2018%20Results.pdf) ever since. + + diff --git a/content/blog/2020-08-26-fb-survey.Rmd b/content/blog/2020-08-26-fb-survey.Rmd index 598ba02cc..0a49d9489 100644 --- a/content/blog/2020-08-26-fb-survey.Rmd +++ b/content/blog/2020-08-26-fb-survey.Rmd @@ -47,9 +47,6 @@ output: toc: true --- -```{r, echo=FALSE} -options(covidcast.auth = Sys.getenv("API_KEY")) -``` Since April 2020, in collaboration with Facebook, partner universities, and public health officials, @@ -140,6 +137,8 @@ library(covidcast) library(dplyr) library(gridExtra) +options(covidcast.auth = Sys.getenv("API_KEY")) # for more on API keys, see: https://cmu-delphi.github.io/delphi-epidata/api/api_keys.html + # Fetch Facebook % CLI signal and JHU confirmed case incidence proportion at # the state level start_day = "2020-06-15" diff --git a/content/blog/2020-08-26-fb-survey.html b/content/blog/2020-08-26-fb-survey.html index 0516c82b5..758fb7b4d 100644 --- a/content/blog/2020-08-26-fb-survey.html +++ b/content/blog/2020-08-26-fb-survey.html @@ -47,20 +47,19 @@ toc: true --- -
library(covidcast)
library(dplyr)
+options(covidcast.auth = Sys.getenv("API_KEY")) # for more on API keys, see: https://cmu-delphi.github.io/delphi-epidata/api/api_keys.html
query_date <- "2020-08-01"
covidcast_signal(
data_source = "quidel",
@@ -294,182 +294,7 @@ Tracking Observations and Revisions
knitr::kable("html", digits = 2,
col.names = c("Test date", "Positivity rate (%)", "Sample size",
"Issued on", "Lag (days)"))
--Test date - | --Positivity rate (%) - | --Sample size - | --Issued on - | --Lag (days) - | -
---|---|---|---|---|
-2020-08-01 - | --1.01 - | --198 - | --2020-08-06 - | --5 - | -
-2020-08-01 - | --0.97 - | --206 - | --2020-08-07 - | --6 - | -
-2020-08-01 - | --1.41 - | --284 - | --2020-08-10 - | --9 - | -
-2020-08-01 - | --1.38 - | --290 - | --2020-08-12 - | --11 - | -
-2020-08-01 - | --1.33 - | --377 - | --2020-08-16 - | --15 - | -
-2020-08-01 - | --1.53 - | --459 - | --2020-08-19 - | --18 - | -
-2020-08-01 - | --1.47 - | --477 - | --2020-08-20 - | --19 - | -
-2020-08-01 - | --1.46 - | --479 - | --2020-08-26 - | --25 - | -
-2020-08-01 - | --1.36 - | --513 - | --2020-08-30 - | --29 - | -
November 2023 update: Quidel data is no longer publicly available, so the table generated by the code chunk above has been removed.
Many data sources are subject to revisions:
library(covidcast)
+options(covidcast.auth = Sys.getenv("API_KEY")) # for more on API keys, see: https://cmu-delphi.github.io/delphi-epidata/api/api_keys.html
hosp <- covidcast_signal(
data_source = "hospital-admissions", signal = "smoothed_adj_covid19_from_claims",
start_day = "2020-03-01", end_day = "2020-08-30",
@@ -553,14 +379,17 @@ Accessing the API
According to the {{< apireflink "api/covidcast-signals/fb-survey.html" "relevant documentation page" >}},
this is the fb-survey
data source’s smoothed_hh_cmnty_cli
signal.
(Click the “Code” button to see the Python code used to produce this example.)
-import covidcast
+import matplotlib.pyplot as plt
+import covidcast
from datetime import date
-import matplotlib.pyplot as plt
+import os
+
+covidcast.use_api_key(os.environ['API_KEY']) # for more on API keys, see: https://cmu-delphi.github.io/delphi-epidata/api/api_keys.html
data = covidcast.signal("fb-survey", "smoothed_hh_cmnty_cli",
date(2020, 9, 8), date(2020, 9, 8),
geo_type="state")
-covidcast.plot_choropleth(data, figsize=(7, 5))
+covidcast.plot(data, plot_type="choropleth", figsize=(7, 5))
plt.title("% who know someone who is sick, Sept 8, 2020")

Each package’s documentation gives numerous other examples of pulling, plotting,
diff --git a/content/blog/2020-09-18-google-survey.Rmd b/content/blog/2020-09-18-google-survey.Rmd
index 786d01e29..bf1c001ac 100644
--- a/content/blog/2020-09-18-google-survey.Rmd
+++ b/content/blog/2020-09-18-google-survey.Rmd
@@ -145,6 +145,8 @@ library(dplyr)
library(ggplot2)
library(gridExtra)
+options(covidcast.auth = Sys.getenv("API_KEY")) # for more on API keys, see: https://cmu-delphi.github.io/delphi-epidata/api/api_keys.html
+
# Fetch county-level Google and Facebook % CLI-in-community signals, and JHU
# confirmed case incidence proportion
df_go = covidcast_signal("google-survey", "smoothed_cli", geo_type = "state")
diff --git a/content/blog/2020-09-18-google-survey.html b/content/blog/2020-09-18-google-survey.html
index e69f86665..092e38d3a 100644
--- a/content/blog/2020-09-18-google-survey.html
+++ b/content/blog/2020-09-18-google-survey.html
@@ -40,14 +40,13 @@
toc: true
---
-
@@ -138,6 +137,8 @@ CLI-in-Community
library(ggplot2)
library(gridExtra)
+options(covidcast.auth = Sys.getenv("API_KEY")) # for more on API keys, see: https://cmu-delphi.github.io/delphi-epidata/api/api_keys.html
+
# Fetch county-level Google and Facebook % CLI-in-community signals, and JHU
# confirmed case incidence proportion
df_go = covidcast_signal("google-survey", "smoothed_cli", geo_type = "state")
@@ -195,7 +196,7 @@ CLI-in-Community
In both plots, we see a reassuring trend,
but the trend on the left is noticeably stronger.
Indeed, the correlation here between the Google signal and case rates is
-0.84,
+0.83,
while that between the Facebook signal and case rates is
0.64.
To be fair, we should note that the Google signal comprises a much
@@ -330,7 +331,7 @@
Google Survey Redux
or manually (in collaboration with partners in public health and/or data
journalists). Stay tuned to the Delphi blog for updates.
-
+
In the survey methodology literature, a “proxy question” is one in which
diff --git a/content/blog/2020-10-06-survey-wave-4.Rmd b/content/blog/2020-10-06-survey-wave-4.Rmd
index daa9df4d2..2c4a63bb4 100644
--- a/content/blog/2020-10-06-survey-wave-4.Rmd
+++ b/content/blog/2020-10-06-survey-wave-4.Rmd
@@ -30,9 +30,6 @@ output:
blogdown::html_page:
toc: true
---
-```{r, echo=FALSE}
-options(covidcast.auth = Sys.getenv("API_KEY"))
-```
Beginning in early April 2020, the `r blogdown::shortcode_html("reflink", "/", "Delphi group")` has
conducted a major survey to track COVID-19 across the United States. With the
support of Facebook Data for Good, we have been able to recruit tens of
@@ -95,6 +92,8 @@ version is Wave 4.
```{r sample-size, message=FALSE, include=FALSE}
library(covidcast)
+options(covidcast.auth = Sys.getenv("API_KEY")) # for more on API keys, see: https://cmu-delphi.github.io/delphi-epidata/api/api_keys.html
+
start_day <- "2020-09-08"
end_day <- "2020-10-07"
@@ -129,12 +128,14 @@ their local community who is sick (with a fever and at least one other symptom,
such as cough or difficulty breathing). This percentage `r blogdown::shortcode_html("reflink", "2020-08-26-fb-survey#some-interesting-examples", "correlates very well")`
with COVID case rates as reported by state agencies.
-```{r mask-wearing, message=FALSE, fig.width=9, out.extra = 'class="wide-figure"'}
+```{r mask-wearing, warning=FALSE, message=FALSE, fig.width=9, out.extra = 'class="wide-figure"'}
library(covidcast)
library(ggplot2)
library(grid)
library(gridExtra)
+options(covidcast.auth = Sys.getenv("API_KEY")) # for more on API keys, see: https://cmu-delphi.github.io/delphi-epidata/api/api_keys.html
+
start_day <- "2020-09-08"
end_day <- "2020-10-07"
diff --git a/content/blog/2020-10-06-survey-wave-4.html b/content/blog/2020-10-06-survey-wave-4.html
index 96ec4092e..558240472 100644
--- a/content/blog/2020-10-06-survey-wave-4.html
+++ b/content/blog/2020-10-06-survey-wave-4.html
@@ -31,24 +31,23 @@
toc: true
---
-
-
+
@@ -130,6 +129,8 @@ Mask Wearing
library(grid)
library(gridExtra)
+options(covidcast.auth = Sys.getenv("API_KEY")) # for more on API keys, see: https://cmu-delphi.github.io/delphi-epidata/api/api_keys.html
+
start_day <- "2020-09-08"
end_day <- "2020-10-07"
@@ -224,8 +225,8 @@ Mask Wearing
"autoScale2d", "toggleSpikelines",
"hoverCompareCartesian",
"hoverClosestCartesian"))
-
-
+
+
The relationship is striking. (Hover over or click each point to see which state
it is.) Of course, correlation is not causation, and there are many differences
between these states beyond their use of masks. For example, people in more
diff --git a/content/blog/2020-10-14-dv-signal.Rmd b/content/blog/2020-10-14-dv-signal.Rmd
index 4b33409fb..ff8eb2d0f 100644
--- a/content/blog/2020-10-14-dv-signal.Rmd
+++ b/content/blog/2020-10-14-dv-signal.Rmd
@@ -75,7 +75,8 @@ library(covidcast)
library(dplyr)
library(ggplot2)
library(gridExtra)
-options(covidcast.auth = Sys.getenv("API_KEY"))
+
+options(covidcast.auth = Sys.getenv("API_KEY")) # for more on API keys, see: https://cmu-delphi.github.io/delphi-epidata/api/api_keys.html
# Fetch DV % CLI signal and USAFacts confirmed case incidence proportion at
# the state level
diff --git a/content/blog/2020-10-14-dv-signal.html b/content/blog/2020-10-14-dv-signal.html
index afefcef56..566539f92 100644
--- a/content/blog/2020-10-14-dv-signal.html
+++ b/content/blog/2020-10-14-dv-signal.html
@@ -28,17 +28,16 @@
toc: true
---
-
@@ -73,6 +72,8 @@ The Doctor Visits Indicator
library(ggplot2)
library(gridExtra)
+options(covidcast.auth = Sys.getenv("API_KEY")) # for more on API keys, see: https://cmu-delphi.github.io/delphi-epidata/api/api_keys.html
+
# Fetch DV % CLI signal and USAFacts confirmed case incidence proportion at
# the state level
start_day = "2020-04-15"
diff --git a/content/blog/2020-12-10-masks-public.Rmd b/content/blog/2020-12-10-masks-public.Rmd
index e98b0825e..a4be2115f 100644
--- a/content/blog/2020-12-10-masks-public.Rmd
+++ b/content/blog/2020-12-10-masks-public.Rmd
@@ -21,9 +21,6 @@ output:
toc: true
---
-```{r, echo=FALSE}
-options(covidcast.auth = Sys.getenv("API_KEY"))
-```
As COVID cases and deaths continue to rise in the United States, we are
repeatedly reminded that unless we take the appropriate precautions---by wearing
@@ -77,12 +74,14 @@ District of Columbia, Massachusetts, and New York), mask usage is among the
highest in the country; in the other three (South Dakota, Idaho, and Wyoming),
it's among the lowest.
-```{r state_masks_time, message=FALSE}
+```{r state_masks_time, message=FALSE, warning=FALSE}
library(covidcast)
library(dplyr)
library(ggplot2)
library(directlabels)
+options(covidcast.auth = Sys.getenv("API_KEY")) # for more on API keys, see: https://cmu-delphi.github.io/delphi-epidata/api/api_keys.html
+
states_of_interest <- c("dc", "ma", "ny", "wy", "sd", "id")
state_masks <- covidcast_signal(
@@ -118,7 +117,7 @@ states---might make you wonder: If mask usage is over 80% in most states and
over 90% in many, why does the rate of new COVID cases in the United States
currently look like this?
-```{r national_cases_time, message=FALSE}
+```{r national_cases_time, message=FALSE, warning=FALSE}
cases <- covidcast_signal(
"indicator-combination", "confirmed_7dav_incidence_num",
start_day = "2020-09-15", end_day = "2020-12-05",
@@ -222,7 +221,7 @@ mask use.
Let's see how the data looks. We'll plot the percentage of people answering
"all" or "most" to each mask question in each state:
-```{r mask_questions_compared, message=FALSE}
+```{r mask_questions_compared, message=FALSE, warning=FALSE}
masked <- covidcast_signal(
"fb-survey", "smoothed_wwearing_mask",
start_day = "2020-12-01", end_day = "2020-12-01",
@@ -332,7 +331,7 @@ is "Spent time with someone who isn't currently staying with you"; whether this
is done with a mask or not, it represents a higher risk. And the data shows that
it's done more often in states where fewer people report wearing masks:
-```{r social_distancing, message=FALSE}
+```{r social_distancing, message=FALSE, warning=FALSE}
spent_time <- covidcast_signal(
"fb-survey", "smoothed_wspent_time_1d",
start_day = "2020-12-01", end_day = "2020-12-01",
@@ -358,7 +357,7 @@ cell phone location data. Using [state-level aggregates from our
API](https://cmu-delphi.github.io/delphi-epidata/api/covidcast-signals/safegraph.html#safegraph-weekly-patterns),
we can compare mask use to the proportion of people visiting restaurants in each state:
-```{r restaurants, message=FALSE}
+```{r restaurants, message=FALSE, warning=FALSE}
# 2020-11-29 was most recent data available at time of writing
restaurants <- covidcast_signal(
"safegraph", "restaurants_visit_prop",
diff --git a/content/blog/2020-12-10-masks-public.html b/content/blog/2020-12-10-masks-public.html
index af9e6aaf2..8ffae23fc 100644
--- a/content/blog/2020-12-10-masks-public.html
+++ b/content/blog/2020-12-10-masks-public.html
@@ -21,15 +21,14 @@
toc: true
---
-
-- Studying Mask Use with Surveys
-- Addressing Potential Survey Biases
-- A Probabilistic Argument for Mask Use
-- Public Activities, Social Distancing, and Masks
-- More Opportunities in Survey Data
+- Studying Mask Use with Surveys
+- Addressing Potential Survey Biases
+- A Probabilistic Argument for Mask Use
+- Public Activities, Social Distancing, and Masks
+- More Opportunities in Survey Data
@@ -82,6 +81,8 @@ Studying Mask Use with Surveys
library(ggplot2)
library(directlabels)
+options(covidcast.auth = Sys.getenv("API_KEY")) # for more on API keys, see: https://cmu-delphi.github.io/delphi-epidata/api/api_keys.html
+
states_of_interest <- c("dc", "ma", "ny", "wy", "sd", "id")
state_masks <- covidcast_signal(
diff --git a/content/blog/2021-01-15-causal-effect-mobility.Rmd b/content/blog/2021-01-15-causal-effect-mobility.Rmd
index 12693f77b..762b0f5d0 100644
--- a/content/blog/2021-01-15-causal-effect-mobility.Rmd
+++ b/content/blog/2021-01-15-causal-effect-mobility.Rmd
@@ -27,9 +27,6 @@ output:
toc: true
---
-```{r, echo=FALSE}
-options(covidcast.auth = Sys.getenv("API_KEY"))
-```
```{r setup, include=FALSE}
knitr::opts_chunk$set(collapse = TRUE)
@@ -401,13 +398,15 @@ weekly deaths and mobility
starting February 15, 2020,
for a few states:
-```{r deaths-by-state, message=FALSE}
+```{r deaths-by-state, message=FALSE, warning=FALSE}
library(covidcast)
library(directlabels)
library(dplyr)
library(lubridate)
library(ggplot2)
+options(covidcast.auth = Sys.getenv("API_KEY")) # for more on API keys, see: https://cmu-delphi.github.io/delphi-epidata/api/api_keys.html
+
# Top 5 most populated states according to
# https://en.wikipedia.org/wiki/List_of_states_and_territories_of_the_United_States_by_population
states_of_interest <- c("ca", "tx", "fl", "ny", "pa")
diff --git a/content/blog/2021-01-15-causal-effect-mobility.html b/content/blog/2021-01-15-causal-effect-mobility.html
index 29c338366..940b636c6 100644
--- a/content/blog/2021-01-15-causal-effect-mobility.html
+++ b/content/blog/2021-01-15-causal-effect-mobility.html
@@ -27,14 +27,13 @@
toc: true
---
-
@@ -369,6 +368,8 @@ The Data and the Results
library(lubridate)
library(ggplot2)
+options(covidcast.auth = Sys.getenv("API_KEY")) # for more on API keys, see: https://cmu-delphi.github.io/delphi-epidata/api/api_keys.html
+
# Top 5 most populated states according to
# https://en.wikipedia.org/wiki/List_of_states_and_territories_of_the_United_States_by_population
states_of_interest <- c("ca", "tx", "fl", "ny", "pa")
diff --git a/content/blog/2021-01-22-holiday-surveys.Rmd b/content/blog/2021-01-22-holiday-surveys.Rmd
index 630aabb92..9607f22d8 100644
--- a/content/blog/2021-01-22-holiday-surveys.Rmd
+++ b/content/blog/2021-01-22-holiday-surveys.Rmd
@@ -29,9 +29,6 @@ output:
blogdown::html_page:
toc: true
---
-```{r, echo=FALSE}
-options(covidcast.auth = Sys.getenv("API_KEY"))
-```
With pandemic fatigue setting in across the United States after a long year
filled with uncertainty, many felt the temptation to celebrate a “normal”
Thanksgiving and Christmas. However, with cases steeply rising across the US,
@@ -70,7 +67,7 @@ from airlines suggested that travel reached its highest levels since the start
of the pandemic during the Christmas holiday with about 1% of the US population
taking flights in just the few days surrounding the holiday.
-```{r traveled-recently, message=FALSE, fig.width=9, out.extra = 'class="wide-figure"'}
+```{r traveled-recently, warning=FALSE, message=FALSE, fig.width=9, out.extra = 'class="wide-figure"'}
library(covidcast)
library(ggplot2)
library(stringr)
@@ -78,6 +75,8 @@ library(dplyr)
library(grid)
library(gridExtra)
+options(covidcast.auth = Sys.getenv("API_KEY")) # for more on API keys, see: https://cmu-delphi.github.io/delphi-epidata/api/api_keys.html
+
start_after_election <- "2020-11-10"
end_day <- "2021-01-05"
diff --git a/content/blog/2021-01-22-holiday-surveys.html b/content/blog/2021-01-22-holiday-surveys.html
index 1e36afc43..5930262bc 100644
--- a/content/blog/2021-01-22-holiday-surveys.html
+++ b/content/blog/2021-01-22-holiday-surveys.html
@@ -30,13 +30,12 @@
toc: true
---
-
@@ -82,6 +81,8 @@ Travel and Other Social Behaviors During US Holidays
library(grid)
library(gridExtra)
+options(covidcast.auth = Sys.getenv("API_KEY")) # for more on API keys, see: https://cmu-delphi.github.io/delphi-epidata/api/api_keys.html
+
start_after_election <- "2020-11-10"
end_day <- "2021-01-05"
@@ -114,7 +115,7 @@ Travel and Other Social Behaviors During US Holidays
filter(geo_value %in% str_to_lower(statelist)) %>%
mutate(value = plyr::mapvalues(geo_value, str_to_lower(statelist), regions),
value = as.integer(factor(value)))
-
+attr(regionmap, "metadata") <- list(geo_type = "state")
grid_label <- textGrob("Data from Delphi COVIDcast, delphi.cmu.edu",
hjust = 1, x = 1, gp = gpar(fontsize = 9))
diff --git a/content/blog/_2021-04-20-jj-vaccine.Rmd b/content/blog/_2021-04-20-jj-vaccine.Rmd
index e91a4ebc4..a3afa0fff 100644
--- a/content/blog/_2021-04-20-jj-vaccine.Rmd
+++ b/content/blog/_2021-04-20-jj-vaccine.Rmd
@@ -41,6 +41,8 @@ library(ggplot2)
library(scales)
library(gt)
+options(covidcast.auth = Sys.getenv("API_KEY")) # for more on API keys, see: https://cmu-delphi.github.io/delphi-epidata/api/api_keys.html
+
knitr::opts_chunk$set(echo = FALSE)
dfs <- lapply(list.files("jj-data/", "*.csv.gz$", include.dirs = TRUE),
diff --git a/environment.yml b/environment.yml
index a5df8c737..eb4776646 100644
--- a/environment.yml
+++ b/environment.yml
@@ -62,4 +62,4 @@ dependencies:
- matplotlib
- udunits2
- pip:
- - covidcast==0.1.3
+ - covidcast
diff --git a/package-lock.json b/package-lock.json
index 0a250556e..c131b8c93 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,13 +1,13 @@
{
"name": "www-main",
- "version": "3.2.8",
+ "version": "3.2.9",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
"@fortawesome/fontawesome-free": {
- "version": "6.4.2",
- "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-free/-/fontawesome-free-6.4.2.tgz",
- "integrity": "sha512-m5cPn3e2+FDCOgi1mz0RexTUvvQibBebOUlUlW0+YrMjDTPkiJ6VTKukA1GRsvRw+12KyJndNjj0O4AgTxm2Pg=="
+ "version": "6.5.1",
+ "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-free/-/fontawesome-free-6.5.1.tgz",
+ "integrity": "sha512-CNy5vSwN3fsUStPRLX7fUYojyuzoEMSXPl7zSLJ8TgtRfjv24LOnOWKT2zYwaHZCJGkdyRnTmstR0P+Ah503Gw=="
},
"@isaacs/cliui": {
"version": "8.0.2",
@@ -31,9 +31,9 @@
"optional": true
},
"@sindresorhus/is": {
- "version": "5.4.1",
- "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-5.4.1.tgz",
- "integrity": "sha512-axlrvsHlHlFmKKMEg4VyvMzFr93JWJj4eIfXY1STVuO2fsImCa7ncaiG5gC8HKOX590AW5RtRsC41/B+OfrSqw==",
+ "version": "5.6.0",
+ "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-5.6.0.tgz",
+ "integrity": "sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==",
"dev": true
},
"@szmarczak/http-timer": {
@@ -52,9 +52,9 @@
"dev": true
},
"@types/http-cache-semantics": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz",
- "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==",
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz",
+ "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==",
"dev": true
},
"@xhmikosr/archive-type": {
@@ -168,12 +168,12 @@
}
},
"ansi-escapes": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-5.0.0.tgz",
- "integrity": "sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA==",
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-6.2.0.tgz",
+ "integrity": "sha512-kzRaCqXnpzWs+3z5ABPQiVke+iq0KXkHo8xiWV4RPTi5Yli0l97BEQuhXV1s7+aSU/fu1kUuxgS4MsQ0fRuygw==",
"dev": true,
"requires": {
- "type-fest": "^1.0.2"
+ "type-fest": "^3.0.0"
}
},
"ansi-regex": {
@@ -275,15 +275,15 @@
"dev": true
},
"cacheable-request": {
- "version": "10.2.12",
- "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-10.2.12.tgz",
- "integrity": "sha512-qtWGB5kn2OLjx47pYUkWicyOpK1vy9XZhq8yRTXOy+KAmjjESSRLx6SiExnnaGGUP1NM6/vmygMu0fGylNh9tw==",
+ "version": "10.2.14",
+ "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-10.2.14.tgz",
+ "integrity": "sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ==",
"dev": true,
"requires": {
- "@types/http-cache-semantics": "^4.0.1",
+ "@types/http-cache-semantics": "^4.0.2",
"get-stream": "^6.0.1",
"http-cache-semantics": "^4.1.1",
- "keyv": "^4.5.2",
+ "keyv": "^4.5.3",
"mimic-response": "^4.0.0",
"normalize-url": "^8.0.0",
"responselike": "^3.0.0"
@@ -305,13 +305,41 @@
}
},
"cli-truncate": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz",
- "integrity": "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==",
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-4.0.0.tgz",
+ "integrity": "sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==",
"dev": true,
"requires": {
"slice-ansi": "^5.0.0",
- "string-width": "^5.0.0"
+ "string-width": "^7.0.0"
+ },
+ "dependencies": {
+ "emoji-regex": {
+ "version": "10.3.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.3.0.tgz",
+ "integrity": "sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==",
+ "dev": true
+ },
+ "string-width": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.0.0.tgz",
+ "integrity": "sha512-GPQHj7row82Hjo9hKZieKcHIhaAIKOJvFSIZXuCU9OASVZrMNUaZuz++SPVrBjnLsnk4k+z9f2EIypgxf2vNFw==",
+ "dev": true,
+ "requires": {
+ "emoji-regex": "^10.3.0",
+ "get-east-asian-width": "^1.0.0",
+ "strip-ansi": "^7.1.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
+ "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^6.0.1"
+ }
+ }
}
},
"color-convert": {
@@ -479,9 +507,9 @@
}
},
"fast-fifo": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.0.tgz",
- "integrity": "sha512-IgfweLvEpwyA4WgiQe9Nx6VV2QkML2NkvZnk1oKnIzXgXdWxuhF7zw4DvLTPZJn6PIUneiAXPF24QmoEqHTjyw==",
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz",
+ "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==",
"dev": true
},
"fd-slicer": {
@@ -494,9 +522,9 @@
}
},
"file-type": {
- "version": "18.5.0",
- "resolved": "https://registry.npmjs.org/file-type/-/file-type-18.5.0.tgz",
- "integrity": "sha512-yvpl5U868+V6PqXHMmsESpg6unQ5GfnPssl4dxdJudBrr9qy7Fddt7EVX1VLlddFfe8Gj9N7goCZH22FXuSQXQ==",
+ "version": "18.7.0",
+ "resolved": "https://registry.npmjs.org/file-type/-/file-type-18.7.0.tgz",
+ "integrity": "sha512-ihHtXRzXEziMrQ56VSgU7wkxh55iNchFkosu7Y9/S+tXHdKyrGjVK0ujbqNnsxzea+78MaLhN6PGmfYSAv1ACw==",
"dev": true,
"requires": {
"readable-web-to-node-stream": "^3.0.2",
@@ -585,6 +613,12 @@
"integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
"dev": true
},
+ "get-east-asian-width": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.2.0.tgz",
+ "integrity": "sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA==",
+ "dev": true
+ },
"get-stream": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz",
@@ -651,9 +685,9 @@
"dev": true
},
"http2-wrapper": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.2.0.tgz",
- "integrity": "sha512-kZB0wxMo0sh1PehyjJUWRFEd99KC5TLjZ2cULC4f9iqJBAmKQQXEICjxl5iPJRwP40dpeHFqqhm7tYCvODpqpQ==",
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.2.1.tgz",
+ "integrity": "sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==",
"dev": true,
"requires": {
"quick-lru": "^5.1.1",
@@ -661,9 +695,9 @@
}
},
"hugo-bin": {
- "version": "0.115.0",
- "resolved": "https://registry.npmjs.org/hugo-bin/-/hugo-bin-0.115.0.tgz",
- "integrity": "sha512-pwhgpoodImeixV2rKQLmQ29WJvvoSFbhpzP2Rx7BO1+BJZ6KvxIUK4JvLXi/vdu5EP9IbDl8RaV3xs2bnAvZjQ==",
+ "version": "0.117.0",
+ "resolved": "https://registry.npmjs.org/hugo-bin/-/hugo-bin-0.117.0.tgz",
+ "integrity": "sha512-Wy0X7kxQ1nhpfUUtaVv428Lsg1j1ZZr9O7Ii+g0ErAoswNt/rEWtjJfpZVTYb+TaPIfwJLnqMTbf9mjPSGgNhw==",
"dev": true,
"requires": {
"@xhmikosr/bin-wrapper": "^11.0.2",
@@ -741,9 +775,9 @@
"dev": true
},
"is-plain-obj": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz",
- "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz",
+ "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==",
"dev": true
},
"is-stream": {
@@ -783,9 +817,9 @@
}
},
"keyv": {
- "version": "4.5.2",
- "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.2.tgz",
- "integrity": "sha512-5MHbFaKn8cNSmVW7BYnijeAVlE4cYA/SVkifVgrh7yotnfhKmjuXpDKjrABLnT0SfHWV21P8ow07OGfRrNDg8g==",
+ "version": "4.5.4",
+ "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz",
+ "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==",
"dev": true,
"requires": {
"json-buffer": "3.0.1"
@@ -798,27 +832,27 @@
"dev": true
},
"lilconfig": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz",
- "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.0.0.tgz",
+ "integrity": "sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g==",
"dev": true
},
"lint-staged": {
- "version": "15.0.2",
- "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.0.2.tgz",
- "integrity": "sha512-vnEy7pFTHyVuDmCAIFKR5QDO8XLVlPFQQyujQ/STOxe40ICWqJ6knS2wSJ/ffX/Lw0rz83luRDh+ET7toN+rOw==",
+ "version": "15.2.0",
+ "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.2.0.tgz",
+ "integrity": "sha512-TFZzUEV00f+2YLaVPWBWGAMq7So6yQx+GG8YRMDeOEIf95Zn5RyiLMsEiX4KTNl9vq/w+NqRJkLA1kPIo15ufQ==",
"dev": true,
"requires": {
"chalk": "5.3.0",
"commander": "11.1.0",
"debug": "4.3.4",
"execa": "8.0.1",
- "lilconfig": "2.1.0",
- "listr2": "7.0.2",
+ "lilconfig": "3.0.0",
+ "listr2": "8.0.0",
"micromatch": "4.0.5",
"pidtree": "0.6.0",
"string-argv": "0.3.2",
- "yaml": "2.3.3"
+ "yaml": "2.3.4"
},
"dependencies": {
"commander": {
@@ -889,17 +923,62 @@
}
},
"listr2": {
- "version": "7.0.2",
- "resolved": "https://registry.npmjs.org/listr2/-/listr2-7.0.2.tgz",
- "integrity": "sha512-rJysbR9GKIalhTbVL2tYbF2hVyDnrf7pFUZBwjPaMIdadYHmeT+EVi/Bu3qd7ETQPahTotg2WRCatXwRBW554g==",
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/listr2/-/listr2-8.0.0.tgz",
+ "integrity": "sha512-u8cusxAcyqAiQ2RhYvV7kRKNLgUvtObIbhOX2NCXqvp1UU32xIg5CT22ykS2TPKJXZWJwtK3IKLiqAGlGNE+Zg==",
"dev": true,
"requires": {
- "cli-truncate": "^3.1.0",
+ "cli-truncate": "^4.0.0",
"colorette": "^2.0.20",
"eventemitter3": "^5.0.1",
- "log-update": "^5.0.1",
+ "log-update": "^6.0.0",
"rfdc": "^1.3.0",
- "wrap-ansi": "^8.1.0"
+ "wrap-ansi": "^9.0.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
+ "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
+ "dev": true
+ },
+ "emoji-regex": {
+ "version": "10.3.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.3.0.tgz",
+ "integrity": "sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==",
+ "dev": true
+ },
+ "string-width": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.0.0.tgz",
+ "integrity": "sha512-GPQHj7row82Hjo9hKZieKcHIhaAIKOJvFSIZXuCU9OASVZrMNUaZuz++SPVrBjnLsnk4k+z9f2EIypgxf2vNFw==",
+ "dev": true,
+ "requires": {
+ "emoji-regex": "^10.3.0",
+ "get-east-asian-width": "^1.0.0",
+ "strip-ansi": "^7.1.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
+ "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^6.0.1"
+ }
+ },
+ "wrap-ansi": {
+ "version": "9.0.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz",
+ "integrity": "sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^6.2.1",
+ "string-width": "^7.0.0",
+ "strip-ansi": "^7.1.0"
+ }
+ }
}
},
"load-json-file": {
@@ -909,25 +988,89 @@
"dev": true
},
"locate-path": {
- "version": "7.1.1",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.1.1.tgz",
- "integrity": "sha512-vJXaRMJgRVD3+cUZs3Mncj2mxpt5mP0EmNOsxRSZRMlbqjvxzDEOIUWXGmavo0ZC9+tNZCBLQ66reA11nbpHZg==",
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz",
+ "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==",
"dev": true,
"requires": {
"p-locate": "^6.0.0"
}
},
"log-update": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/log-update/-/log-update-5.0.1.tgz",
- "integrity": "sha512-5UtUDQ/6edw4ofyljDNcOVJQ4c7OjDro4h3y8e1GQL5iYElYclVHJ3zeWchylvMaKnDbDilC8irOVyexnA/Slw==",
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/log-update/-/log-update-6.0.0.tgz",
+ "integrity": "sha512-niTvB4gqvtof056rRIrTZvjNYE4rCUzO6X/X+kYjd7WFxXeJ0NwEFnRxX6ehkvv3jTwrXnNdtAak5XYZuIyPFw==",
"dev": true,
"requires": {
- "ansi-escapes": "^5.0.0",
+ "ansi-escapes": "^6.2.0",
"cli-cursor": "^4.0.0",
- "slice-ansi": "^5.0.0",
- "strip-ansi": "^7.0.1",
- "wrap-ansi": "^8.0.1"
+ "slice-ansi": "^7.0.0",
+ "strip-ansi": "^7.1.0",
+ "wrap-ansi": "^9.0.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
+ "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
+ "dev": true
+ },
+ "emoji-regex": {
+ "version": "10.3.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.3.0.tgz",
+ "integrity": "sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==",
+ "dev": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.0.0.tgz",
+ "integrity": "sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==",
+ "dev": true,
+ "requires": {
+ "get-east-asian-width": "^1.0.0"
+ }
+ },
+ "slice-ansi": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.0.tgz",
+ "integrity": "sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^6.2.1",
+ "is-fullwidth-code-point": "^5.0.0"
+ }
+ },
+ "string-width": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.0.0.tgz",
+ "integrity": "sha512-GPQHj7row82Hjo9hKZieKcHIhaAIKOJvFSIZXuCU9OASVZrMNUaZuz++SPVrBjnLsnk4k+z9f2EIypgxf2vNFw==",
+ "dev": true,
+ "requires": {
+ "emoji-regex": "^10.3.0",
+ "get-east-asian-width": "^1.0.0",
+ "strip-ansi": "^7.1.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
+ "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^6.0.1"
+ }
+ },
+ "wrap-ansi": {
+ "version": "9.0.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz",
+ "integrity": "sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^6.2.1",
+ "string-width": "^7.0.0",
+ "strip-ansi": "^7.1.0"
+ }
+ }
}
},
"lowercase-keys": {
@@ -961,6 +1104,14 @@
"dev": true,
"requires": {
"is-plain-obj": "^2.1.0"
+ },
+ "dependencies": {
+ "is-plain-obj": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz",
+ "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==",
+ "dev": true
+ }
}
},
"merge-stream": {
@@ -1182,9 +1333,9 @@
}
},
"prettier": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.0.3.tgz",
- "integrity": "sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg==",
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.1.0.tgz",
+ "integrity": "sha512-TQLvXjq5IAibjh8EpBIkNKxO749UEWABoiIZehEPiY4GNpVdhaFKqSTu+QrlU6D2dPAfubRmtJTi4K4YkQ5eXw==",
"dev": true
},
"prettier-plugin-go-template": {
@@ -1427,14 +1578,6 @@
"dev": true,
"requires": {
"is-plain-obj": "^1.0.0"
- },
- "dependencies": {
- "is-plain-obj": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz",
- "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==",
- "dev": true
- }
}
},
"sort-keys-length": {
@@ -1447,9 +1590,9 @@
}
},
"streamx": {
- "version": "2.15.0",
- "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.15.0.tgz",
- "integrity": "sha512-HcxY6ncGjjklGs1xsP1aR71INYcsXFJet5CU1CHqihQ2J5nOsbd4OjgjHO42w/4QNv9gZb3BueV+Vxok5pLEXg==",
+ "version": "2.15.5",
+ "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.15.5.tgz",
+ "integrity": "sha512-9thPGMkKC2GctCzyCUjME3yR03x2xNo0GPKGkRw2UMYN+gqWa9uqpyNWhmsNCutU5zHmkUum0LsCRQTXUgUCAg==",
"dev": true,
"requires": {
"fast-fifo": "^1.1.0",
@@ -1556,14 +1699,6 @@
"requires": {
"inspect-with-kind": "^1.0.5",
"is-plain-obj": "^1.1.0"
- },
- "dependencies": {
- "is-plain-obj": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz",
- "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==",
- "dev": true
- }
}
},
"strip-final-newline": {
@@ -1608,7 +1743,7 @@
"through": {
"version": "2.3.8",
"resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
- "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
+ "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==",
"dev": true
},
"to-regex-range": {
@@ -1640,15 +1775,15 @@
}
},
"type-fest": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz",
- "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==",
+ "version": "3.13.1",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.13.1.tgz",
+ "integrity": "sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==",
"dev": true
},
"uikit": {
- "version": "3.17.8",
- "resolved": "https://registry.npmjs.org/uikit/-/uikit-3.17.8.tgz",
- "integrity": "sha512-zs7oFYlW2JFVZ1Rz70qnrHRfWqRvKIzSobVhQDVeIPOOZXKiyad/r1oveiWvHQSlb7wKaW6T8Z6/FefBi3Sm5w=="
+ "version": "3.17.11",
+ "resolved": "https://registry.npmjs.org/uikit/-/uikit-3.17.11.tgz",
+ "integrity": "sha512-B5DL8pQnjNWKsiuoIyLQoV7ODr/UH8Qcyt0hhYXdvNIaGnwezIBLV7asnid2EW/rt8e5d44J4xgJqPBHWa1VWA=="
},
"ulid": {
"version": "2.3.0",
@@ -1786,9 +1921,9 @@
"dev": true
},
"yaml": {
- "version": "2.3.3",
- "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.3.tgz",
- "integrity": "sha512-zw0VAJxgeZ6+++/su5AFoqBbZbrEakwu+X0M5HmcwUiBL7AzcuPKjj5we4xfQLp78LkEMpD0cOnUhmgOVy3KdQ==",
+ "version": "2.3.4",
+ "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.4.tgz",
+ "integrity": "sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==",
"dev": true
},
"yauzl": {
diff --git a/package.json b/package.json
index 53cd69d03..cf1fd9abb 100644
--- a/package.json
+++ b/package.json
@@ -1,21 +1,21 @@
{
"name": "www-main",
- "version": "3.2.8",
+ "version": "3.2.9",
"private": true,
"dependencies": {
- "@fortawesome/fontawesome-free": "^6.4.2",
+ "@fortawesome/fontawesome-free": "^6.5.1",
"highlight.js": "^11.9.0",
"katex": "^0.16.9",
- "uikit": "^3.17.8",
+ "uikit": "^3.17.11",
"www-covidcast": "https://github.com/cmu-delphi/www-covidcast/releases/download/v3.2.9/www-covidcast-3.2.9.tgz",
"www-covidcast-classic": "https://github.com/cmu-delphi/www-covidcast-classic/releases/download/v2.6.7/www-covidcast-classic-2.6.7.tgz",
"www-epivis": "https://github.com/cmu-delphi/www-epivis/releases/download/v2.0.3/www-epivis-2.0.3.tgz"
},
"devDependencies": {
- "hugo-bin": "^0.115.0",
+ "hugo-bin": "^0.117.0",
"husky": "^8.0.3",
- "lint-staged": "^15.0.2",
- "prettier": "^3.0.3",
+ "lint-staged": "^15.2.0",
+ "prettier": "^3.1.0",
"prettier-plugin-go-template": "^0.0.15",
"rimraf": "^5.0.5",
"shx": "^0.3.4"
diff --git a/static/blog/2020-08-28-api_files/figure-html/python-data-1.svg b/static/blog/2020-08-28-api_files/figure-html/python-data-1.svg
index 38cd0768b..7696fc6ee 100644
--- a/static/blog/2020-08-28-api_files/figure-html/python-data-1.svg
+++ b/static/blog/2020-08-28-api_files/figure-html/python-data-1.svg
@@ -1,24 +1,23 @@
-
-