Peabody/Data_Center_Visuals.r
2026-09-21 18:02:37 -06:00

116 lines
11 KiB
R

library(tidyverse)
library(scales)
library(janitor)
library(paletteer)
source("Scripts/Return_Data_Center_Model_Inputs.r")
DATA_CENTER <- DATA_CENTER_INPUTS()
DATA_CENTER %>% filter(Year==2028,Event=='COMPUTERS')
DATA_CENTER <- rbind(DATA_CENTER,do.call(rbind, lapply(2031:2050,function(x){DATA_CENTER %>% filter(Year==2030) %>% mutate(Year=x)})))
GET_DATA_CENTER_RES <- function(DIR,EVENT,REGION='Wyoming'){
# DIR<-"Data_Center_Employment_100_People"
# EVENT<-'DATA_CENTER_EMP'
PATH <- paste0("Model_Outputs/IMPLAN/Data_Center/",REGION,"/",DIR,"/economic_indicators_by_impact.csv")
INPUT_DATA <- read_csv(PATH) %>% rename(Income=`Labor Income`) %>% mutate(Income=parse_number(Income),`Value Added`=parse_number(`Value Added`),Output=parse_number(Output)) %>% mutate(Region=REGION,Event=EVENT)
INPUT_DATA$Impact <- gsub("3 - ","",gsub("2 - ","",gsub("1 - ","",INPUT_DATA$Impact)))
INPUT_DATA <- INPUT_DATA %>% pivot_longer(-c(Impact,Region,Event)) %>% rename(Type=Impact,Impact=name)
INPUT_DATA$Impact <- gsub("3 - ","",gsub("2 - ","",gsub("1 - ","",INPUT_DATA$Impact)))
INPUT_DATA <- INPUT_DATA %>% mutate(Source='IMPLAN') %>% select(Type,Region,Impact,Event,Source,value)
INPUT_DATA <- INPUT_DATA %>% filter(!is.na(Type))
INPUT_DATA$value <- if(EVENT=='DATA_CENTER_EMP'){INPUT_DATA$value <- INPUT_DATA$value/100}else{INPUT_DATA$value/10^6} #shift to impact per dollar from impact per million dollar
INPUT_DATA <- INPUT_DATA %>% rename('marginal'=value)
INPUT_DATA <- INPUT_DATA %>% left_join(DATA_CENTER) %>% mutate(value=marginal*total)
INPUT_DATA <- INPUT_DATA %>% group_by(Type,Year,Region,Impact,Source,Event) %>% summarize(value=sum(value)) %>% ungroup
return(INPUT_DATA )
}
WY_DATA <- rbind(GET_DATA_CENTER_RES("Computer_Purchase_Mill_Dollars",'COMPUTERS'),GET_DATA_CENTER_RES("Construction_Mill_Dollars",'BUILDING'),GET_DATA_CENTER_RES("Data_Center_Employment_100_People",'DATA_CENTER_EMP'),GET_DATA_CENTER_RES("Other_Purchases_Mill_Dollars","OTHER"),GET_DATA_CENTER_RES("Pre-Development_Million_Dollars","PRE_DEV"),GET_DATA_CENTER_RES("Utlities_Electricity_Million_USD","UTILITIES"))
US_DATA <- rbind(GET_DATA_CENTER_RES("Computer_Purchase_Mill_Dollars",'COMPUTERS','US'),GET_DATA_CENTER_RES("Construction_Mill_Dollars",'BUILDING','US'),GET_DATA_CENTER_RES("Data_Center_Employment_100_People",'DATA_CENTER_EMP','US'),GET_DATA_CENTER_RES("Other_Purchases_Mill_Dollars","OTHER",'US'),GET_DATA_CENTER_RES("Pre-Development_Million_Dollars","PRE_DEV",'US'),GET_DATA_CENTER_RES("Utlities_Electricity_Million_USD","UTILITIES",'US'))
DATA <-rbind(US_DATA,WY_DATA) %>% group_by(Year,Type,Region,Impact,Source) %>% summarize(value=sum(value)) %>% ungroup
######################
GET_DATA_CENTER_TAX <- function(DIR,EVENT,REGION='Wyoming'){
# DIR<-"Data_Center_Employment_100_People"
# EVENT<-'DATA_CENTER_EMP'
PATH <- paste0("Model_Outputs/IMPLAN/Data_Center/",REGION,"/",DIR,"/tax_results.csv")
INPUT_DATA <- read_csv(PATH) %>% mutate(`Sub County General`=parse_number(`Sub County General`),`Sub County Special Districts`=parse_number(`Sub County Special Districts`),County=parse_number(County),County=County+`Sub County General`+`Sub County Special Districts`,State=parse_number(State),Federal=parse_number(Federal)) %>% select(-Total,`Sub County General`,`Sub County Special Districts`) %>% mutate(Region=REGION,Event=EVENT)
INPUT_DATA$Impact <- gsub("3 - ","",gsub("2 - ","",gsub("1 - ","",INPUT_DATA$Impact)))
INPUT_DATA <- INPUT_DATA %>% pivot_longer(-c(Impact,Region,Event)) %>% rename(Type=Impact,Impact=name)
INPUT_DATA$Impact <- gsub("3 - ","",gsub("2 - ","",gsub("1 - ","",INPUT_DATA$Impact)))
INPUT_DATA <- INPUT_DATA %>% mutate(Source='IMPLAN') %>% select(Type,Region,Impact,Event,Source,value)
INPUT_DATA <- INPUT_DATA %>% filter(!is.na(Type))
INPUT_DATA$value <- if(EVENT=='DATA_CENTER_EMP'){INPUT_DATA$value <- INPUT_DATA$value/100}else{INPUT_DATA$value/10^6} #shift to impact per dollar from impact per million dollar
INPUT_DATA <- INPUT_DATA %>% rename('marginal'=value)
INPUT_DATA <- INPUT_DATA %>% left_join(DATA_CENTER) %>% mutate(value=marginal*total)
INPUT_DATA <- INPUT_DATA %>% group_by(Type,Year,Region,Impact,Source,Event) %>% summarize(value=sum(value)) %>% ungroup
return(INPUT_DATA )
}
WY_DATA_TAX <- rbind(GET_DATA_CENTER_TAX("Computer_Purchase_Mill_Dollars",'COMPUTERS'),GET_DATA_CENTER_TAX("Construction_Mill_Dollars",'BUILDING'),GET_DATA_CENTER_TAX("Data_Center_Employment_100_People",'DATA_CENTER_EMP'),GET_DATA_CENTER_TAX("Other_Purchases_Mill_Dollars","OTHER"),GET_DATA_CENTER_TAX("Pre-Development_Million_Dollars","PRE_DEV"),GET_DATA_CENTER_TAX("Utlities_Electricity_Million_USD","UTILITIES"))
US_DATA_TAX <- rbind(GET_DATA_CENTER_TAX("Computer_Purchase_Mill_Dollars",'COMPUTERS','US'),GET_DATA_CENTER_TAX("Construction_Mill_Dollars",'BUILDING','US'),GET_DATA_CENTER_TAX("Data_Center_Employment_100_People",'DATA_CENTER_EMP','US'),GET_DATA_CENTER_TAX("Other_Purchases_Mill_Dollars","OTHER",'US'),GET_DATA_CENTER_TAX("Pre-Development_Million_Dollars","PRE_DEV",'US'),GET_DATA_CENTER_TAX("Utlities_Electricity_Million_USD","UTILITIES",'US'))
TAX <-rbind(US_DATA_TAX,WY_DATA_TAX) %>% group_by(Year,Type,Region,Impact,Source) %>% summarize(value=sum(value)) %>% ungroup
IMPLAN <- rbind(TAX,DATA ) %>% select(Type,Year,Region,Impact,Source,value)
IMPLAN$Region <- ifelse(IMPLAN$Region=='Wyoming','WY',IMPLAN$Region)
########################
IMPLAN_DOLLAR <- IMPLAN %>% filter(Impact!='Employment')
IMPLAN_DOLLAR <- IMPLAN_DOLLAR %>% group_by(Type,Year,Impact,Source) %>% mutate(value=ifelse(Region=='US',value-min(value),value) ) %>% ungroup
IMPLAN_DOLLAR
#State tax write off
IMPLAN_DOLLAR[IMPLAN_DOLLAR$Impact %in% c("County","State") & IMPLAN_DOLLAR$Type=='Direct'& IMPLAN_DOLLAR$Region=='WY',"value"] <- 0
TEMP <- IMPLAN_DOLLAR %>% filter(Year==2028) %>% mutate(value=0)
IMPLAN_DOLLAR <- rbind(IMPLAN_DOLLAR,rbind(TEMP %>% mutate(Year=2025),TEMP %>% mutate(Year=2026),TEMP %>% mutate(Year=2027)))
TAX_STATE_BASE <- 500*(10^6*0.115*((62.835-12)/1000)) #State
TAX_COUNTY_BASE <-500*(10^6*0.115*((12)/1000)) #County
IMPLAN_DOLLAR[IMPLAN_DOLLAR$Impact %in% c("County") & IMPLAN_DOLLAR$Type=='Direct'& IMPLAN_DOLLAR$Region=='WY',]
DIRECT_TAX_FLOW <- (c(seq(0,1,by=1/3),rev(seq(0,1,by=1/40))))[1:28]
IMPLAN_DOLLAR[IMPLAN_DOLLAR$Impact %in% c("County") & IMPLAN_DOLLAR$Type=='Direct'& IMPLAN_DOLLAR$Region=='WY','value'] <- DIRECT_TAX_FLOW *TAX_COUNTY_BASE
IMPLAN_DOLLAR[IMPLAN_DOLLAR$Impact %in% c("State") & IMPLAN_DOLLAR$Type=='Direct'& IMPLAN_DOLLAR$Region=='WY','value'] <- DIRECT_TAX_FLOW *TAX_STATE_BASE
IMPLAN_DOLLAR[IMPLAN_DOLLAR$Impact %in% "State" & IMPLAN_DOLLAR$Type=='Direct'& IMPLAN_DOLLAR$Region=='WY',]
IMPLAN_DOLLAR %>% pull(Year) %>% unique %>% length
IMPLAN_DOLLAR$Impact <- factor(IMPLAN_DOLLAR$Impact,levels=c('Output','Value Added','Income','Federal','State','County'))
IMPLAN_DOLLAR$Region <- factor(ifelse(IMPLAN_DOLLAR$Region=="WY",'Wyoming',"Rest of United States"),levels=rev(c("Wyoming","Rest of United States")))
IMPLAN_DOLLAR_REGION <- IMPLAN_DOLLAR %>% filter(Impact %in% c('Income','Output','Value Added')) %>% group_by(Year,Region,Impact) %>% summarize(value=sum(value)) %>% ungroup
########################Plot of total impact in US and in Wyoming
IMPLAN_REGION_DOLLAR_PLOT <- ggplot(IMPLAN_DOLLAR_REGION ,aes(x=Year,y=value/10^9,fill=Region,group=Region))+geom_area()+facet_wrap(~Impact,ncol=1)+ylab("Billion Dollars")+theme_bw()+ theme(plot.title = element_text(size = 22, face = "bold"), axis.title = element_text(size = 18),axis.text = element_text(size = 16),legend.text = element_text(size = 14),strip.text = element_text(size = 14),legend.position="top")+ theme(legend.title=element_blank())+scale_fill_manual(values=c("#3C3B6E","#FFC425"))+scale_x_continuous(breaks=seq(2025,2060,by=5))+scale_y_continuous(breaks=seq(0,5000,by=1))
ggsave( filename = "./Results/Data Center: Dollar Values of Model.png", plot = IMPLAN_REGION_DOLLAR_PLOT, width = 8.5, height = 11*(3./4), units = "in", dpi = 300)
########################Taxes
IMPLAN_TAX <- IMPLAN_DOLLAR %>% filter(Impact %in% c("County","State","Federal"))
OLD <- IMPLAN_TAX
IMPLAN_TAX <- IMPLAN_TAX %>% group_by(Type,Year,Impact,Source) %>% mutate(value=ifelse(Region=='Rest of United States',value-min(value),value) ) %>% ungroup
IMPLAN_TAX %>% left_join(OLD %>% rename(OLD=value))
#IMPLAN_TAX <- IMPLAN_TAX[!(IMPLAN_TAX$Type=='Direct' & IMPLAN_TAX$Region=='Rest of United States'& IMPLAN_TAX$Impact!='Federal'),]
#IMPLAN_TAX <-IMPLAN_TAX[!(IMPLAN_TAX$Type=='Direct' & IMPLAN_TAX$Region=='Wyoming'& IMPLAN_TAX$Impact=='Federal'),]
IMPLAN_DOLLAR <- IMPLAN_DOLLAR %>% filter(!(Impact %in% c("County","State","Federal"))) %>% rbind(IMPLAN_TAX)
IMPLAN_TAX_FIG_DATA <- IMPLAN_TAX %>% group_by(Year,Impact) %>% summarize(value=sum(value))
TAX_PLOT <- ggplot(IMPLAN_TAX_FIG_DATA, aes(x=Year,y=value/10^6,fill=Impact,group=Impact))+geom_area()+ylab("Million Dollars")+theme_bw()+ theme(plot.title = element_text(size = 22, face = "bold"), axis.title = element_text(size = 18),axis.text = element_text(size = 16),legend.text = element_text(size = 14),strip.text = element_text(size = 14),legend.position="top")+ theme(legend.title=element_blank())+scale_fill_manual(values=c("#3C3B6E","#FFC425","#492F24"))+scale_x_continuous(breaks=seq(2025,2060,by=5))+scale_y_continuous(breaks=seq(0,5000,by=50))
TAX_PLOT
ggsave( filename = "./Results/Data Center: Tax Model.png", plot = TAX_PLOT, width = 8.5, height = 11*(3./4), units = "in", dpi = 300)
#############Dollar values table
NPV <- IMPLAN_DOLLAR %>% mutate(value=value/10^9,Discount_0=value,Discount_2=value/(1+0.02)^(Year-2028),Discount_5=value/(1+0.05)^(Year-2028),Discount_10=value/(1+0.1)^(Year-2028)) %>% group_by(Impact,Region) %>% summarize(Discount_0=sum(Discount_0),Discount_2=sum(Discount_2),Discount_5=sum(Discount_5),Discount_10=sum(Discount_10)) %>% ungroup
NPV[,3:6] <-round(NPV[,3:6],2)
write.csv(NPV,"./Results/Data_Center_NPV_Values.csv",row.names=FALSE)
############Employment
IMPLAN_EMPLOY <- IMPLAN %>% filter(Impact=='Employment',Source=='IMPLAN') %>% group_by(Year,Region,Impact) %>% summarize(value=sum(value)) %>% ungroup
IMPLAN_EMPLOY <- IMPLAN_EMPLOY %>% group_by(Year,Impact) %>% mutate(value=ifelse(Region=='US',value-min(value),value) ) %>% ungroup
#TEMP <- IMPLAN_EMPLOY %>% filter(Year==2028) %>% mutate(value=0)
#IMPLAN_EMPLOY <- rbind(IMPLAN_EMPLOY,rbind(TEMP %>% mutate(Year=2025),TEMP %>% mutate(Year=2026),TEMP %>% mutate(Year=2027)))
IMPLAN_EMPLOY$Region <- factor(ifelse(IMPLAN_EMPLOY$Region=="WY",'Wyoming',"Rest of United States"),levels=rev(c("Wyoming","Rest of United States")))
IMPLAN_EMPLOYMENT_PLOT <- ggplot(IMPLAN_EMPLOY ,aes(x=Year,y=value,fill=Region,group=Region))+geom_area()+ylab("Employment (Full-Time Equivalent)")+theme_bw()+ theme(plot.title = element_text(size = 22, face = "bold"), axis.title = element_text(size = 18),axis.text = element_text(size = 16),legend.text = element_text(size = 14),strip.text = element_text(size = 14),legend.position="top")+ theme(legend.title=element_blank())+scale_fill_manual(values=c("#3C3B6E","#FFC425"))+scale_x_continuous(breaks=seq(2025,2060,by=5))+scale_y_continuous(breaks=c(seq(0,50000,by=1000)),labels = label_comma())
IMPLAN_EMPLOYMENT_PLOT
ggsave( filename = "./Results/Data Center: Employment.png", plot = IMPLAN_EMPLOYMENT_PLOT , width = 8.5, height = 11*(2/4), units = "in", dpi = 600)