Since I discovered that the GDQ donations are public, tabular und scrapeable, I couldn’t resist cobbling together a script to scrape all the data. It only took around 2 hours to finish. Anway, this site collects the results.

Donations

First up we look at the donation totals for each event.
Note that as of now I only collected data from [AS]GDQs since 2011, the other events are not included (yet?).

ggplot(gdq_total, aes(x = year, y = amount, fill = gdq)) +
  geom_col(position = "dodge", alpha = .75) +
  scale_y_continuous(labels = dollar, 
                     sec.axis = sec_axis(~.*.85, 
                                         labels = euro_scale)) +
  scale_fill_brewer(palette = "Set1", direction = -1) +
  labs(title = p_title, caption = p_caption,
       subtitle = "Donation totals by event",
       x = "Year", y = "Amount", fill = "Event")

Or cumulative, to see how much money GDQ has raised since 2011 (as I said, only the main events are counted, the actual total is even higher).

gdq_total %>%
  arrange(year) %>%
  mutate(amount = cumsum(amount)) %>%
  ggplot(aes(x = year, y = amount, fill = gdq)) +
  geom_col(alpha = .75) +
  scale_y_continuous(labels = dollar, 
                     sec.axis = sec_axis(~.*.85, 
                                         labels = euro_scale)) +
  scale_fill_brewer(palette = "Set1", direction = -1) +
  labs(title = p_title, caption = p_caption,
       subtitle = "Cumulative donation totals",
       x = "Year", y = "Amount", fill = "Event")

gdq %>%
  mutate(year = factor(year(time))) %>%
  filter(name != "Twitch Subscriber Revenue",
         name != "Humble Bundle",
         name != "The Yetee",
         name != "Twitch HQ",
         name != "Fangamer",
         name != "D..., Games (GamesDoneQuick)") %>%
  ggplot(aes(x = year, y = amount, fill = gdq)) +
  geom_boxplot() +
  scale_y_log10(labels = dollar,
                     sec.axis = dup_axis(~ . * .85,
                                         labels = euro_scale, 
                                         breaks = derive())) +
  scale_fill_brewer(palette = "Set1", direction = -1) +
  labs(title = p_title, caption = p_caption,
       subtitle = "Donations by event, sponsor donations have been removed.",
       x = "Year", y = "Amount", fill = "Event")

Runs

Run duration histogram.

runs %>%
  filter(run_duration_s > 0) %>%
  {
    ggplot(data = ., aes(x = run_duration_hms)) +
      geom_histogram(binwidth = 1/6 * 60^2) +
      geom_vline(xintercept = mean(.$run_duration_s), color = "red", lty = "dashed") +
      scale_x_time(breaks = seq(0, 8 * 60^2, 1 * 60^2)) +
      labs(title = "Games Done Quick: Runs", caption = p_caption,
           subtitle = "Run duration histogram",
           x = "Run Duration (H:M:S)", y = "Frequency") 
  }

Or run durations by event:

runs %>%
  filter(run_duration_s > 0) %>%
  {
    ggplot(data = ., aes(x = factor(year), y = run_duration_hms, color = gdq, fill = gdq)) +
      geom_boxplot(alpha = .5) +
      stat_summary(fun.y = mean, geom = "point", shape = 21, color = "black",
                   position = position_dodge(width = .75)) +
      scale_y_time(breaks = seq(0, 8 * 60^2, 1 * 60^2),
                   minor_breaks = seq(0, 8 * 60^2, 1/4 * 60^2)) +
      scale_color_brewer(palette = "Set1", direction = -1, guide = F) +
      scale_fill_brewer(palette = "Set1", direction = -1) +
      labs(title = p_title_r, caption = p_caption,
           subtitle = paste0("Run durations as boxplots with mean (dot in box).",
                            "\nGlobal average is ",
                            hms::as.hms(round(mean(runs$run_duration_hms)))),
             x = "Year", y = "Run Duration (H:M:S)", fill = "Event")
  }

Runs and Bid Wars

What’s the likelihood that a run is associated with a bid war, given the run’s duration?

runs %>%
  filter(run_duration_s > 0) %>%
  mutate(bidwars = if_else(bidwars == "Yes", 1, 0)) %>%
  glm(bidwars ~ run_duration_s, data = ., family = binomial) %>%
  effects::allEffects() %>%
  unclass() %>%
  as.data.frame() %>%
  as_tibble() %>%
  mutate(duration = hms::hms(seconds = run_duration_s.run_duration_s)) %>%
  ggplot(aes(x = duration, y = run_duration_s.fit)) +
  geom_line() +
  scale_x_time() +
  scale_y_continuous(labels = percent, limits = c(0, 1)) +
  labs(title = p_title_r, caption = p_caption,
       subtitle = "Estimated likelihood for a run to be associated with a bid war, by duration",
       x = "Run Duration (H:M:S)", y = "Likelihood")