Skip to content

Instantly share code, notes, and snippets.

@ozagordi
Last active February 21, 2021 22:26
Show Gist options
  • Select an option

  • Save ozagordi/75968766be958a39fc1ddfd4e3376aa5 to your computer and use it in GitHub Desktop.

Select an option

Save ozagordi/75968766be958a39fc1ddfd4e3376aa5 to your computer and use it in GitHub Desktop.
Plot del numero di dosi a disposizione ogni giorno
library(shiny)
library(readr)
library(dplyr)
library(tidyr)
library(ggplot2)
options(shiny.trace=TRUE)
map_names <- c(
"Abruzzo", "Basilicata", "Calabria", "Campania", "Emilia Romagna", "Friuli Venezia Giulia",
"Lazio", "Liguria", "Lombardia", "Marche", "Molise", "Provincia Autonoma Bolzano",
"Provincia Autonoma Trento", "Piemonte", "Puglia", "Sardegna", "Sicilia", "Toscana",
"Umbria", "Valle d'Aosta", "Veneto", "Italia"
)
names(map_names) <- c(
"ABR", "BAS", "CAL", "CAM", "EMR", "FVG", "LAZ", "LIG", "LOM", "MAR", "MOL",
"PAB", "PAT", "PIE", "PUG", "SAR", "SIC", "TOS", "UMB", "VDA", "VEN", "ITA"
)
if(utils::sessionInfo()[1][[1]]$os == "darwin17.0"){
url_stem <- "~/Projects/covid19-opendata-vaccini/"
} else {
url_stem <- "https://raw.githubusercontent.com/italia/covid19-opendata-vaccini/master/"
}
consegne_url <- paste0(url_stem, "dati/consegne-vaccini-latest.csv")
somministrazioni_url <- paste0(url_stem, "dati/somministrazioni-vaccini-summary-latest.csv")
consegne_vaccini_latest_raw <-
read_csv(consegne_url) %>%
select(data_consegna, area, numero_dosi)
somministrazioni_vaccini_summary_latest_raw <-
read_csv(somministrazioni_url) %>%
select(data_somministrazione, area, totale)
# Define server logic required to draw a histogram
shinyServer(function(input, output) {
consegne_vaccini_latest <- reactive({
req(input$target_area)
if(input$target_area != "ITA"){
consegne_vaccini_latest_raw %>%
filter(area == input$target_area)
} else {
consegne_vaccini_latest_raw
}
})
somministrazioni_vaccini_summary_latest <- reactive({
req(input$target_area)
if(input$target_area != "ITA"){
somministrazioni_vaccini_summary_latest_raw %>%
filter(area == input$target_area)
} else {
somministrazioni_vaccini_summary_latest_raw
}
})
date_consegne <- reactive({
req(input$target_area)
consegne_vaccini_latest() %>%
pull(data_consegna) %>%
unique()
})
output$distPlot <- renderPlot({
req(input$target_area)
print(consegne_vaccini_latest() %>% pull(area) %>% unique())
min_date <- min(
consegne_vaccini_latest()$data_consegna,
somministrazioni_vaccini_summary_latest()$data_somministrazione
)
max_date <- max(
consegne_vaccini_latest()$data_consegna,
somministrazioni_vaccini_summary_latest()$data_somministrazione
)
all_dates <- seq(min_date, max_date, by = "1 day")
all_areas <- consegne_vaccini_latest() %>%
pull(area) %>%
unique()
all_values <- expand_grid(all_dates, all_areas) %>%
rename(data = all_dates, area = all_areas)
consegne_filled <- all_values %>%
full_join(
consegne_vaccini_latest(),
by = c("data" = "data_consegna", "area")
) %>%
replace_na(list(numero_dosi = 0))
stock <- consegne_filled %>%
dplyr::left_join(
somministrazioni_vaccini_summary_latest(),
by = c("data" = "data_somministrazione", "area")
) %>%
replace_na(list(totale = 0)) %>%
rename(consegne = numero_dosi, somministrazioni = totale) %>%
mutate(delta = consegne - somministrazioni) %>%
group_by(data) %>%
summarise(daily_delta = sum(delta)) %>%
mutate(stock = order_by(data, cumsum(daily_delta)))
max_bar_height <- max(stock$stock)
x_consegne <- mean(stock$data)
h_consegne <- -max_bar_height / 10
hy <- h_consegne * .4
hyend <- hy * .8
p <- ggplot(stock, aes(data, stock)) + geom_col(fill = "#56B4E9") +
scale_y_continuous(
labels = scales::label_number()
) +
annotate(
"segment", x = date_consegne(), xend = date_consegne(), y = hy, yend = hyend,
color = "#E69F00", size = 0.67,
arrow = arrow(ends = "last", length = unit(0.08, "inches"), type = "closed")
) +
annotate(
"text", x = x_consegne, y = h_consegne,
label = 'bold("CONSEGNE")', color = "#E69F00", parse = TRUE
) +
labs(
title = "Vaccinazioni: dosi disponibili",
# subtitle = map_names[input$target_area],
x="", y="numero dosi"
) +
ylim(1.2 * h_consegne, NA)
p
})
})
library(tidyverse)
target_area <- "SAR"
map_names <- c(
"Abruzzo", "Basilicata", "Calabria", "Campania", "Emilia Romagna", "Friuli Venezia Giulia",
"Lazio", "Liguria", "Lombardia", "Marche", "Molise", "Provincia Autonoma Bolzano",
"Provincia Autonoma Trento", "Piemonte", "Puglia", "Sardegna", "Sicilia", "Toscana",
"Umbria", "Valle d'Aosta", "Veneto"
)
names(map_names) <- c(
"ABR", "BAS", "CAL", "CAM", "EMR", "FVG", "LAZ", "LIG", "LOM", "MAR", "MOL",
"PAB", "PAT", "PIE", "PUG", "SAR", "SIC", "TOS", "UMB", "VDA", "VEN"
)
if(utils::sessionInfo()[1][[1]]$os == "darwin17.0"){
url_stem <- "Projects/covid19-opendata-vaccini/"
} else {
url_stem <- "https://raw.githubusercontent.com/italia/covid19-opendata-vaccini/master/"
}
consegne_url <- paste0(url_stem, "dati/consegne-vaccini-latest.csv")
somministrazioni_url <- paste0(url_stem, "dati/somministrazioni-vaccini-summary-latest.csv")
consegne_vaccini_latest <-
read_csv(consegne_url) %>%
select(data_consegna, area, numero_dosi) %>%
filter(area == target_area)
somministrazioni_vaccini_summary_latest <-
read_csv(somministrazioni_url) %>%
select(data_somministrazione, area, totale) %>%
filter(area == target_area)
min_date <- min(
consegne_vaccini_latest$data_consegna,
somministrazioni_vaccini_summary_latest$data_somministrazione
)
max_date <- max(
consegne_vaccini_latest$data_consegna,
somministrazioni_vaccini_summary_latest$data_somministrazione
)
date_consegne <- consegne_vaccini_latest %>%
pull(data_consegna) %>%
unique()
all_dates <- seq(min_date, max_date, by = "1 day")
all_areas <- consegne_vaccini_latest %>%
pull(area) %>%
unique()
all_values <- expand_grid(all_dates, all_areas) %>%
rename(data = all_dates, area = all_areas)
consegne_filled <- all_values %>%
full_join(consegne_vaccini_latest, by = c("data" = "data_consegna", "area")) %>%
replace_na(list(numero_dosi = 0))
stock <-
consegne_filled %>%
left_join(somministrazioni_vaccini_summary_latest, by = c("data" = "data_somministrazione", "area")) %>%
replace_na(list(totale = 0)) %>%
rename(consegne = numero_dosi, somministrazioni = totale) %>%
mutate(delta = consegne - somministrazioni) %>%
group_by(data) %>%
summarise(daily_delta = sum(delta)) %>%
mutate(stock = order_by(data, cumsum(daily_delta)))
max_bar_height <- max(stock$stock)
x_consegne <- mean(stock$data)
h_consegne <- -max_bar_height / 10
hy <- h_consegne * .4
hyend <- hy * .8
p <- ggplot(stock, aes(data, stock)) + geom_col(fill = "#56B4E9") +
scale_y_continuous(
labels = scales::label_number()
) +
annotate(
"segment", x = date_consegne, xend = date_consegne, y = hy, yend = hyend,
color = "#E69F00", size = 0.67,
arrow = arrow(ends = "last", length = unit(0.08, "inches"), type = "closed")
) +
annotate(
"text", x = x_consegne, y = h_consegne,
label = 'bold("CONSEGNE")', color = "#E69F00", parse = TRUE
) +
labs(
title = "Vaccinazioni: dosi disponibili",
subtitle = map_names[target_area],
x="", y="numero dosi"
) +
ylim(1.2 * h_consegne, NA)
p
# ggsave("~/Desktop/stock_vaccini_ita.png", p, width = 220, height = 150, units="mm")
library(shiny)
sel_names <- c(
"Italia" = "ITA",
"Abruzzo" = "ABR",
"Basilicata" = "BAS",
"Calabria" = "CAL",
"Campania" = "CAM",
"Emilia Romagna" = "EMR",
"Friuli Venezia Giulia" = "FVG",
"Lazio" = "LAZ",
"Liguria" = "LIG",
"Lombardia" = "LOM",
"Marche" = "MAR",
"Molise" = "MOL",
"Provincia autonoma Bolzano" = "PAB",
"Provincia autonoma Trento" = "PAT",
"Piemonte" = "PIE",
"Puglia" = "PUG",
"Sardegna" = "SAR",
"Sicilia" = "SIC",
"Toscana" = "TOS",
"Umbria" = "UMB",
"Valle d'Aosta" = "VDA",
"Veneto" = "VEN"
)
# Define UI for application that draws a histogram
shinyUI(fluidPage(
# Application title
titlePanel(""),
# Sidebar with a slider input for number of bins
fluidRow(
column(width = 4,
offset = 4,
selectInput(
"target_area",
"Regione",
sel_names
)
),
),
fluidRow(plotOutput("distPlot"))
)
)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment