Deaths In Canada
Graphs of weekly deaths in Canada using STATCAN data
Data
STATCAN Table: 13-10-0783-01 (Weekly death counts)
STATCAN Table: 13-10-0768-01 (Weekly death counts, by age group and sex)
STATCAN Table: 13-10-0708-01 (Deaths, by month)
STATCAN Table: 17-10-0009-01 (Population estimates, quarterly)
STATCAN Interactive Graph (Weekly death counts)
STATCAN Table: 13-10-0394-01 (Leading causes of death)
Prepare Data
# Prep data
myCaption <- "www.dblogr.com/ or derekmichaelwright.github.io/dblogr/ | Data: STATCAN\nNote: most recent years data may be incomplete"
myColors <- c("darkgreen", "darkred", "darkorange", "steelblue", "darkblue", "purple4", "magenta3")
myAreas <- c("Canada", "Quebec", "Ontario", "British Columbia",
"Alberta", "Saskatchewan", "Manitoba", "Nova Scotia",
"Newfoundland and Labrador", "New Brunswick", "Prince Edward Island",
"Northwest Territories", "Nunavut", "Yukon")
#
# d1 = Deaths per Week (2010-2023)
mySeasons <- paste(2009:2023, 2010:2024, sep = "-")
myGroups <- c(rep("pre-2020",10), mySeasons[11:length(mySeasons)])
d1 <- read.csv("1310078301_databaseLoadingData.csv") %>%
rename(Date=REF_DATE, Area=GEO, Value=VALUE) %>%
mutate(Date = as.Date(Date),
Year = as.numeric(substr(Date, 1, 4)),
Month = as.numeric(substr(Date, 6, 7)),
Group = ifelse(Year < 2020, "<2020", Year),
Group = factor(Group, levels = c("<2020", "2020", "2021", "2022", "2023")),
JulianDay = lubridate::yday(Date),
AdjJulianDay = ifelse(Month < 8, JulianDay + 365, JulianDay),
Area = gsub(", place of occurrence", "", Area),
Area = factor(Area, levels = myAreas)) %>%
arrange(Date)
# filter incomplete new data
for(i in unique(d1$Area)) {
mymin <- d1 %>% filter(Area == i, Year < 2020) %>% pull(Value) %>% min()
d1 <- d1 %>% filter(!(Area == i & Value < mymin))
}
# Calculate Year Group
j <- 1
for(i in 1:nrow(d1)) {
if(d1$Month[i] < 8) { mySwitch <- T }
d1$Season[i] <- mySeasons[j]
d1$SeasonGroup[i] <- myGroups[j]
if(d1$Month[i] > 7 & mySwitch == T) { j <- j + 1; mySwitch <- F }
}
d1 <- d1 %>%
mutate(Season = factor(Season, levels = mySeasons),
SeasonGroup = factor(SeasonGroup, levels = unique(myGroups)))
# d2 = Deaths per Week, by gender and age (2010-2023)
d2 <- read.csv("1310076801_databaseLoadingData.csv") %>%
rename(Date=REF_DATE, Age=Age.at.time.of.death, Value=VALUE, Area=GEO) %>%
mutate(Date = as.Date(Date),
Age = gsub("Age at time of death, ", "", Age),
Year = as.numeric(substr(Date, 1, 4)),
Month = as.numeric(substr(Date, 6, 7)),
Group = ifelse(Year < 2020, "<2020", Year),
Group = factor(Group, levels = c("<2020", "2020", "2021", "2022", "2023")),
JulianDay = lubridate::yday(Date),
AdjJulianDay = ifelse(Month < 8, JulianDay + 365, JulianDay),
Area = gsub(", place of occurrence", "", Area),
Area = factor(Area, levels = myAreas)) %>%
arrange(Date)
# Calculate Year Group
j <- 1
for(i in 1:nrow(d2)) {
if(d2$Month[i] < 8) { mySwitch <- T }
d2$Season[i] <- mySeasons[j]
d2$SeasonGroup[i] <- myGroups[j]
if(d2$Month[i] > 7 & mySwitch == T) { j <- j + 1; mySwitch <- F }
}
d2 <- d2 %>%
mutate(Season = factor(Season, levels = mySeasons),
SeasonGroup = factor(SeasonGroup, levels = unique(myGroups)))
# d3 = Yearly death rate (1991-2023)
p1 <- read.csv("1710000901_databaseLoadingData.csv") %>%
select(Area=GEO, Year=REF_DATE, Population=VALUE) %>%
filter(Year %in% paste0(1991:2023,"-01")) %>%
mutate(Year = as.numeric(gsub("-01","",Year)))
#filter(Month == 1) %>% select(Area, Year, Population=Value)
p2 <- read.csv("1710000501_databaseLoadingData.csv") %>%
select(Area=GEO, Year=REF_DATE, Sex, Age.group, Population=VALUE)
yy <- d1 %>% filter(Year > 2020) %>%
group_by(Area, Year) %>%
summarise(Value = sum(Value)) %>%
mutate(Month.of.death = "Total")
d3 <- read.csv("1310070801_databaseLoadingData.csv") %>%
rename(Year=1, Area=GEO, Value=VALUE, Unit=UOM) %>%
mutate(Month.of.death = gsub("Month of death, |, month of death", "",
Month.of.death),
Area = gsub(", place of residence", "", Area),
Area = factor(Area, levels = myAreas)) %>%
filter(Unit == "Number") %>%
bind_rows(yy) %>%
rename(Total.Deaths=Value) %>%
left_join(p1, by = c("Area", "Year")) %>%
mutate(Death.Rate = 1000 * Total.Deaths / Population) %>%
filter(Month.of.death == "Total", !is.na(Area)) %>%
mutate(Group = ifelse(Year < 2020, "<2020", Year),
Group = factor(Group, levels = c("<2020", "2020", "2021", "2022", "2023")))
#
d4 <- read.csv("1310039401_databaseLoadingData.csv") %>%
select(Year=REF_DATE, Area=GEO, Sex, Age = Age.at.time.of.death,
Cause = Leading.causes.of.death..ICD.10.,
Measurement= Characteristics, Value=VALUE, Unit=UOM)
Total Deaths & Death Rates 1991-2022
# Prep data
xx <- d3 %>% filter(Area == "Canada")
# Plot
mp1 <- ggplot(xx, aes(x = Year, y = Total.Deaths / 1000,
fill = Group, alpha = Group)) +
geom_col(color = "black") +
scale_fill_manual(name = NULL, values = myColors) +
scale_alpha_manual(name = NULL, values = c(0.4,0.8,0.8,0.8,0.8,0.8)) +
scale_x_continuous(breaks = c(1991, seq(1995,2020, by = 5))) +
scale_y_continuous(minor_breaks = seq(0, 400, by = 20)) +
theme_agData() +
labs(subtitle = "(A) Total Number of Deaths Per Year in Canada",
y = "Thousand Deaths", x = NULL, caption = "")
mp2 <- ggplot(xx, aes(x = Year, y = Death.Rate,
fill = Group, alpha = Group)) +
geom_col(color = "black") +
scale_fill_manual(name = NULL, values = myColors) +
scale_alpha_manual(name = NULL, values = c(0.4,0.8,0.8,0.8,0.8,0.8)) +
scale_x_continuous(breaks = c(1991, seq(1995,2020, by = 5))) +
scale_y_continuous(minor_breaks = seq(0, 400, by = 20)) +
theme_agData() +
labs(subtitle = "(B) Death Rate Per Year in Canada",
y = "Deaths / Thousand", x = NULL, caption = myCaption)
mp <- ggarrange(mp1, mp2, ncol = 2, legend = "none", common.legend = T)
ggsave("canada_deaths_01_01.png", mp, width = 10, height = 4, bg = "white")
Total Deaths 2010-2023
# Create plotting function
ggWeeklyDeaths <- function(myArea = "Canada", xmin = 2010) {
# Prep data
xmax <- max(d1$Year)
vv <- as.Date(paste0(as.character(xmin:xmax),"-01-01"))
xx <- d1 %>% filter(Area == myArea, Year >= xmin)
#
myMax <- max(xx %>% filter(Year < 2020) %>% pull(Value), na.rm = T)
# Plot
ggplot(xx, aes(x = Date, y = Value, fill = Group)) +
geom_col(alpha = 0.7) +
geom_vline(xintercept = vv, lty = 2, alpha = 0.5) +
geom_hline(yintercept = myMax, alpha = 0.2) +
scale_fill_manual(values = myColors) +
scale_x_date(date_breaks = "1 year", date_labels = "%Y",
minor_breaks = "1 year") +
theme_agData(legend.position = "none") +
labs(title = myArea, y = "Weekly Deaths", x = NULL, caption = myCaption)
}
Ontario
British Columbia
mp <- ggWeeklyDeaths("British Columbia")
ggsave("canada_deaths_02_04.png", mp, width = 8, height = 4)
Alberta
Saskatchewan
Total Deaths 2016-2023
Canada
mp <- ggWeeklyDeaths("Canada", xmin = 2016)
ggsave("canada_deaths_03_01.png", mp, width = 8, height = 4)
Ontario
mp <- ggWeeklyDeaths("Ontario", xmin = 2016)
ggsave("canada_deaths_03_02.png", mp, width = 8, height = 4)
Quebec
mp <- ggWeeklyDeaths("Quebec", xmin = 2016)
ggsave("canada_deaths_03_03.png", mp, width = 8, height = 4)
British Columbia
mp <- ggWeeklyDeaths("British Columbia", xmin = 2016)
ggsave("canada_deaths_03_04.png", mp, width = 8, height = 4)
Alberta
mp <- ggWeeklyDeaths("Alberta", xmin = 2016)
ggsave("canada_deaths_03_05.png", mp, width = 8, height = 4)
Cummulative Deaths
# Prep data
xx <- d1 %>% mutate(Year = as.numeric(as.character(Year))) %>%
select(Date, Year, JulianDay, Group, Area, Value) %>%
arrange(Area, Date) %>%
spread(Area, Value)
for(i in 5:ncol(xx)) {
for(k in min(xx$Year):max(xx$Year)) {
xx[xx$Year == k, i] <- cumsum(xx[xx$Year == k,i])
}
}
xx <- xx %>% gather(Area, Value, 5:ncol(.)) %>%
mutate(Area = factor(Area, levels = myAreas)) %>%
filter(Area %in% myAreas)
# Plot
mp <- ggplot(xx, aes(x = JulianDay, y = Value / 1000,
group = Year, color = Group, alpha = Group)) +
geom_line() +
facet_wrap(Area ~ ., scales = "free_y", ncol = 5) +
scale_color_manual(name = NULL, values = myColors) +
scale_alpha_manual(name = NULL, values = c(0.5,1,1,1,1)) +
theme_agData(legend.position = "bottom") +
labs(y = "Thousand Deaths", x = "Julian Day", caption = myCaption)
ggsave("canada_deaths_04_01.png", mp, width = 15, height = 8)
Respiratory Season Graphs
Plotting function
# Create plotting function
ggRespSeasons <- function(myArea) {
# Prep data
xx <- d1 %>% filter(Area == myArea)
zz <- xx %>% filter(Date == "2020-03-14")
#
myBreaks <- c(213, 244, 274, 305, 335,
366, 397, 425, 456, 486, 517, 547, 577)
myLabels <- c("Aug","Sept","Oct","Nov","Dec",
"Jan","Feb","Mar","Apr", "May","June","July","Aug")
# Plot
ggplot(xx, aes(x = AdjJulianDay, y = Value, group = Season,
color = SeasonGroup, alpha = SeasonGroup, size = SeasonGroup)) +
geom_line() +
geom_point(data = zz, size = 2, pch = 13, color = "black", alpha = 0.7) +
facet_wrap(Area ~ ., scales = "free_y", ncol = 5) +
scale_color_manual(name = NULL, values = myColors) +
scale_alpha_manual(name = NULL, values = c(0.2,0.8,0.8,0.8,0.8,0.8)) +
scale_size_manual(name = NULL, values = c(0.5,1,1,1,1,1)) +
scale_x_continuous(breaks = myBreaks, labels = myLabels) +
theme_agData(legend.position = "bottom",
axis.text.x = element_text(angle = 45, hjust = 1)) +
labs(y = "Deaths Per Week", x = NULL, caption = myCaption)
}
British Columbia
mp <- ggRespSeasons("British Columbia")
ggsave("canada_deaths_05_04.png", mp, width = 6, height = 4)
Saskatchewan
Respiratory Season Graphs by Age Group
# Create plotting function
ggRespSeasonsAge <- function(myArea = "Canada") {
# Prep data
xx <- d2 %>% filter(Area == myArea, Sex == "Both sexes", Age != "all ages")
zz <- xx %>% filter(Date == "2020-03-14")
#
myBreaks <- c(213, 244, 274, 305, 335,
366, 397, 425, 456, 486, 517, 547, 577)
myLabels <- c("Aug","Sept","Oct","Nov","Dec",
"Jan","Feb","Mar","Apr", "May","June","July", "Aug")
# Plot
ggplot(xx, aes(x = AdjJulianDay, y = Value, group = Season,
color = SeasonGroup, alpha = SeasonGroup, size = SeasonGroup)) +
geom_line() +
geom_point(data = zz, size = 1.5, pch = 13, color = "black", alpha = 0.7) +
facet_grid(. ~ Age, scales = "free_y") +#labeller = label_wrap_gen(width = 10)
scale_color_manual(name = NULL, values = myColors) +
scale_alpha_manual(name = NULL, values = c(0.4,0.8,0.8,0.8,0.8)) +
scale_size_manual(name = NULL, values = c(0.3,0.75,0.75,0.75,0.75,0.75)) +
scale_x_continuous(breaks = myBreaks, labels = myLabels) +
theme_agData(legend.position = "bottom",
axis.text.x = element_text(angle = 45, hjust = 1)) +
labs(title = myArea, y = "Deaths Per Week", x = NULL, caption = myCaption)
}
Canada
mp <- ggRespSeasonsAge(myArea = "Canada")
ggsave("canada_deaths_06_01.png", mp, width = 10, height = 4)
Ontario
Quebec
British Columbia
mp <- ggRespSeasonsAge("British Columbia")
ggsave("canada_deaths_06_04.png", mp, width = 10, height = 4)
Alberta
Yearly Deaths by Age Group
# Create plotting function
ggYearlyDeaths <- function(myArea = "Canada") {
# Prep data
xx <- d2 %>%
filter(Area == myArea,
Sex == "Both sexes", Age != "all ages") %>%
group_by(Age, Year, Group) %>%
summarise(Value = sum(Value, na.rm = T))
# Plot
ggplot(xx, aes(x = Year, y = Value / 1000, fill = Group, alpha = Group)) +
geom_col(color = "black") +
facet_grid(. ~ Age) +
scale_fill_manual(name = NULL, values = myColors) +
scale_alpha_manual(name = NULL, values = c(0.4,0.8,0.8,0.8,0.8)) +
scale_x_continuous(breaks = seq(2010, 2022, 2)) +
theme_agData(legend.position = "none",
axis.text.x = element_text(angle = 45, hjust = 1)) +
labs(title = myArea, caption = myCaption,
y = "Thousand Deaths", x = NULL)
}
Canada
# Plot
mp <- ggYearlyDeaths(myArea = "Canada")
ggsave("canada_deaths_07_01.png", mp, width = 10, height = 4)
Ontario
# Plot
mp <- ggYearlyDeaths(myArea = "Ontario")
ggsave("canada_deaths_07_02.png", mp, width = 10, height = 4)
Quebec
# Plot
mp <- ggYearlyDeaths(myArea = "Quebec")
ggsave("canada_deaths_07_03.png", mp, width = 10, height = 4)
British Columbia
# Plot
mp <- ggYearlyDeaths(myArea = "British Columbia")
ggsave("canada_deaths_07_04.png", mp, width = 10, height = 4)
Alberta
# Plot
mp <- ggYearlyDeaths(myArea = "Alberta")
ggsave("canada_deaths_07_05.png", mp, width = 10, height = 4)
Death Rate - Ages 65+
# Prep data
d2.1 <- d2 %>%
filter(Sex == "Both sexes", !is.na(Value),
Age %in% c("65 to 84 years", "84 years and over")) %>%
group_by(Year, Group, Area) %>%
summarise(Deaths = sum(Value, na.rm = T))
pi <- p2 %>%
filter(Sex == "Both sexes",
Age.group %in% c("65 to 69 years", "70 to 74 years",
"75 to 79 years", "80 to 84 years",
"85 to 89 years", "90 to 94 years",
"95 to 99 years", "100 years and over")) %>%
group_by(Year, Area) %>%
summarise(Population = sum(Population, na.rm = T))
d2.1 <- d2.1 %>% left_join(pi, by = c("Year","Area")) %>%
mutate(`Deaths Per 1000 People` = 1000 * Deaths / Population,
Area = factor(Area, levels = myAreas))
Canada
# Prep data
xx <- d2.1 %>% filter(Area == "Canada") %>% select(-Population) %>%
gather(Trait, Value, 4:5)
# Plot
mp <- ggplot(xx, aes(x = Year, y = Value, fill = Group)) +
geom_col(color = "black", alpha = 0.7) +
facet_wrap(Trait ~ ., scales= "free_y") +
scale_fill_manual(values = myColors) +
scale_x_continuous(breaks = min(xx$Year):max(xx$Year)) +
theme_agData(legend.position = "none",
axis.text.x = element_text(angle = 45, hjust = 1)) +
labs(title = "Canada - Ages 65+",
x = NULL, y = NULL, caption = myCaption)
ggsave("canada_deaths_08_01.png", mp, width = 10, height = 4)
Provinces
# Plot
mp <- ggplot(d2.1, aes(x = Year, y = `Deaths Per 1000 People`, fill = Group)) +
geom_col(color = "black", alpha = 0.7) +
facet_wrap(Area ~ ., scales= "free_y", ncol = 5) +
scale_fill_manual(values = myColors) +
theme_agData(legend.position = "none") +
labs(title = "Canada - Ages 65+",
x = NULL, caption = myCaption)
ggsave("canada_deaths_08_02.png", mp, width = 14, height = 8)
Death Rate - Ages 0-44
# Prep data
d2.2 <- d2 %>%
filter(Sex == "Both sexes", Age == "0 to 44 years") %>%
group_by(Year, Group, Area) %>%
summarise(Value = sum(Value, na.rm = T))
myAges <- c("0 to 4 years", "5 to 9 years", "10 to 14 years",
"15 to 19 years", "20 to 24 years", "25 to 29 years",
"30 to 34 years", "35 to 39 years", "40 to 44 years")
pi <- p2 %>% filter(Age.group %in% myAges) %>%
group_by(Year, Area) %>% summarise(Population = sum(Population))
d2.2 <- d2.2 %>% left_join(pi, by = c("Year", "Area")) %>%
rename(Deaths=Value) %>%
mutate(`Deaths Per 10000 People` = 10000 * Deaths / Population,
Area = factor(Area, levels = myAreas))
Canada
# Prep data
xx <- d2.2 %>% filter(Area == "Canada") %>% select(-Population) %>%
gather(Trait, Value, 4:5)
# Plot
mp <- ggplot(xx, aes(x = Year, y = Value, fill = Group)) +
geom_col(color = "black", alpha = 0.7) +
facet_wrap(Trait ~ ., scales= "free_y") +
scale_fill_manual(values = myColors) +
scale_x_continuous(breaks = min(xx$Year):max(xx$Year)) +
theme_agData(legend.position = "none",
axis.text.x = element_text(angle = 45, hjust = 1)) +
labs(title = "Canada - Ages 0 - 44",
x = NULL, y = NULL, caption = myCaption)
ggsave("canada_deaths_08_03.png", mp, width = 10, height = 4)
Provinces
# Plot
mp <- ggplot(d2.2, aes(x = Year, y = `Deaths Per 10000 People`, fill = Group)) +
geom_col(color = "black", alpha = 0.7) +
facet_wrap(Area ~ ., scales= "free_y") +
scale_fill_manual(values = myColors) +
theme_agData(legend.position = "none") +
labs(title = "Canada - Ages 0 - 44",
x = NULL, caption = myCaption)
ggsave("canada_deaths_08_04.png", mp, width = 14, height = 8)
BC Drug Overdoses
# Prep data
yy <- read_xlsx("data_canada_overdoses.xlsx", "BC Age") %>%
gather(Year, Overdoses, 2:ncol(.)) %>%
mutate(Overdoses = ifelse(`Age Group` == "40-49", Overdoses / 2, Overdoses)) %>%
filter(`Age Group` %in% c("< 19","19-29","30-39","40-49")) %>%
group_by(Year) %>%
summarise(Overdoses = sum(Overdoses, na.rm = T)) %>%
mutate(Year = as.integer(Year))
xx <- d2 %>% filter(Area == "British Columbia", Sex == "Both sexes",
Age == "0 to 44 years") %>%
group_by(Year) %>%
summarise(Deaths = sum(Value, na.rm = T)) %>%
left_join(yy, by = "Year") %>%
filter(!is.na(Overdoses)) %>%
mutate(Deaths = Deaths - Overdoses) %>%
gather(Measurement, Value, 2:3) %>%
mutate(Measurement = factor(Measurement, levels = c("Overdoses","Deaths")))
x1 <- xx %>% filter(Year < 2015, Measurement == "Overdoses") %>% pull(Value) %>% max()
x2 <- xx %>% filter(Year == 2019, Measurement == "Deaths") %>% pull(Value) %>% max()
# Plot
mp <- ggplot(xx, aes(x = Year, y = Value, fill = Measurement)) +
geom_col(color = "black", alpha = 0.7, position = "dodge") +
geom_hline(yintercept = x1, alpha = 0.7, lty = 3) +
geom_hline(yintercept = x2, alpha = 0.7, lty = 2) +
scale_fill_manual(name = NULL, values = myColors[2:1],
labels = c("Drug Overdoses", "Other Deaths")) +
scale_x_continuous(breaks = 2011:2022, minor_breaks = 2011:2022) +
theme_agData(legend.position = "bottom") +
labs(title = "British Columbia - Ages 0 - 44",
y = "Deaths", x = NULL, caption = myCaption)
ggsave("canada_deaths_08_05.png", mp, width = 6, height = 4)
sum(xx$Value[xx$Year%in%2021:2022 & xx$Measurement == "Deaths"] - xx$Value[xx$Year==2020 & xx$Measurement=="Deaths"])
## [1] 502.5
sum(xx$Value[xx$Year%in%2020:2022 & xx$Measurement == "Deaths"] - xx$Value[xx$Year==2019 & xx$Measurement=="Overdoses"])
## [1] 3295.5
sum(xx$Value[xx$Year%in%2015:2022 & xx$Measurement == "Deaths"] - xx$Value[xx$Year==2014 & xx$Measurement=="Overdoses"])
## [1] 10035.5
SK Drug Overdoses
# Prep data
yy <- read_xlsx("data_canada_overdoses.xlsx", "SK Age") %>%
gather(Year, Overdoses, 3:ncol(.)) %>%
mutate(Overdoses = ifelse(`Age Group` == "40 - 49", Overdoses / 2, Overdoses)) %>%
filter(`Age Group` %in% c("0 - 9","10 - 19","20 - 29","30 - 39","40 - 49")) %>%
group_by(Year) %>%
summarise(Overdoses = sum(Overdoses, na.rm = T)) %>%
mutate(Year = as.integer(Year))
xx <- d2 %>% filter(Area == "Saskatchewan", Sex == "Both sexes",
Age == "0 to 44 years") %>%
group_by(Year) %>%
summarise(Deaths = sum(Value, na.rm = T)) %>%
left_join(yy, by = "Year") %>%
filter(!is.na(Overdoses)) %>%
mutate(Deaths = Deaths - Overdoses) %>%
gather(Measurement, Value, 2:3) %>%
mutate(Measurement = factor(Measurement, levels = c("Overdoses","Deaths")))
x1 <- xx %>% filter(Year < 2015, Measurement == "Overdoses") %>% pull(Value) %>% max()
x2 <- xx %>% filter(Year == 2019, Measurement == "Deaths") %>% pull(Value) %>% max()
# Plot
mp <- ggplot(xx, aes(x = Year, y = Value, fill = Measurement)) +
geom_col(color = "black", alpha = 0.7, position = "dodge") +
geom_hline(yintercept = x1, alpha = 0.7, lty = 3) +
geom_hline(yintercept = x2, alpha = 0.7, lty = 2) +
scale_fill_manual(name = NULL, values = myColors[2:1],
labels = c("Drug Overdoses", "Other Deaths")) +
scale_x_continuous(breaks = 2011:2022, minor_breaks = 2011:2022) +
theme_agData(legend.position = "bottom") +
labs(title = "Saskatchewan - Ages 0 - 44",
y = "Deaths", x = NULL, caption = myCaption)
ggsave("canada_deaths_08_06.png", mp, width = 6, height = 4)
sum(xx$Value[xx$Year%in%2021:2022 & xx$Measurement == "Deaths"] - xx$Value[xx$Year==2020 & xx$Measurement=="Deaths"])
## [1] 214
sum(xx$Value[xx$Year%in%2020:2022 & xx$Measurement == "Deaths"] - xx$Value[xx$Year==2019 & xx$Measurement=="Overdoses"])
## [1] 1973.5
sum(xx$Value[xx$Year%in%2015:2022 & xx$Measurement == "Deaths"] - xx$Value[xx$Year==2014 & xx$Measurement=="Overdoses"])
## [1] 4918.5
Weekly Deaths Ages 0-44
ggWeeklyDeaths044 <- function(myArea = "Canada") {
# Prep data
xx <- d2 %>%
filter(Area == myArea, Age == "0 to 44 years", Sex == "Both sexes")
vv <- as.Date(paste0(as.character(2010:2023),"-01-01"))
# Plot
ggplot(xx, aes(x = Date, y = Value, fill = Group)) +
geom_col(alpha = 0.7) +
geom_vline(xintercept = vv, lty = 2, alpha = 0.5) +
scale_fill_manual(values = myColors) +
scale_x_date(date_breaks = "1 year", date_labels = "%Y",
minor_breaks = "1 year") +
theme_agData(legend.position = "none") +
labs(title = paste(myArea, "- Ages 0 - 44"),
x = NULL, y = "Weekly Deaths", caption = myCaption)
}
Canada
# Plot
mp <- ggWeeklyDeaths044(myArea = "Canada")
ggsave("canada_deaths_09_01.png", mp, width = 8, height = 4)
Ontario
# Plot
mp <- ggWeeklyDeaths044(myArea = "Ontario")
ggsave("canada_deaths_09_02.png", mp, width = 8, height = 4)
Quebec
# Plot
mp <- ggWeeklyDeaths044(myArea = "Quebec")
ggsave("canada_deaths_09_03.png", mp, width = 8, height = 4)
British Columbia
# Plot
mp <- ggWeeklyDeaths044(myArea = "British Columbia")
ggsave("canada_deaths_09_04.png", mp, width = 8, height = 4)
Alberta
# Plot
mp <- ggWeeklyDeaths044(myArea = "Alberta")
ggsave("canada_deaths_09_05.png", mp, width = 8, height = 4)
Weekly Deaths By Sex
Canada
# Prep data
xx <- d2 %>% filter(Area %in% "Canada", Sex != "Both sexes", Year > 2016)
# Plot
mp <- ggplot(xx, aes(x = Date, y = Value, group = Sex, color = Sex)) +
geom_line() +
facet_grid(Area ~ Age) +
scale_color_manual(name = NULL, values = c("palevioletred3", "steelblue")) +
theme_agData(legend.position = "bottom",
axis.text.x = element_text(angle = 45, hjust = 1)) +
labs(y = "Deaths Per Week", x = NULL, caption = myCaption)
ggsave("canada_deaths_10_01.png", mp, width = 8, height = 4)
2020
# Prep data
xx <- d2 %>% filter(Area %in% "Canada", Sex != "Both sexes", Year >= 2020)
# Plot
mp <- ggplot(xx, aes(x = Date, y = Value, group = Sex, color = Sex)) +
geom_line(size = 1) +
facet_grid(Area ~ Age) +
scale_color_manual(name = NULL, values = c("palevioletred3", "steelblue")) +
scale_x_date(date_breaks = "1 year", date_labels = "%Y",
minor_breaks = "1 year") +
theme_agData(legend.position = "bottom",
axis.text.x = element_text(angle = 45, hjust = 1)) +
labs(y = "Deaths Per Week", x = NULL, caption = myCaption)
ggsave("canada_deaths_10_02.png", mp, width = 8, height = 4)
Yearly Death Rate
Canada
# Plot
mp <- ggplot(d3 %>% filter(Area == "Canada"),
aes(x = Year, y = Death.Rate, fill = Group, alpha = Group)) +
geom_col(color = "black") +
scale_fill_manual(values = myColors) +
scale_alpha_manual(name = NULL, values = c(0.4,0.8,0.8,0.8,0.8)) +
scale_x_continuous(breaks = seq(1990, 2020, 5)) +
theme_agData(legend.position = "none") +
labs(title = "Death Rate - Canada",
y = "Deaths Per Thousand People", x = NULL, caption = myCaption)
ggsave("canada_deaths_11_01.png", mp, width = 6, height = 4)
Provinces
# Plot
mp <- ggplot(d3, aes(x = Year, y = Death.Rate, fill = Group, alpha = Group)) +
geom_col(color = "black", lwd = 0.2) +
scale_fill_manual(name = NULL, values = myColors) +
scale_alpha_manual(name = NULL, values = c(0.4,0.8,0.8,0.8,0.8)) +
scale_x_continuous(breaks = seq(1995, 2015, 10)) +
facet_wrap(Area ~ ., ncol = 5) +
theme_agData(legend.position = "none") +
labs(title = "Death Rate - Canada",
y = "Deaths Per Thousand People", x = NULL, caption = myCaption)
ggsave("canada_deaths_11_02.png", mp, width = 10, height = 6)
2019 vs 2020
# Prep data
xx <- d3 %>% filter(Year %in% c(2019, 2020, 2021, 2022)) %>%
filter(!is.na(Total.Deaths), Total.Deaths > 0)
# Plot
mp <- ggplot(xx, aes(x = Year, y = Death.Rate, fill = factor(Year))) +
geom_col(position = "dodge", color = "black", alpha = 0.7) +
facet_grid(. ~ Area, labeller = label_wrap_gen(width = 10)) +
scale_fill_manual(name = NULL, values = myColors) +
theme_agData(legend.position = "bottom",
axis.text.x = element_blank(),
axis.ticks.x = element_blank()) +
labs(title = "Death Rate Change in Canada", subtitle = "2019 and 2020",
y = "Deaths Per Thousand People", x = NULL, caption = myCaption)
ggsave("canada_deaths_11_03.png", mp, width = 13, height = 4)
Change
# Prep data
xx <- d3 %>% filter(Year %in% c(1991, 2019)) %>%
select(Area, Year, Death.Rate) %>%
spread(Year, Death.Rate) %>%
mutate(Change = `2019` - `1991`) %>%
filter(!is.na(Change))
# Plot
mp <- ggplot(xx, aes(x = Area, y = Change)) +
geom_col(color = "black", fill = "darkred", alpha = 0.7) +
theme_agData(axis.text.x = element_text(angle = 45, hjust = 1)) +
labs(title = "Death Rate Change (1991 to 2019)",
subtitle = "Deaths per thousand people",
y = "Change", x = NULL, caption = myCaption)
ggsave("canada_deaths_11_04.png", mp, width = 6, height = 4)
# Prep data
xx <- d3 %>% filter(Year %in% c(1991, 2019, 2020, 2021)) %>%
select(Area, Year, Death.Rate) %>%
spread(Year, Death.Rate) %>%
mutate(Change1 = `2019` - `1991`,
Change2 = `2020` - `2019`,
Change3 = `2021` - `2020`) %>%
filter(!is.na(Change1)) %>%
select(Area, Change1, Change2, Change3) %>%
gather(Trait, Value, 2:4)
myColors <- c(alpha("darkred",0.3), alpha("darkred",0.6), alpha("darkred",0.8))
myLabels <- c(c("1991 to 2019", "2019 to 2020", "2020 to 2021"))
# Plot
mp <- ggplot(xx, aes(x = Area, y = Value, fill = Trait)) +
geom_col(position = "dodge", color = "black") +
scale_fill_manual(values = myColors, labels = myLabels) +
theme_agData(legend.position = "bottom",
axis.text.x = element_text(angle = 45, hjust = 1)) +
labs(title = "Death Rate Change",
subtitle = "Deaths per thousand people",
y = "Change", x = NULL, caption = myCaption)
ggsave("canada_deaths_11_05.png", mp, width = 6, height = 4)
Select Provinces
# Prep data
myAreas <- c("Ontario", "Quebec", "Alberta")
myColors <- c("darkblue", "steelblue", "darkred")
pi <- p1 %>% filter(Year > 2019)
xx <- d1 %>%
filter(Year > 2019, Area %in% myAreas) %>%
left_join(pi, by = c("Area", "Year")) %>%
mutate(Death.Rate = 1000000 * Value / Population,
#Death.Rate = movingAverage(Death.Rate, n = 3),
Area = factor(Area, levels = myAreas)) %>%
filter(!is.na(Death.Rate))
# Plot
mp <- ggplot(xx, aes(x = Date, y = Death.Rate, color = Area)) +
geom_line(size = 1.5, alpha = 0.8) +
scale_color_manual(values = myColors) +
theme_agData(legend.position = "bottom") +
labs(title = "Death Rate 2020", x = "Julian Day",
y = "Deaths per million people per week", caption = myCaption)
ggsave("canada_deaths_11_06.png", mp, width = 6, height = 4)
Heatmap
# Prep data
myAreas <- c("Yukon", "Northwest Territories", "Nunavut")
myColors <- c("white", "darkorange1", "darkred")
pi <- p1 %>% filter(Year > 2019)
xx <- d1 %>%
filter(Year > 2019, !Area %in% myAreas) %>%
left_join(pi %>% select(-Year), by = "Area") %>%
mutate(Death.Rate = 1000000 * Value / Population)
# Plot
mp <- ggplot(xx, aes(x = Date, y = Area, fill = Death.Rate)) +
geom_tile(color = "white", size = 0.35) +
scale_fill_gradientn(colors = myColors, na.value = 'white') +
theme_minimal() +
theme(plot.background = element_rect(fill = "white"),
panel.grid = element_blank()) +
coord_cartesian(clip = 'off') +
theme(legend.position = "bottom",
text = element_text(size = 8)) +
labs(x = NULL, y = NULL, caption = myCaption)
ggsave("canada_deaths_11_07.png", mp, width = 6, height = 4)
Causes of Death
figures_canada_deaths_causes.pdf
# Prep data
#i <- "Total, all causes of death [A00-Y89]"
pdf("figures_canada_deaths_causes.pdf", width = 10, height = 6)
for(i in unique(d4$Cause)) {
# Prep data
xx <- d4 %>% filter(Cause == i)
# Plot
print(
ggplot(xx, aes(x = Year, y = Value, fill = Measurement)) +
geom_col(alpha = 0.7, color = "black") +
facet_wrap(Measurement ~ ., ncol = 2, scale = "free_y") +
theme_agData() +
labs(title = i, x = NULL, y = NULL, caption = myCaption)
)
}
dev.off()
## png
## 2
All Data
# Prep data
xx <- d4 %>%
filter(Measurement == "Age-specific mortality rate per 100,000 population",
Value > 0)
# Plot
mp <- ggplot(xx, aes(x = Year, fill = Area, y = Value)) +
geom_col(color = "black") +
facet_wrap(Cause ~ ., scales = "free_y", ncol = 4) +
theme_agData(legend.position = "none",
axis.text.x = element_text(angle = 45, hjust = 1)) +
labs(title = "COVID-19 Death Rate In Canada",
y = "Deaths per 1000 People", x = NULL, caption = myCaption)
ggsave("canada_deaths_12_01.png", mp, width = 20, height = 30)
1900 - Present
# Prep data
yy <- read_xlsx("data_canada_deaths.xlsx", "Death Rate") %>%
gather(Trait, Value, 2:ncol(.)) %>%
mutate(Value = gsub(",", "", Value),
Value = as.numeric(Value))
xx <- yy %>%
filter(Year %in% 2020:max(d4$Year), Trait == "Death rate (per 1,000)") %>%
pull(Value) %>% max(na.rm = T)
xx <- yy %>% filter(Trait == "Death rate (per 1,000)") %>%
mutate(Group = ifelse(Value >= xx, "higher", "Lower"),
Group = ifelse(Year %in% c(1918, 2020, 2021), "Pandemic", Group))
# Plot
mp <- ggplot(xx, aes(x = Year, y = Value, alpha = Group)) +
geom_col(color = "black", fill = "darkred", size = 0.3) +
scale_x_continuous(breaks = seq(1900, 2020, 20)) +
scale_fill_manual(values = c("darkred", "darkgreen", "darkred")) +
scale_alpha_manual(values = c(0.6, 0.3, 0.8)) +
theme_agData(legend.position = "none") +
labs(title = "Death Rate in Canada", y = "Deaths per 1000 people", x = NULL,
caption = "www.dblogr.com/ or derekmichaelwright.github.io/dblogr/ | Data: Wikipedia")
ggsave("canada_deaths_13_01.png", mp, width = 6, height = 4)
Life Expectancy
https://www150.statcan.gc.ca/n1/pub/91f0015m/91f0015m2021002-eng.htm
# Prep data
yy <- read_xlsx("data_canada_deaths.xlsx", "Life Expectancy") %>%
mutate(Area = factor(Area, levels = Area))
xx <- yy %>% select(Area, `Life expectancy in 2019`,
`Average age at death, due to COVID-19`) %>%
gather(Trait, Value, 2:3) %>%
mutate(Trait = factor(Trait,
levels = c("Life expectancy in 2019", "Average age at death, due to COVID-19")))
# Plot
mp <- ggplot(xx, aes(x = Trait, y = Value, fill = Trait)) +
geom_col(color = "black", alpha = 0.7) +
facet_wrap(. ~ Area, ncol = 4) +
scale_fill_manual(name = NULL, values = c("steelblue", "darkred")) +
coord_cartesian(ylim = c(70, 90)) +
theme_agData(legend.position = "bottom",
axis.text.x = element_blank(),
axis.ticks.x = element_blank()) +
labs(title = "", x = NULL, y = NULL, caption = myCaption)
ggsave("canada_deaths_13_02.png", mp, width = 8, height = 4)
mp <- ggplot(yy, aes(x = Area, fill = Area,
y = `Crude death rate, due to COVID-19 (per thousand)`)) +
geom_col(color = "black") +
theme_agData(legend.position = "none",
axis.text.x = element_text(angle = 45, hjust = 1)) +
labs(title = "COVID-19 Death Rate In Canada",
y = "Deaths per 1000 People", x = NULL, caption = myCaption)
ggsave("canada_deaths_13_03.png", mp, width = 6, height = 4)