tweak: Order by cummulative area amount.

This commit is contained in:
NunoSempere 2022-11-21 22:25:48 +00:00
parent eebca66403
commit 62168b7cb8

View File

@ -14,7 +14,6 @@ library("magrittr")
library("RColorBrewer") library("RColorBrewer")
library("ggsci") library("ggsci")
## Data import ## Data import
setwd("/home/loki/Documents/core/ea/fresh/misc/openphil-funding") setwd("/home/loki/Documents/core/ea/fresh/misc/openphil-funding")
data <- read.csv("grants.csv", header=TRUE, stringsAsFactors = FALSE) data <- read.csv("grants.csv", header=TRUE, stringsAsFactors = FALSE)
@ -32,13 +31,12 @@ df$year <- as.vector(sapply(data$Date, getYear))
df$amount <- as.vector(sapply(data$Amount, parse_number)) df$amount <- as.vector(sapply(data$Amount, parse_number))
df$amount <- ifelse(is.na(df$amount), 0, df$amount) df$amount <- ifelse(is.na(df$amount), 0, df$amount)
df$area <- as.vector(data$Focus.Area) df$area <- as.vector(data$Focus.Area)
df <- as.data.frame(df) df <- as.data.frame(df)
## View(df) df$area <- as.vector(data$Focus.Area) # not sure why this line is needed, but things break otherwise
df$area <- as.vector(data$Focus.Area) # View(df)
## Classify according to areas
areas <- unique(df$area) areas <- unique(df$area)
ea_growth <- c("Effective Altruism Community Growth", "Effective Altruism Community Growth (Global Health and Wellbeing)") ea_growth <- c("Effective Altruism Community Growth", "Effective Altruism Community Growth (Global Health and Wellbeing)")
global_health <- c("South Asian Air Quality", "Human Health and Wellbeing", "GiveWell-Recommended Charities", "Global Aid Policy", "Global Health & Wellbeing", "Global Health & Development","Science for Global Health") global_health <- c("South Asian Air Quality", "Human Health and Wellbeing", "GiveWell-Recommended Charities", "Global Aid Policy", "Global Health & Wellbeing", "Global Health & Development","Science for Global Health")
longtermism <- c("Biosecurity & Pandemic Preparedness", "Potential Risks from Advanced AI", "Science Supporting Biosecurity and Pandemic Preparedness", "Longtermism") longtermism <- c("Biosecurity & Pandemic Preparedness", "Potential Risks from Advanced AI", "Science Supporting Biosecurity and Pandemic Preparedness", "Longtermism")
@ -56,7 +54,6 @@ df$area <- ifelse(df$area %in% scientific_research, "Scientific Research", df$ar
df$area <- ifelse(df$area %in% politicy_advocacy, "Policy Advocacy", df$area) df$area <- ifelse(df$area %in% politicy_advocacy, "Policy Advocacy", df$area)
df$area <- ifelse(df$area %in% other, "Other", df$area) df$area <- ifelse(df$area %in% other, "Other", df$area)
df$area df$area
# df <- df[order(df$area),]
## Aggregate by year and area ## Aggregate by year and area
years <- c(2014: 2022)# as.vector(unique(df$year)) years <- c(2014: 2022)# as.vector(unique(df$year))
@ -69,31 +66,40 @@ df2$area <- sort(rep(area_names, num_years))
df2$year <- rep(years, num_areas) df2$year <- rep(years, num_areas)
df2 <- as.data.frame(df2) df2 <- as.data.frame(df2)
# View(df2) getAmountForYearAreaPair <- function(a_df, target_year, target_area){
getAmountForYearAreaPair <- function(target_year, target_area){
filter = dplyr::filter filter = dplyr::filter
# target_year = 2022 # target_year = 2022
# target_area = "Longtermism" # target_area = "Longtermism"
rows = df %>% filter(year == target_year) %>% filter(area == target_area) rows = a_df %>% filter(year == target_year) %>% filter(area == target_area)
return(sum(rows$amount)) return(sum(rows$amount))
} }
getAmountForYearAreaPair(2022, "Longtermism") getAmountForYearAreaPair(df, 2022, "Longtermism & GCRs")
getAmountForArea <- function(a_df, target_area){
filter = dplyr::filter
rows = a_df %>% filter(area == target_area)
return(sum(rows$amount))
}
getAmountForArea(df, "Longtermism & GCRs")
amounts <- c() amounts <- c()
for(i in c(1:dim(df2)[1])){ for(i in c(1:dim(df2)[1])){
amount <- getAmountForYearAreaPair(df2$year[i], df2$area[i]) amount <- getAmountForYearAreaPair(df2, df2$year[i], df2$area[i])
amounts <- c(amounts, amount) amounts <- c(amounts, amount)
} }
df2$amount <- amounts df2$amount <- amounts
# View(df2)
## Order by cummulative amount
df2$cummulative_amount_for_its_area = sapply(df2$area, function(area) {
return(getAmountForArea(df, area))
})
## Plotting ## Plotting
title_text="Open Philanthropy allocation by year and cause area" title_text="Open Philanthropy allocation by year and cause area"
subtitle_text="with my own aggregation of categories" subtitle_text="with my own aggregation of categories"
palette = "Classic Red-Blue" palette = "Classic Red-Blue"
direction = -1 direction = -1
open_philanthropy_plot <- ggplot(data=df2, aes(x=year, y=amount, fill=area))+ open_philanthropy_plot <- ggplot(data=df2, aes(x=year, y=amount, fill=area, group = cummulative_amount_for_its_area))+
geom_bar(stat="identity")+ geom_bar(stat="identity")+
labs( labs(
title=title_text, title=title_text,
@ -123,6 +129,7 @@ open_philanthropy_plot <- ggplot(data=df2, aes(x=year, y=amount, fill=area))+
legend.text=element_text(size=7, hjust = 0.5) legend.text=element_text(size=7, hjust = 0.5)
) + ) +
guides(fill=guide_legend(nrow=3,byrow=TRUE)) guides(fill=guide_legend(nrow=3,byrow=TRUE))
open_philanthropy_plot
getwd() ## Working directory on which the file will be saved. Can be changed with setwd("/your/directory") getwd() ## Working directory on which the file will be saved. Can be changed with setwd("/your/directory")
height = 5 height = 5
width = 5 width = 5
@ -134,7 +141,7 @@ wealth <- c(6, 8, 12, 15, 18, 12, 14, 19, 14)
df2$wealth <- rep(wealth * coeff, num_areas) df2$wealth <- rep(wealth * coeff, num_areas)
make_fortune_plot <- function(show_fortune_legend = FALSE) { make_fortune_plot <- function(show_fortune_legend = FALSE) {
open_philanthropy_plot_with_fortune <- ggplot(data=df2, aes(x=year, y=amount, fill=area))+ open_philanthropy_plot_with_fortune <- ggplot(data=df2, aes(x=year, y=amount, fill=area, group = cummulative_amount_for_its_area))+
geom_bar(stat="identity")+ geom_bar(stat="identity")+
geom_point( geom_point(
aes(x=year, y=wealth), size=2, color="darkblue", shape=4, aes(x=year, y=wealth), size=2, color="darkblue", shape=4,
@ -209,7 +216,6 @@ df3 <- as.data.frame(df3)
df3$area <- as.vector(data$Focus.Area) df3$area <- as.vector(data$Focus.Area)
df3 <- df3 %>% dplyr::filter(area %in% longtermism) df3 <- df3 %>% dplyr::filter(area %in% longtermism)
# View(df3) # View(df3)
df3
years <- c(2014: 2022) # as.vector(unique(df$year)) years <- c(2014: 2022) # as.vector(unique(df$year))
num_years <- length(years) num_years <- length(years)
@ -229,13 +235,15 @@ for(i in c(1:dim(df4)[1])){
amounts <- c(amounts, amount) amounts <- c(amounts, amount)
} }
df4$amount <- amounts df4$amount <- amounts
df4$cummulative_amount_for_its_area = sapply(df4$area, function(area) {
return(getAmountForArea(df3, area))
})
## Plotting longtermist funding ## Plotting longtermist funding
title_text="Open Philanthropy allocation by year and cause area" title_text="Open Philanthropy allocation by year and cause area"
subtitle_text="restricted to longtermism & GCRs" subtitle_text="restricted to longtermism & GCRs"
palette = "Classic Red-Blue" palette = "Classic Red-Blue"
direction = -1 direction = -1
open_philanthropy_plot_lt <- ggplot(data=df4, aes(x=year, y=amount, fill=area, group=amount))+ open_philanthropy_plot_lt <- ggplot(data=df4, aes(x=year, y=amount, fill=area, group=cummulative_amount_for_its_area))+
geom_bar(stat="identity")+ geom_bar(stat="identity")+
labs( labs(
title=title_text, title=title_text,
@ -268,5 +276,5 @@ open_philanthropy_plot_lt <- ggplot(data=df4, aes(x=year, y=amount, fill=area, g
getwd() ## Working directory on which the file will be saved. Can be changed with setwd("/your/directory") getwd() ## Working directory on which the file will be saved. Can be changed with setwd("/your/directory")
height = 5 height = 5
width = 6 width = 6
open_philanthropy_plot_lt ## open_philanthropy_plot_lt
ggsave(plot=open_philanthropy_plot_lt, "open_philanthropy_grants_lt.png", width=width, height=height, bg = "white") ggsave(plot=open_philanthropy_plot_lt, "open_philanthropy_grants_lt.png", width=width, height=height, bg = "white")