Last active
April 8, 2025 06:59
-
-
Save acbass49/496d85fbf5b03921a7bd9adbba2ea223 to your computer and use it in GitHub Desktop.
2024 General Conference Update
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| library(tidyverse) | |
| library(stringr) | |
| library(scales) | |
| library(marquee) | |
| library(ggtext) | |
| library(patchwork) | |
| df <- read.csv("./data/membership.csv") | |
| # dataset downloaded from https://docs.google.com/spreadsheets/d/1ghU8_9CcaW337iUCMoiFDvPV1SMAQCecu2ZfWrx1y9w/edit?gid=0#gid=0 | |
| data <- df[20:(nrow(df)-1),c("Year","Missionaries", "Converts", "Members", "New.Children.of.Record")] |> | |
| mutate(across(everything(), \(x) str_remove_all(x, pattern = fixed(",")))) |> | |
| mutate(across(everything(), as.numeric)) | |
| # add in 2024 data | |
| yr_2024 <- data.frame( | |
| Year = 2024, | |
| Missionaries = 74127, | |
| Converts = 308682, | |
| Members = 17509781, | |
| New.Children.of.Record = 91617 | |
| ) | |
| data <- bind_rows(data, yr_2024) |> | |
| arrange(desc(Year)) | |
| (p1 <- data |> | |
| mutate(across(everything(), \(x) str_remove_all(x, pattern = fixed(",")))) |> | |
| mutate(across(everything(), as.numeric)) |> | |
| filter(Year>=1977) |> | |
| mutate( | |
| converts_per_missionary = Converts/Missionaries | |
| ) |> | |
| select(Year,Missionaries,Converts) |> | |
| ggplot(aes(x=Year, y=Missionaries)) + | |
| geom_line(linewidth = 1.5, color = "grey") + | |
| labs( | |
| title = "<span style='font-size:18pt; font-family:cairo'>Number of <span style='color:grey'>Missionaries</span> Increases</span>", | |
| subtitle = "The missionary count has almost tripled since 1980", | |
| x="Year", | |
| y="Missionary Count")+ | |
| theme(axis.ticks = element_blank(), | |
| axis.title = element_text(size = 14), | |
| axis.text = element_text(size = 10), | |
| panel.background = element_blank(), | |
| text = element_text(face = "bold", family = "Cairo"), | |
| plot.title = element_markdown(), | |
| plot.background = element_rect(fill = "grey95"), | |
| plot.subtitle = element_text(hjust = 0, face = "italic"), | |
| panel.grid = element_line(color = "grey95"), | |
| panel.grid.major.y = element_line(color = "lightgrey", linetype = 'solid'), | |
| plot.caption = element_text(hjust = 1, size = 8, face = "italic"))+ | |
| scale_x_continuous( | |
| breaks = seq(1975,2020,5) | |
| )+ | |
| scale_y_continuous( | |
| breaks = seq(0,500000,25000), | |
| labels = scales::comma_format(), | |
| limits = c(0,100000) | |
| )+ | |
| geom_vline(xintercept = 2012) + | |
| geom_text(aes(x = 2008, y = 20000, label = "Age Change ->"), size=3, family = "cairo")+ | |
| geom_vline(xintercept = 2020) + | |
| geom_text(aes(x = 2016.5, y = 20000, label = "COVID-19 ->"), size=3, family = "cairo") | |
| ) | |
| (p2 <- data |> | |
| mutate(across(everything(), \(x) str_remove_all(x, pattern = fixed(",")))) |> | |
| mutate(across(everything(), as.numeric)) |> | |
| filter(Year>=1977) |> | |
| mutate( | |
| converts_per_missionary = Converts/Missionaries | |
| ) |> | |
| select(Year,Missionaries,Converts) |> | |
| ggplot(aes(x=Year, y=Converts)) + | |
| geom_line(linewidth = 1.5, color = "#097969") + | |
| labs( | |
| title = "<span style='font-size:18pt; font-family:cairo'><span style='color:#097969'>Convert Baptisms</span> Recovering Quickly</span>", | |
| subtitle = "Baptisms Haven't Increased At The Same Rate As Missionaries", | |
| x="Year", | |
| y="Convert Baptisms", | |
| caption = "@mormon_metrics\nSource: General Conference")+ | |
| theme(axis.ticks = element_blank(), | |
| axis.title = element_text(size = 14), | |
| axis.text = element_text(size = 10), | |
| panel.background = element_blank(), | |
| text = element_text(face = "bold", family = "Cairo"), | |
| plot.title = element_markdown(), | |
| plot.background = element_rect(fill = "grey95"), | |
| plot.subtitle = element_text(hjust = 0, face = "italic"), | |
| panel.grid = element_line(color = "grey95"), | |
| panel.grid.major.y = element_line(color = "lightgrey", linetype = 'solid'), | |
| plot.caption = element_text(hjust = 1, size = 8))+ | |
| scale_x_continuous( | |
| breaks = seq(1975,2020,5) | |
| )+ | |
| scale_y_continuous( | |
| breaks = seq(0,500000,100000), | |
| labels = scales::comma_format(), | |
| limits = c(0,400000) | |
| )+ | |
| geom_vline(xintercept = 2012) + | |
| geom_text(aes(x = 2008, y = 50000, label = "Age Change ->"), size=3, family = "cairo")+ | |
| geom_vline(xintercept = 2020) + | |
| geom_text(aes(x = 2016.5, y = 50000, label = "COVID-19 ->"), size=3, family = "cairo")) | |
| (p3 <- p1/p2) | |
| ggsave("./images/3_2024_data_release_1.png", p3, width = 1700, height = 2000, units = "px", dpi = 300) | |
| # possibly do COR baptisms / births to member count total | |
| p4 <- data |> | |
| mutate(across(everything(), \(x) str_remove_all(x, pattern = fixed(",")))) |> | |
| mutate(across(everything(), as.numeric)) |> | |
| filter(Year>=1977) |> | |
| mutate( | |
| converts_per_missionary = Converts/Missionaries | |
| ) |> | |
| ggplot(aes(x=Year, y=converts_per_missionary)) + | |
| geom_point(size = 3, alpha = 0.4, color = "goldenrod3") + | |
| geom_smooth(se=FALSE, color = "goldenrod3", method = "lm") + | |
| labs( | |
| title = "Missionaries Today Have Half The Baptisms As The 80s", | |
| subtitle = "From 8 converts per missionary in 1980s to less than 4 converts per missionary in 2024", | |
| x="Year", | |
| y="Converts Per Missionary", | |
| caption = "@mormon_metrics\nSource: General Conference")+ | |
| theme(axis.ticks = element_blank(), | |
| axis.title = element_text(size = 14), | |
| axis.text = element_text(size = 10), | |
| panel.background = element_blank(), | |
| text = element_text(face = "bold", family = "Cairo"), | |
| plot.title = element_text(hjust = 0, size = 18, face = "bold"), | |
| legend.title = element_blank(), | |
| legend.position = 'top', | |
| legend.background = element_blank(), | |
| legend.box.background = element_blank(), | |
| plot.background = element_rect(fill = "grey95"), | |
| plot.subtitle = element_text(hjust = 0, face = "italic"), | |
| legend.key = element_blank(), | |
| panel.grid = element_line(color = "grey95"), | |
| panel.grid.major.y = element_line(color = "lightgrey", linetype = 'solid'), | |
| plot.caption = element_text(hjust = 1, size = 8))+ | |
| scale_x_continuous( | |
| breaks = seq(1975,2020,5) | |
| )+ | |
| scale_fill_manual(values=c("black"))+ | |
| scale_y_continuous( | |
| breaks = seq(0,10,2), | |
| limits = c(0,10) | |
| ) + | |
| geom_vline(xintercept = 2012) + | |
| geom_text(aes(x = 2008, y = 1, label = "Age Change ->"), size=3, family = "cairo")+ | |
| geom_vline(xintercept = 2020) + | |
| geom_text(aes(x = 2016.5, y = 1, label = "COVID-19 ->"), size=3, family = "cairo") | |
| ggsave("./images/3_2024_data_release_2.png", p4, width = 2000, height = 2000, units = "px", dpi = 300) | |
| p5 <- data %>% | |
| mutate(Members = (Members), | |
| Entity = "Mormon") %>% | |
| select(Entity, Year, Members) |> | |
| filter(Year >= 1973) |> | |
| ggplot(aes(x = Year, y = Members)) + | |
| geom_line(size = 1.5, color = "#FF7F0E") + | |
| geom_text( | |
| data = . %>% filter(Year == 2024) %>% mutate( | |
| percent_lbl = format(round(Members), big.mark = ",") | |
| ), aes(x=Year, y=Members,label=percent_lbl), | |
| family = "Cairo", | |
| fontface='bold', | |
| size = 5, | |
| nudge_x=4.5, | |
| show.legend = FALSE, | |
| color = "#FF7F0E" | |
| ) + | |
| labs( | |
| title = "Total Church Membership Continues To Grow", | |
| y = "Total Church Membership (Official)", | |
| x="Year")+ | |
| theme(axis.ticks = element_blank(), | |
| axis.text.y = element_text(size = 16), | |
| panel.background = element_blank(), | |
| text = element_text(face = "bold", family = "Cairo"), | |
| plot.title = element_text(size = 20, face = "bold"), | |
| plot.subtitle = element_text(face = "italic"), | |
| legend.title = element_blank(), | |
| legend.background = element_blank(), | |
| plot.background = element_rect(fill = "grey95"), | |
| legend.box.background = element_blank(), | |
| legend.key = element_blank(), | |
| legend.position = "top", | |
| panel.grid = element_line(color = "grey95"), | |
| panel.grid.major.y = element_line(color = "lightgrey", linetype = 'solid'), | |
| plot.caption = element_text(size = 8, face = "italic"))+ | |
| scale_color_manual(values = c('#1D71BA')) + | |
| scale_x_continuous(breaks = seq(1970,2030, 5), limits = c(1970,2030))+ | |
| scale_y_continuous(breaks = seq(0,20000000, 5000000), limits = c(0,20000000), labels = scales::label_number(scale_cut = cut_short_scale())) | |
| p6_1 <- data %>% | |
| mutate( | |
| members_lead = lead(Members, 1), | |
| perc_change = round((Members - members_lead)/Members*100,2), | |
| births = (New.Children.of.Record), | |
| Entity = "Mormon") %>% | |
| select(Entity, Year, perc_change) |> | |
| filter(Year >= 1973) |> | |
| ggplot(aes(x = Year, y = perc_change)) + | |
| geom_point(size = 3, alpha = 0.4, color = "black") + | |
| geom_smooth(se=FALSE, color = "black", method = "lm") + | |
| labs( | |
| title = "YoY Percent Change In Membership Has Dropped Over Time", | |
| subtitle = "Percent Change in 2024 Very Similar to 2023", | |
| y = "YoY Membership Growth % (Official)", | |
| x="Year")+ | |
| theme(axis.ticks = element_blank(), | |
| axis.text.y = element_text(size = 16), | |
| panel.background = element_blank(), | |
| text = element_text(face = "bold", family = "Cairo"), | |
| plot.title = element_text(size = 20, face = "bold"), | |
| plot.subtitle = element_text(face = "italic"), | |
| legend.title = element_blank(), | |
| legend.background = element_blank(), | |
| panel.grid = element_line(color = "grey95"), | |
| plot.background = element_rect(fill = "grey95"), | |
| legend.box.background = element_blank(), | |
| legend.key = element_blank(), | |
| legend.position = "top", | |
| panel.grid.major.y = element_line(color = "lightgrey", linetype = 'solid'), | |
| plot.caption = element_text(size = 8))+ | |
| scale_color_manual(values = c('#1D71BA')) + | |
| scale_x_continuous(breaks = seq(1970,2030, 5), limits = c(1970,2030))+ | |
| scale_y_continuous(breaks = seq(1,10, 1)) | |
| p6 <- data %>% | |
| mutate( | |
| births = (New.Children.of.Record), | |
| Entity = "Mormon") %>% | |
| select(Entity, Year, births) |> | |
| filter(Year >= 1973) |> | |
| ggplot(aes(x = Year, y = births)) + | |
| geom_line(size = 1.5, color = "#1D71BA") + | |
| geom_text( | |
| data = . %>% filter(Year == 2024) %>% mutate( | |
| percent_lbl = format(round(births), big.mark = ",") # Add commas using format() | |
| ), aes(x=Year, y=births,label=percent_lbl), | |
| family = "Cairo", | |
| fontface='bold', | |
| size = 5, | |
| nudge_x=3.5, | |
| show.legend = FALSE, | |
| color = "#1D71BA" | |
| ) + | |
| labs( | |
| title = "Children of Record Births Drops Slightly In 2024", | |
| caption = "@mormon_metrics\nSource: General Conference", | |
| subtitle = "Children of Record Births Have Flatlined Despite 3X Increase In Membership", | |
| y = "Children of Record Births (Official)", | |
| x="Year")+ | |
| theme(axis.ticks = element_blank(), | |
| axis.text.y = element_text(size = 16), | |
| panel.background = element_blank(), | |
| text = element_text(face = "bold", family = "Cairo"), | |
| plot.title = element_text(size = 20, face = "bold"), | |
| plot.subtitle = element_text(face = "italic"), | |
| legend.title = element_blank(), | |
| legend.background = element_blank(), | |
| panel.grid = element_line(color = "grey95"), | |
| plot.background = element_rect(fill = "grey95"), | |
| legend.box.background = element_blank(), | |
| legend.key = element_blank(), | |
| legend.position = "top", | |
| panel.grid.major.y = element_line(color = "lightgrey", linetype = 'solid'), | |
| plot.caption = element_text(size = 8))+ | |
| scale_color_manual(values = c('#1D71BA')) + | |
| scale_x_continuous(breaks = seq(1970,2030, 5), limits = c(1970,2030))+ | |
| scale_y_continuous(breaks = seq(0,200000, 25000), limits = c(0,200000), labels = scales::label_number(scale_cut = cut_short_scale())) | |
| p7 <- (p5/p6_1/p6) | |
| ggsave("./images/3_2024_data_release_3.png", p7, width = 2500, height = 3000, units = "px", dpi = 300) | |
| # Births per member | |
| p8 <- data %>% | |
| mutate( | |
| birth_rate = (New.Children.of.Record/(Members/1000)), | |
| Entity = "Mormon") %>% | |
| select(Entity, Year, birth_rate) |> | |
| filter(Year >= 1973) |> | |
| ggplot(aes(x = Year, y = birth_rate)) + | |
| geom_line(size = 1.5, color = "#1D71BA") + | |
| geom_text( | |
| data = . %>% filter(Year == 2024) %>% mutate( | |
| percent_lbl = as.character(round(birth_rate,2)), | |
| percent_lbl = paste0(percent_lbl, ''), | |
| ), aes(x=Year, y=birth_rate,label=percent_lbl), | |
| family = "Cairo", | |
| fontface='bold', | |
| size = 5, | |
| nudge_x=1.5, | |
| show.legend = FALSE, | |
| color = "#1D71BA" | |
| ) + | |
| labs( | |
| title = "Births Per 1000 Members Has Dropped Over Time ", | |
| caption = "@mormon_metrics\nSource: General Conference", | |
| subtitle = "Births per 1000 members is only 1/4 of what it was in 1980", | |
| y = "Births Per 1000 Members (Official)", | |
| x="Year")+ | |
| theme(axis.ticks = element_blank(), | |
| axis.text.y = element_text(size = 16), | |
| panel.background = element_blank(), | |
| text = element_text(face = "bold", family = "Cairo"), | |
| plot.title = element_text(size = 20, face = "bold"), | |
| plot.subtitle = element_text(face = "italic"), | |
| plot.background = element_rect(fill = "grey95"), | |
| legend.title = element_blank(), | |
| legend.background = element_blank(), | |
| legend.box.background = element_blank(), | |
| legend.key = element_blank(), | |
| legend.position = "top", | |
| panel.grid = element_line(color = "grey95"), | |
| panel.grid.major.y = element_line(color = "lightgrey", linetype = 'solid'), | |
| plot.caption = element_text(size = 8))+ | |
| scale_color_manual(values = c('#1D71BA')) + | |
| scale_x_continuous(breaks = seq(1970,2025, 5))+ | |
| scale_y_continuous(breaks = seq(0,30, 5), limits = c(0,30)) | |
| ggsave("./images/3_2024_data_release_4.png", p8, width = 2500, height = 2000, units = "px", dpi = 300) | |
| p8 <- data |> | |
| filter(Year >= 2000) |> | |
| mutate( | |
| lead_members = lead(Members, 1), | |
| lost = (Converts + New.Children.of.Record) - (Members - lead_members), | |
| lost_rate = lost/(Members/1000) | |
| ) |> | |
| ggplot(aes(x = Year, y = lost_rate)) + | |
| geom_point(size = 3, alpha = 0.4, color = "#D62728") + | |
| geom_smooth(se=FALSE, color = "#D62728", method = "lm") + | |
| labs( | |
| title = "Exits Per 1000 Members Has Increased Since 2000", | |
| caption = "@mormon_metrics\nSource: General Conference", | |
| subtitle = "Exits per 1000 members Has Doubled Since 2000", | |
| y = "Exits Per 1000 Members (Official)", | |
| x="Year")+ | |
| theme(axis.ticks = element_blank(), | |
| axis.text.y = element_text(size = 16), | |
| panel.background = element_blank(), | |
| text = element_text(face = "bold", family = "Cairo"), | |
| plot.title = element_text(size = 20, face = "bold"), | |
| plot.subtitle = element_text(face = "italic"), | |
| plot.background = element_rect(fill = "grey95"), | |
| legend.title = element_blank(), | |
| legend.background = element_blank(), | |
| legend.box.background = element_blank(), | |
| legend.key = element_blank(), | |
| legend.position = "top", | |
| panel.grid = element_line(color = "grey95"), | |
| panel.grid.major.y = element_line(color = "lightgrey", linetype = 'solid'), | |
| plot.caption = element_text(size = 8))+ | |
| scale_x_continuous(breaks = seq(1970,2025, 5))+ | |
| scale_y_continuous(breaks = seq(0,14, 2), limits = c(0,15)) | |
| ggsave("./images/3_2024_data_release_5.png", p8, width = 2000, height = 2000, units = "px", dpi = 300) | |
| # gist: https://gist.github.com/acbass49/496d85fbf5b03921a7bd9adbba2ea223 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment