83 lines
5.5 KiB
R
83 lines
5.5 KiB
R
library(tidyverse)
|
|
#setwd("../")
|
|
PERM <- read_csv("./Data/Raw_Data/TerraPower_Report_Data/Monthly_In_Migration_Operations_Workforce.csv")
|
|
NUM_YEARS <- ceiling(nrow(PERM)/12)
|
|
DATES <- as.Date(paste0(2025,"-",8:12,"-",18))
|
|
for(YEAR in 2026:(2026+NUM_YEARS)){
|
|
DATES <- c(DATES,as.Date(paste0(YEAR,"-",1:12,"-",18)))
|
|
}
|
|
PERM$Date <- DATES[1:nrow(PERM)]
|
|
PERM$Year <- year(PERM$Date)
|
|
PERM$Add_Emp <- c(0,diff(PERM$In_Migration))
|
|
PERM$Perm_Migration_Including_Families <- PERM[,"In_Migration"]*0.8*3.05 #TerraPower assumes 80% have families and the average family is 3.2 people, but in wyoming the average is stated as 3.05
|
|
OPERATOR <- PERM %>% group_by(Year) %>% summarize(Operator_Emp_Average =mean(In_Migration),Operator_Emp_Migrated=sum(Add_Emp),Total_Op_and_Fam_Migration=max(Perm_Migration_Including_Families))
|
|
OPERATOR[,"Total_Op_and_Fam_Migration"] <- c(0,diff(round(pull(OPERATOR,"Total_Op_and_Fam_Migration"))))
|
|
|
|
|
|
TEMP <- read_csv("./Data/Raw_Data/TerraPower_Report_Data/Monthly_In_Migration_Construction_Workforce.csv")
|
|
TEMP$Date <- DATES[1:nrow(TEMP)]
|
|
TEMP$Year <- year(TEMP$Date)
|
|
TEMP[,1] <- 0.41*TEMP[,1] #TerraPower assumes 41% migrate into Lincoln
|
|
TEMP$Add_Emp <- c(0,diff(TEMP$In_Migration))
|
|
TEMP <- TEMP %>% group_by(Year) %>% summarize(Temp_Emp_Migration=round(sum(Add_Emp)),Average_Temp_Workers=round(mean(In_Migration) ))
|
|
TEMP[,"Total_Migration"] <- round(TEMP[,2]+TEMP[,2]*0.37*3.05) #TerraPower assumes 37% will bring families and the average family is 3.2 people, but states Wyoming averages 3.05 family save
|
|
CONSTRUCTION <-TEMP %>% select(Year,Construction_Emp_Average=Average_Temp_Workers,Construction_Emp_Migrated=Temp_Emp_Migration,Total_Con_and_Fam_Migration=Total_Migration)
|
|
TEMP$End_Year_Temp_Workers <- c(cumsum(TEMP$Temp_Emp_Migration))
|
|
|
|
#Set the total to zero
|
|
#Employment
|
|
CONSTRUCTION[4:7,3] <- CONSTRUCTION[4:7,3] -1
|
|
CONSTRUCTION[6:7,3] <- CONSTRUCTION[6:7,3] -1
|
|
#Family Migration
|
|
CONSTRUCTION[4:7,4] <- CONSTRUCTION[4:7,4] -3
|
|
#colSums(CONSTRUCTION[,3:4])
|
|
#colSums(OPERATOR[,3:4])
|
|
if(!exists("SAVE_LOC")){SAVE_LOC <-"./Data/Cleaned_Data/TerraPower_Impact/"}
|
|
dir.create(SAVE_LOC, recursive = TRUE, showWarnings = FALSE)
|
|
saveRDS(CONSTRUCTION,paste0(SAVE_LOC,"Construction_Related_Migration.Rds"))
|
|
saveRDS(OPERATOR,paste0(SAVE_LOC,"Operating_Worker_Related_Migration.Rds"))
|
|
#####Double check that Kemmere can house all people
|
|
#1,451 tota units required acording to TerraPower
|
|
REQUIRED_IN_LIN <- 1451*0.41
|
|
TOTAL_IN_KEM <- 333 #According to ACS data
|
|
EXPECTED_NEW_IN_KEM <- 750 #According to TerraPower Kemmerer is agressively zoning and will conservativley add 750 houses available to the project
|
|
(0.75*TOTAL_IN_KEM+750)/REQUIRED_IN_LIN #Shows a surplus of houses in Kemmerer
|
|
############################################################TerraPower IMPLAN estimates
|
|
CLEAN_IMPLAN <- function(DF){
|
|
DF <- DF[,-1]
|
|
COLNAMES <- c("Industry","Direct","Indirect","Induced","Total")
|
|
colnames(DF) <- COLNAMES
|
|
DF<- DF %>% filter(!is.na(Industry))
|
|
DF[,1] <- trimws(str_replace_all(str_replace_all(t(DF[,1]), "[:digit:]|-| |A |B ", "")," ",""))
|
|
return(DF)
|
|
}
|
|
|
|
KEM_CON_IMPLAN <- CLEAN_IMPLAN(read_csv("Data/Raw_Data/IMPLAN_Employment_Outputs_2_Difit_NAICS/Kemmerer_100_Construction_Workers.csv"))
|
|
LIN_CON_IMPLAN <- CLEAN_IMPLAN(read_csv("Data/Raw_Data/IMPLAN_Employment_Outputs_2_Difit_NAICS/Lincoln_100_Construction_Workers.csv"))
|
|
CON_DIFF <- LIN_CON_IMPLAN %>% mutate(LIN_CON_TOTAL=Total-Direct) %>% select(Industry,LIN_CON_TOTAL) %>% full_join(KEM_CON_IMPLAN %>% mutate(KEM_CON_TOTAL=Total-Direct) %>% select(Industry,KEM_CON_TOTAL))
|
|
CON_DIFF[,"Gap"] <- CON_DIFF[,2]-CON_DIFF[,3]
|
|
CON_DIFF %>% print(n=100)
|
|
CON_DIFF$Adjustable_Industry <- CON_DIFF$Industry %in% c('Accommodation and Food Services','Retail Trade','Health Care and Social Assistance','Real Estate and Rental and Leasing','Arts, Entertainment, and Recreation','Manufacturing','Other Services (except Public Administration)')
|
|
CON_DIFF[which(CON_DIFF$Adjustable_Industry),]
|
|
CONSTRUCTION_ADDED_JOBS <- CON_DIFF %>% mutate(KEM_POSSIBLE_INDUCED=Gap*Adjustable_Industry) %>% select(KEM_INDUCED= KEM_CON_TOTAL,KEM_POSSIBLE_INDUCED)
|
|
CONSTRUCTION_ADDED_JOBS <- colSums(CONSTRUCTION_ADDED_JOBS)/100
|
|
|
|
|
|
KEM_OP_IMPLAN <- CLEAN_IMPLAN(read_csv("Data/Raw_Data/IMPLAN_Employment_Outputs_2_Difit_NAICS/Kemmerer_100_Nuclear_Operators.csv"))
|
|
LIN_OP_IMPLAN <- CLEAN_IMPLAN(read_csv("Data/Raw_Data/IMPLAN_Employment_Outputs_2_Difit_NAICS/Lincoln_100_Nuclear_Operators.csv"))
|
|
OP_DIFF <- LIN_OP_IMPLAN %>% mutate(LIN_OP_TOTAL=Total-Direct) %>% select(Industry,LIN_OP_TOTAL) %>% full_join(KEM_OP_IMPLAN %>% mutate(KEM_OP_TOTAL=Total-Direct) %>% select(Industry,KEM_OP_TOTAL))
|
|
OP_DIFF
|
|
OP_DIFF[,"Gap"] <- OP_DIFF[,2]-OP_DIFF[,3]
|
|
OP_DIFF$Adjustable_Industry <- OP_DIFF$Industry %in% c('Accommodation and Food Services','Retail Trade','Health Care and Social Assistance','Real Estate and Rental and Leasing','Arts, Entertainment, and Recreation','Manufacturing','Other Services (except Public Administration)')
|
|
OP_DIFF
|
|
OPERATION_ADDED_JOBS <- OP_DIFF %>% mutate(KEM_POSSIBLE_INDUCED=Gap*Adjustable_Industry) %>% select(KEM_INDUCED= KEM_OP_TOTAL,KEM_POSSIBLE_INDUCED)
|
|
OPERATION_ADDED_JOBS <- colSums(OPERATION_ADDED_JOBS )/100
|
|
|
|
|
|
RES <- rbind(CONSTRUCTION_ADDED_JOBS,OPERATION_ADDED_JOBS) %>% as_tibble
|
|
POP_WORK_RATIO <-3716/1920.54 #Total population of Kemmerer in 2024 divided total employment both are found in IMPLAN region details for zip code 83101
|
|
RES*POP_WORK_RATIO #Total family included migration, converted per person (rather than per 100 jobs)
|
|
RES$Job_Type <- c("Construction","Operator")
|
|
RES <- RES[,c(3,1:2)]
|
|
saveRDS(RES,paste0(SAVE_LOC,"Induced_Jobs.Rds"))
|