From 1c6b4cce9af9ec5bdba9e66f479936fd071b127f Mon Sep 17 00:00:00 2001 From: mariamkg00 Date: Wed, 24 Jan 2024 01:35:39 +0000 Subject: [PATCH 01/19] adding data folder --- .gitignore | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index a5914526..d382c642 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ + ## .DS_Store @@ -47,4 +48,8 @@ vignettes/*.pdf energy/*.DS_Store # diagnostic figures (meas) -energy/figures-and-results/compare-diagnostic-scenarios.R \ No newline at end of file +energy/figures-and-results/compare-diagnostic-scenarios.R + +# adding data folder +data/ + From 35210e73956648c8d6803da4298086016cbd92e3 Mon Sep 17 00:00:00 2001 From: Maxwell Patterson Date: Mon, 29 Jan 2024 08:50:25 +0000 Subject: [PATCH 02/19] exploratory analysis --- expl.R | 59 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 expl.R diff --git a/expl.R b/expl.R new file mode 100644 index 00000000..62e2b373 --- /dev/null +++ b/expl.R @@ -0,0 +1,59 @@ +library(dplyr) +library(lubridate) +library(ggplot2) + +# Convert month_year to Date type +well_prod_m_processed$month_year <- as.Date(well_prod_m_processed$month_year) + +# Identify wells with both 'Active' and 'Idle' statuses +wells_with_active_idle <- well_prod_m_processed %>% + group_by(APINumber) %>% + filter(any(ProductionStatus == "Active") & any(ProductionStatus == "Idle")) %>% + ungroup() + +# Calculate lifespan for wells that transitioned from 'Active' to 'Idle' +well_lifespans <- wells_with_active_idle %>% + group_by(APINumber) %>% + summarise(Start = min(month_year[ProductionStatus == "Active"]), + End = max(month_year[ProductionStatus == "Idle"]), + Lifespan = as.numeric(difftime(End, Start, units = "days")) / 365.25) + +# Calculate average lifespan by year of establishment +average_lifespan_by_year <- well_lifespans %>% + group_by(EstablishmentYear = year(Start)) %>% + summarise(AverageLifespan = mean(Lifespan, na.rm = TRUE)) + +# Identify wells that are not 'Idle' +wells_not_idle <- well_prod_m_processed %>% + group_by(APINumber) %>% + filter(!any(ProductionStatus == "Idle")) %>% + ungroup() + +# Determine establishment year for non-idle wells +wells_establishment_year <- wells_not_idle %>% + group_by(APINumber) %>% + summarise(EstablishmentYear = year(min(month_year))) + +# Count wells by year of establishment +count_wells_by_year <- wells_establishment_year %>% + group_by(EstablishmentYear) %>% + summarise(NumberOfWells = n()) + +# Combine lifespan and count data +combined_data <- left_join(average_lifespan_by_year, count_wells_by_year, by = "EstablishmentYear") + +# Count the number of unique "new" wells per year +new_wells_count_per_year <- well_prod_m_processed %>% + filter(ProductionStatus == "new") %>% + mutate(year = year(month_year)) %>% + group_by(year) %>% + summarise(NumberOfNewWells = n_distinct(APINumber)) + +all_combined_data <- left_join(combined_data, new_wells_count_per_year, by = c("EstablishmentYear" = "year")) + +all_combined_data + +new_status_count <- well_prod_m_processed %>% + filter(ProductionStatus == "New") + +new_status_count From 029c1aa243c1dbf662177ec934697ff99b34cd05 Mon Sep 17 00:00:00 2001 From: Maxwell Patterson Date: Thu, 8 Feb 2024 22:09:29 +0000 Subject: [PATCH 03/19] health_data.R updates --- health/scripts/health_data.R | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/health/scripts/health_data.R b/health/scripts/health_data.R index e877c55b..9a7a9146 100644 --- a/health/scripts/health_data.R +++ b/health/scripts/health_data.R @@ -30,8 +30,10 @@ getwd() #census tract age-population -ct_raw <- read.csv("./calepa-cn/data/benmap/raw/nhgis0001_ts_geog2010_tract.csv", stringsAsFactors = FALSE); str(ct_raw) -ct_age_desc <- read.csv("./calepa-cn/data/benmap/raw/age_group_desc.csv", stringsAsFactors = FALSE); str(ct_age_desc) +# UPDATED +ct_raw <- read.csv("/data/ca-transportation-supply-decarb-files/inputs/health/nhgis0001_ts_geog2010_tract.csv", stringsAsFactors = FALSE); str(ct_raw) +# UPDATED +ct_age_desc <- read.csv("/data/ca-transportation-supply-decarb-files/inputs/health/age_group_desc.csv", stringsAsFactors = FALSE); str(ct_age_desc) ct_ca <- ct_raw %>% `colnames<-`(tolower(colnames(ct_raw)))%>% @@ -56,7 +58,8 @@ age_group_ct <- ct_ca %>% #CDOF demographic projections -cdof_raw <- fread("./calepa-cn/data/benmap/raw/CDOF_p2_Age_1yr_Nosup.csv", stringsAsFactors = FALSE, blank.lines.skip = TRUE)%>% +# UPDATED +cdof_raw <- fread("/data/ca-transportation-supply-decarb-files/inputs/health/CDOF_p2_Age_1yr_Nosup.csv", stringsAsFactors = FALSE, blank.lines.skip = TRUE)%>% select(-Column1:-Column16331)%>% gather(year,pop,'2010':'2060')%>% mutate(pop = as.numeric(str_replace(pop,",","")), @@ -89,8 +92,8 @@ cdof_pred <- cdof_raw %>% #County name to merged with BenMAP row/col county indicators -ct <- read_sf("./calepa-cn/data/benmap/raw/County_def.shp") - +# UPDATED +ct <- read_sf("/data/ca-transportation-supply-decarb-files/inputs/health/County_def.shp") county <- as.data.frame(cbind(ct$NAME, ct$STATE_NAME, ct$ROW, ct$COL), stringsAsFactors = F) colnames(county) <- c("county","state", "row", "col") @@ -99,7 +102,8 @@ county$col <- as.integer(county$col) # Mortality incidence data (2015 baseline) -incidence_ca <- read.csv("./calepa-cn/data/benmap/raw/Mortality Incidence (2015).csv", stringsAsFactors = F) %>% +# UPDATED +incidence_ca <- read.csv("/data/ca-transportation-supply-decarb-files/inputs/health/Mortality Incidence (2015).csv", stringsAsFactors = F) %>% filter(Endpoint == "Mortality, All Cause") %>% select(-Endpoint.Group,-Race:-Ethnicity, -Type)%>% left_join(county, by = c("Column"="col","Row"="row"))%>% @@ -148,7 +152,7 @@ ct_incidence_ca <- temp_ct_ca %>% select(-start.age.x,-start.age.y,-end.age.x, -end.age.y, -county.x,-county.y,-value.x,-value.y) - +# write.csv(ct_incidence_ca,file = "./calepa-cn/data/benmap/processed/ct_incidence_ca.csv", row.names = FALSE) ct_incidence_ca <- read.csv("./calepa-cn/data/benmap/processed/ct_incidence_ca.csv", stringsAsFactors = FALSE) From 3eb203e3aa8e62dc5a7b9f8c5e6ac023f6db33df Mon Sep 17 00:00:00 2001 From: Maxwell Patterson Date: Fri, 9 Feb 2024 01:29:25 +0000 Subject: [PATCH 04/19] updating paths --- energy/data-processing-prep/extraction/clean_doc_prod.R | 4 ++-- health/scripts/health_data.R | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/energy/data-processing-prep/extraction/clean_doc_prod.R b/energy/data-processing-prep/extraction/clean_doc_prod.R index 5e6a482b..3930f8e6 100644 --- a/energy/data-processing-prep/extraction/clean_doc_prod.R +++ b/energy/data-processing-prep/extraction/clean_doc_prod.R @@ -25,8 +25,8 @@ data_directory <- "/Volumes/GoogleDrive/Shared\ drives/emlab/projects/current-pr ## WellTypeCode -- The code for the Completion type. ## OilorCondensateProduced -## all wells -all_wells <- read_xlsx(paste0(data_directory, "raw/All_wells_20200417.xlsx")) +# UPDATED +all_wells <- read_xlsx("/data/ca-transportation-supply-decarb-files/inputs/extraction/All_wells_20200417.xlsx") ## well production prod_7785 <- read_csv(paste0(data_directory, "raw/hist_well/CSV_1977_1985/CaliforniaOilAndGasWellMonthlyProduction.csv")) diff --git a/health/scripts/health_data.R b/health/scripts/health_data.R index 9a7a9146..af77e4e7 100644 --- a/health/scripts/health_data.R +++ b/health/scripts/health_data.R @@ -186,7 +186,7 @@ ct_inc_45 <- ct_inc_45_temp%>% ## Output final population and mortality incidence data write.csv(ct_inc_45,file = "./calepa-cn/data/benmap/processed/ct_inc_45.csv", row.names = FALSE) -#ct_inc_45 <- fread("./calepa-cn/data/benmap/processed/ct_inc_45.csv", stringsAsFactors = FALSE) +ct_inc_45 <- fread("./calepa-cn/data/benmap/processed/ct_inc_45.csv", stringsAsFactors = FALSE) ## Census tract level for labor team From 71cadaf84cc691cda1d779d253fdc16ba40c58ea Mon Sep 17 00:00:00 2001 From: Maxwell Patterson Date: Fri, 9 Feb 2024 02:58:59 +0000 Subject: [PATCH 05/19] testing project --- .../extraction/clean_doc_prod.R | 5 +- expl.R | 59 ------------------- health/scripts/health_data.R | 24 ++++---- 3 files changed, 16 insertions(+), 72 deletions(-) delete mode 100644 expl.R diff --git a/energy/data-processing-prep/extraction/clean_doc_prod.R b/energy/data-processing-prep/extraction/clean_doc_prod.R index 3930f8e6..ba687281 100644 --- a/energy/data-processing-prep/extraction/clean_doc_prod.R +++ b/energy/data-processing-prep/extraction/clean_doc_prod.R @@ -10,6 +10,7 @@ library(lubridate) library(rebus) library(readtext) library(readxl) +library(here) ## set directory data_directory <- "/Volumes/GoogleDrive/Shared\ drives/emlab/projects/current-projects/calepa-cn/data/stocks-flows/" @@ -26,7 +27,7 @@ data_directory <- "/Volumes/GoogleDrive/Shared\ drives/emlab/projects/current-pr ## OilorCondensateProduced # UPDATED -all_wells <- read_xlsx("/data/ca-transportation-supply-decarb-files/inputs/extraction/All_wells_20200417.xlsx") +all_wells <- read_xlsx("./data/inputs/extraction/All_wells_20200417.xlsx") ## well production prod_7785 <- read_csv(paste0(data_directory, "raw/hist_well/CSV_1977_1985/CaliforniaOilAndGasWellMonthlyProduction.csv")) @@ -48,7 +49,7 @@ monthly_prod <- rbind(prod_7785, prod_8689, prod_9094, prod_9599, prod_0004, pro prod_18, prod_19) ## county codes -ccodes <- read_csv(paste0(data_directory, "raw/prod/county_codes.csv")) %>% +ccodes <- read_csv("./data/inputs/extraction/county_codes.csv") %>% rename(county_name = county, county = number) %>% select(county_name, county) diff --git a/expl.R b/expl.R deleted file mode 100644 index 62e2b373..00000000 --- a/expl.R +++ /dev/null @@ -1,59 +0,0 @@ -library(dplyr) -library(lubridate) -library(ggplot2) - -# Convert month_year to Date type -well_prod_m_processed$month_year <- as.Date(well_prod_m_processed$month_year) - -# Identify wells with both 'Active' and 'Idle' statuses -wells_with_active_idle <- well_prod_m_processed %>% - group_by(APINumber) %>% - filter(any(ProductionStatus == "Active") & any(ProductionStatus == "Idle")) %>% - ungroup() - -# Calculate lifespan for wells that transitioned from 'Active' to 'Idle' -well_lifespans <- wells_with_active_idle %>% - group_by(APINumber) %>% - summarise(Start = min(month_year[ProductionStatus == "Active"]), - End = max(month_year[ProductionStatus == "Idle"]), - Lifespan = as.numeric(difftime(End, Start, units = "days")) / 365.25) - -# Calculate average lifespan by year of establishment -average_lifespan_by_year <- well_lifespans %>% - group_by(EstablishmentYear = year(Start)) %>% - summarise(AverageLifespan = mean(Lifespan, na.rm = TRUE)) - -# Identify wells that are not 'Idle' -wells_not_idle <- well_prod_m_processed %>% - group_by(APINumber) %>% - filter(!any(ProductionStatus == "Idle")) %>% - ungroup() - -# Determine establishment year for non-idle wells -wells_establishment_year <- wells_not_idle %>% - group_by(APINumber) %>% - summarise(EstablishmentYear = year(min(month_year))) - -# Count wells by year of establishment -count_wells_by_year <- wells_establishment_year %>% - group_by(EstablishmentYear) %>% - summarise(NumberOfWells = n()) - -# Combine lifespan and count data -combined_data <- left_join(average_lifespan_by_year, count_wells_by_year, by = "EstablishmentYear") - -# Count the number of unique "new" wells per year -new_wells_count_per_year <- well_prod_m_processed %>% - filter(ProductionStatus == "new") %>% - mutate(year = year(month_year)) %>% - group_by(year) %>% - summarise(NumberOfNewWells = n_distinct(APINumber)) - -all_combined_data <- left_join(combined_data, new_wells_count_per_year, by = c("EstablishmentYear" = "year")) - -all_combined_data - -new_status_count <- well_prod_m_processed %>% - filter(ProductionStatus == "New") - -new_status_count diff --git a/health/scripts/health_data.R b/health/scripts/health_data.R index af77e4e7..3381fdd7 100644 --- a/health/scripts/health_data.R +++ b/health/scripts/health_data.R @@ -31,9 +31,9 @@ getwd() #census tract age-population # UPDATED -ct_raw <- read.csv("/data/ca-transportation-supply-decarb-files/inputs/health/nhgis0001_ts_geog2010_tract.csv", stringsAsFactors = FALSE); str(ct_raw) +ct_raw <- read.csv("/data/inputs/health/nhgis0001_ts_geog2010_tract.csv", stringsAsFactors = FALSE); str(ct_raw) # UPDATED -ct_age_desc <- read.csv("/data/ca-transportation-supply-decarb-files/inputs/health/age_group_desc.csv", stringsAsFactors = FALSE); str(ct_age_desc) +ct_age_desc <- read.csv("/data/inputs/health/age_group_desc.csv", stringsAsFactors = FALSE); str(ct_age_desc) ct_ca <- ct_raw %>% `colnames<-`(tolower(colnames(ct_raw)))%>% @@ -59,7 +59,7 @@ age_group_ct <- ct_ca %>% #CDOF demographic projections # UPDATED -cdof_raw <- fread("/data/ca-transportation-supply-decarb-files/inputs/health/CDOF_p2_Age_1yr_Nosup.csv", stringsAsFactors = FALSE, blank.lines.skip = TRUE)%>% +cdof_raw <- fread("/data/inputs/health/CDOF_p2_Age_1yr_Nosup.csv", stringsAsFactors = FALSE, blank.lines.skip = TRUE)%>% select(-Column1:-Column16331)%>% gather(year,pop,'2010':'2060')%>% mutate(pop = as.numeric(str_replace(pop,",","")), @@ -93,7 +93,7 @@ cdof_pred <- cdof_raw %>% #County name to merged with BenMAP row/col county indicators # UPDATED -ct <- read_sf("/data/ca-transportation-supply-decarb-files/inputs/health/County_def.shp") +ct <- read_sf("/data/inputs/health/County_def.shp") county <- as.data.frame(cbind(ct$NAME, ct$STATE_NAME, ct$ROW, ct$COL), stringsAsFactors = F) colnames(county) <- c("county","state", "row", "col") @@ -103,7 +103,7 @@ county$col <- as.integer(county$col) # Mortality incidence data (2015 baseline) # UPDATED -incidence_ca <- read.csv("/data/ca-transportation-supply-decarb-files/inputs/health/Mortality Incidence (2015).csv", stringsAsFactors = F) %>% +incidence_ca <- read.csv("/data/inputs/health/Mortality Incidence (2015).csv", stringsAsFactors = F) %>% filter(Endpoint == "Mortality, All Cause") %>% select(-Endpoint.Group,-Race:-Ethnicity, -Type)%>% left_join(county, by = c("Column"="col","Row"="row"))%>% @@ -152,9 +152,9 @@ ct_incidence_ca <- temp_ct_ca %>% select(-start.age.x,-start.age.y,-end.age.x, -end.age.y, -county.x,-county.y,-value.x,-value.y) -# -write.csv(ct_incidence_ca,file = "./calepa-cn/data/benmap/processed/ct_incidence_ca.csv", row.names = FALSE) -ct_incidence_ca <- read.csv("./calepa-cn/data/benmap/processed/ct_incidence_ca.csv", stringsAsFactors = FALSE) +# UPDATED - MP +write.csv(ct_incidence_ca,file = "/data/processed/ct_incidence_ca.csv", row.names = FALSE) +ct_incidence_ca <- read.csv("/data/processed/ct_incidence_ca.csv", stringsAsFactors = FALSE) ##Projected population data and mortality incidence @@ -185,8 +185,9 @@ ct_inc_45 <- ct_inc_45_temp%>% ## Output final population and mortality incidence data -write.csv(ct_inc_45,file = "./calepa-cn/data/benmap/processed/ct_inc_45.csv", row.names = FALSE) -ct_inc_45 <- fread("./calepa-cn/data/benmap/processed/ct_inc_45.csv", stringsAsFactors = FALSE) +# UPDATED - MP +write.csv(ct_inc_45,file = "/data/processed/ct_inc_45.csv", row.names = FALSE) +ct_inc_45 <- fread("/data/processed/ct_inc_45.csv", stringsAsFactors = FALSE) ## Census tract level for labor team @@ -195,4 +196,5 @@ ct_pop_45 <- ct_inc_45 %>% summarise(county = first(county), pop = sum(pop)) -write.csv(ct_pop_45,file = "./calepa-cn/data/benmap/processed/ct_pop_45.csv", row.names = FALSE) +# UPDATED - MP +write.csv(ct_pop_45,file = "/data/processed/ct_pop_45.csv", row.names = FALSE) From 052e5b6b88e00805311e583ce5c96e9addb16496 Mon Sep 17 00:00:00 2001 From: Maxwell Patterson Date: Fri, 9 Feb 2024 21:42:37 +0000 Subject: [PATCH 06/19] setwd realization --- .../extraction/clean_doc_prod.R | 17 +++++--- health/scripts/health_data.R | 40 +++++++++---------- 2 files changed, 31 insertions(+), 26 deletions(-) diff --git a/energy/data-processing-prep/extraction/clean_doc_prod.R b/energy/data-processing-prep/extraction/clean_doc_prod.R index ba687281..bf286203 100644 --- a/energy/data-processing-prep/extraction/clean_doc_prod.R +++ b/energy/data-processing-prep/extraction/clean_doc_prod.R @@ -2,6 +2,7 @@ ## April 21, 2020 ## Data cleaning -- oil production and injection data ## Data from DOC +# updated: 02/09/2024 ## libraries library(tidyverse) @@ -13,7 +14,10 @@ library(readxl) library(here) ## set directory -data_directory <- "/Volumes/GoogleDrive/Shared\ drives/emlab/projects/current-projects/calepa-cn/data/stocks-flows/" +setwd(dirname(rstudioapi::getActiveDocumentContext()$path)) +setwd('/capstone/freshcair/meds-freshcair-capstone') # Sets directory based on Taylor structure +getwd() + ## read in data # ------------------------------------- @@ -26,8 +30,8 @@ data_directory <- "/Volumes/GoogleDrive/Shared\ drives/emlab/projects/current-pr ## WellTypeCode -- The code for the Completion type. ## OilorCondensateProduced -# UPDATED -all_wells <- read_xlsx("./data/inputs/extraction/All_wells_20200417.xlsx") +# UPDATED - MP +all_wells <- read_xlsx("data/inputs/extraction/All_wells_20200417.xlsx") ## well production prod_7785 <- read_csv(paste0(data_directory, "raw/hist_well/CSV_1977_1985/CaliforniaOilAndGasWellMonthlyProduction.csv")) @@ -48,8 +52,8 @@ prod_19 <- read_csv(paste0(data_directory, "raw/hist_well/CSV_2019/CaliforniaOil monthly_prod <- rbind(prod_7785, prod_8689, prod_9094, prod_9599, prod_0004, prod_0509, prod_1514, prod_15, prod_16, prod_17, prod_18, prod_19) -## county codes -ccodes <- read_csv("./data/inputs/extraction/county_codes.csv") %>% +## county codes - UPDATED - MP +ccodes <- read_csv("data/inputs/extraction/county_codes.csv") %>% rename(county_name = county, county = number) %>% select(county_name, county) @@ -73,7 +77,8 @@ all_prod <- monthly_prod %>% left_join(welltype_df) %>% mutate(well_type_name = ifelse(is.na(well_type_name), WellTypeCode, well_type_name)) -saveRDS(all_prod, file = paste0(data_directory, "processed/well_prod_m.rds")) +# UPDATED - MP +saveRDS(all_prod, file = "data/processed/well_prod_m.rds") ## injection data ## ------------------------------ diff --git a/health/scripts/health_data.R b/health/scripts/health_data.R index 3381fdd7..4c1d87c5 100644 --- a/health/scripts/health_data.R +++ b/health/scripts/health_data.R @@ -2,6 +2,7 @@ # vthivierge@ucsb.edu # created: 08/25/2021 # updated: 05/26/2022 +# updated: 02/09/2024 # set up environment ######################################## @@ -12,16 +13,15 @@ options(java.parameters = "-Xmx8000m") ## Packages packages=c("xlsx", "gdata", "dplyr","tidyr", "stringr", "fuzzyjoin", "stringr", - "ggplot2", "stargazer", "plm", "cowplot", "sf", "lwgeom","data.table") + "ggplot2", "stargazer", "plm", "cowplot", "sf", "lwgeom","data.table", "here") lapply(1:length(packages), function(x) ifelse((require(packages[x],character.only=TRUE)==FALSE),install.packages(packages[x]), require(packages[x],character.only=TRUE))) -#Set directory - -setwd(dirname(rstudioapi::getActiveDocumentContext()$path)) -setwd('../../..') #Goes back to home project directory +# Set directory +setwd(dirname(rstudioapi::getActiveDocumentContext()$path)) +setwd('/capstone/freshcair/meds-freshcair-capstone') # Sets directory based on Taylor structure getwd() # Load and process data ##################################### @@ -30,10 +30,10 @@ getwd() #census tract age-population -# UPDATED -ct_raw <- read.csv("/data/inputs/health/nhgis0001_ts_geog2010_tract.csv", stringsAsFactors = FALSE); str(ct_raw) -# UPDATED -ct_age_desc <- read.csv("/data/inputs/health/age_group_desc.csv", stringsAsFactors = FALSE); str(ct_age_desc) +# UPDATED - MP +ct_raw <- read.csv("data/inputs/health/nhgis0001_ts_geog2010_tract.csv", stringsAsFactors = FALSE); str(ct_raw) +# UPDATED - MP +ct_age_desc <- read.csv("data/inputs/health/age_group_desc.csv", stringsAsFactors = FALSE); str(ct_age_desc) ct_ca <- ct_raw %>% `colnames<-`(tolower(colnames(ct_raw)))%>% @@ -58,8 +58,8 @@ age_group_ct <- ct_ca %>% #CDOF demographic projections -# UPDATED -cdof_raw <- fread("/data/inputs/health/CDOF_p2_Age_1yr_Nosup.csv", stringsAsFactors = FALSE, blank.lines.skip = TRUE)%>% +# UPDATED - MP +cdof_raw <- fread("data/inputs/health/CDOF_p2_Age_1yr_Nosup.csv", stringsAsFactors = FALSE, blank.lines.skip = TRUE)%>% select(-Column1:-Column16331)%>% gather(year,pop,'2010':'2060')%>% mutate(pop = as.numeric(str_replace(pop,",","")), @@ -92,8 +92,8 @@ cdof_pred <- cdof_raw %>% #County name to merged with BenMAP row/col county indicators -# UPDATED -ct <- read_sf("/data/inputs/health/County_def.shp") +# UPDATED - MP +ct <- read_sf("data/inputs/health/County_def.shp") county <- as.data.frame(cbind(ct$NAME, ct$STATE_NAME, ct$ROW, ct$COL), stringsAsFactors = F) colnames(county) <- c("county","state", "row", "col") @@ -102,8 +102,8 @@ county$col <- as.integer(county$col) # Mortality incidence data (2015 baseline) -# UPDATED -incidence_ca <- read.csv("/data/inputs/health/Mortality Incidence (2015).csv", stringsAsFactors = F) %>% +# UPDATED - MP +incidence_ca <- read.csv("data/inputs/health/Mortality Incidence (2015).csv", stringsAsFactors = F) %>% filter(Endpoint == "Mortality, All Cause") %>% select(-Endpoint.Group,-Race:-Ethnicity, -Type)%>% left_join(county, by = c("Column"="col","Row"="row"))%>% @@ -153,8 +153,8 @@ ct_incidence_ca <- temp_ct_ca %>% -county.x,-county.y,-value.x,-value.y) # UPDATED - MP -write.csv(ct_incidence_ca,file = "/data/processed/ct_incidence_ca.csv", row.names = FALSE) -ct_incidence_ca <- read.csv("/data/processed/ct_incidence_ca.csv", stringsAsFactors = FALSE) +write.csv(ct_incidence_ca,file = "data/processed/ct_incidence_ca.csv", row.names = FALSE) +ct_incidence_ca <- read.csv("data/processed/ct_incidence_ca.csv", stringsAsFactors = FALSE) ##Projected population data and mortality incidence @@ -186,8 +186,8 @@ ct_inc_45 <- ct_inc_45_temp%>% ## Output final population and mortality incidence data # UPDATED - MP -write.csv(ct_inc_45,file = "/data/processed/ct_inc_45.csv", row.names = FALSE) -ct_inc_45 <- fread("/data/processed/ct_inc_45.csv", stringsAsFactors = FALSE) +write.csv(ct_inc_45,file = "data/processed/ct_inc_45.csv", row.names = FALSE) +ct_inc_45 <- fread("data/processed/ct_inc_45.csv", stringsAsFactors = FALSE) ## Census tract level for labor team @@ -197,4 +197,4 @@ ct_pop_45 <- ct_inc_45 %>% pop = sum(pop)) # UPDATED - MP -write.csv(ct_pop_45,file = "/data/processed/ct_pop_45.csv", row.names = FALSE) +write.csv(ct_pop_45,file = "data/processed/ct_pop_45.csv", row.names = FALSE) From fe727479949a53cb29dd48eb8fad4c79c1c6677d Mon Sep 17 00:00:00 2001 From: Maxwell Patterson Date: Mon, 12 Feb 2024 21:03:25 +0000 Subject: [PATCH 07/19] xwell figured out how to add files --- County_def.dbf | Bin 0 -> 416864 bytes County_def.prj | 1 + County_def.shx | Bin 0 -> 24972 bytes 3 files changed, 1 insertion(+) create mode 100644 County_def.dbf create mode 100644 County_def.prj create mode 100644 County_def.shx diff --git a/County_def.dbf b/County_def.dbf new file mode 100644 index 0000000000000000000000000000000000000000..aba8258fd5abcd8ef9df6a82aa4cf754593dacb9 GIT binary patch literal 416864 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 Date: Tue, 13 Feb 2024 05:54:05 +0000 Subject: [PATCH 08/19] file path work --- County_def.dbf | Bin 416864 -> 0 bytes County_def.prj | 1 - County_def.shx | Bin 24972 -> 0 bytes .../extraction/clean_doc_prod.R | 76 +++++++++--------- health/scripts/health_data.R | 2 +- health/scripts/source_receptor_matrix.R | 16 ++-- health/scripts/srm_extraction_population.R | 6 -- labor/processing/ica_multiplier_process.R | 18 ++--- 8 files changed, 55 insertions(+), 64 deletions(-) delete mode 100644 County_def.dbf delete mode 100644 County_def.prj delete mode 100644 County_def.shx diff --git a/County_def.dbf b/County_def.dbf deleted file mode 100644 index aba8258fd5abcd8ef9df6a82aa4cf754593dacb9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 416864 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 saveRDS(all_prod, file = "data/processed/well_prod_m.rds") ## injection data +# UPDATE - should work once data is inputted into all the CSV folders ## ------------------------------ -inj_7785 <- read_csv(paste0(data_directory, "raw/hist_well/CSV_1977_1985/CaliforniaOilAndGasWellMonthlyInjection.csv")) -inj_8689 <- read_csv(paste0(data_directory, "raw/hist_well/CSV_1986_1989/CaliforniaOilAndGasWellMonthlyInjection.csv")) -inj_9094 <- read_csv(paste0(data_directory, "raw/hist_well/CSV_1990_1994/CaliforniaOilAndGasWellMonthlyInjection.csv")) -inj_9599 <- read_csv(paste0(data_directory, "raw/hist_well/CSV_1995_1999/CaliforniaOilAndGasWellMonthlyInjection.csv")) -inj_0004 <- read_csv(paste0(data_directory, "raw/hist_well/CSV_2000_2004/CaliforniaOilAndGasWellMonthlyInjection.csv")) -inj_0509 <- read_csv(paste0(data_directory, "raw/hist_well/CSV_2005_2009/CaliforniaOilAndGasWellMonthlyInjection.csv")) -inj_1514 <- read_csv(paste0(data_directory, "raw/hist_well/CSV_2010_2014/CaliforniaOilAndGasWellMonthlyInjection.csv")) -inj_15 <- read_csv(paste0(data_directory, "raw/hist_well/CSV_2015/CaliforniaOilAndGasWellMonthlyInjection.csv")) -inj_16 <- read_csv(paste0(data_directory, "raw/hist_well/CSV_2016/CaliforniaOilAndGasWellMonthlyInjection.csv")) -inj_17 <- read_csv(paste0(data_directory, "raw/hist_well/CSV_2017/CaliforniaOilAndGasWellMonthlyInjection.csv")) -inj_18 <- read_csv(paste0(data_directory, "raw/hist_well/CSV_2018/CaliforniaOilAndGasWellMonthlyInjection.csv")) -inj_19 <- read_csv(paste0(data_directory, "raw/hist_well/CSV_2019/CaliforniaOilAndGasWellMonthlyInjection.csv")) +inj_7785 <- read_csv("data/inputs/extraction/monthly-prod-inj-wells/CSV_1977_1985/CaliforniaOilAndGasWellMonthlyInjection.csv") +inj_8689 <- read_csv("data/inputs/extraction/monthly-prod-inj-wells/CSV_1986_1989/CaliforniaOilAndGasWellMonthlyInjection.csv") +inj_9094 <- read_csv("data/inputs/extraction/monthly-prod-inj-wells/CSV_1990_1994/CaliforniaOilAndGasWellMonthlyInjection.csv") +inj_9599 <- read_csv("data/inputs/extraction/monthly-prod-inj-wells/CSV_1995_1999/CaliforniaOilAndGasWellMonthlyInjection.csv") +inj_0004 <- read_csv("data/inputs/extraction/monthly-prod-inj-wells/CSV_2000_2004/CaliforniaOilAndGasWellMonthlyInjection.csv") +inj_0509 <- read_csv("data/inputs/extraction/monthly-prod-inj-wells/CSV_2005_2009/CaliforniaOilAndGasWellMonthlyInjection.csv") +inj_1514 <- read_csv("data/inputs/extraction/monthly-prod-inj-wells/CSV_2010_2014/CaliforniaOilAndGasWellMonthlyInjection.csv") +inj_15 <- read_csv("data/inputs/extraction/monthly-prod-inj-wells/CSV_2015/CaliforniaOilAndGasWellMonthlyInjection.csv") +inj_16 <- read_csv("data/inputs/extraction/monthly-prod-inj-wells/CSV_2016/CaliforniaOilAndGasWellMonthlyInjection.csv") +inj_17 <- read_csv("data/inputs/extraction/monthly-prod-inj-wells/CSV_2017/CaliforniaOilAndGasWellMonthlyInjection.csv") +inj_18 <- read_csv("data/inputs/extraction/monthly-prod-inj-wells/CSV_2018/CaliforniaOilAndGasWellMonthlyInjection.csv") +inj_19 <- read_csv("data/inputs/extraction/monthly-prod-inj-wells/CSV_2019/CaliforniaOilAndGasWellMonthlyInjection.csv") ## bind rows monthly_inj <- rbind(inj_7785, inj_8689, inj_9094, inj_9599, inj_0004, inj_0509, inj_1514, inj_15, inj_16, inj_17, @@ -111,19 +114,20 @@ all_inject <- monthly_inj %>% saveRDS(all_inject, file = paste0(data_directory, "processed/well_inject_m.rds")) ## well data +# UPDATE - should work once data is inputted into all the CSV folders ## ----------------------------- -wells_7785 <- read_csv(paste0(data_directory, "raw/hist_well/CSV_1977_1985/CaliforniaOilAndGasWells.csv")) -wells_8689 <- read_csv(paste0(data_directory, "raw/hist_well/CSV_1986_1989/CaliforniaOilAndGasWells.csv")) -wells_9094 <- read_csv(paste0(data_directory, "raw/hist_well/CSV_1990_1994/CaliforniaOilAndGasWells.csv")) -wells_9599 <- read_csv(paste0(data_directory, "raw/hist_well/CSV_1995_1999/CaliforniaOilAndGasWells.csv")) -wells_0004 <- read_csv(paste0(data_directory, "raw/hist_well/CSV_2000_2004/CaliforniaOilAndGasWells.csv")) -wells_0509 <- read_csv(paste0(data_directory, "raw/hist_well/CSV_2005_2009/CaliforniaOilAndGasWells.csv")) -wells_1014 <- read_csv(paste0(data_directory, "raw/hist_well/CSV_2010_2014/CaliforniaOilAndGasWells.csv")) -wells_15 <- read_csv(paste0(data_directory, "raw/hist_well/CSV_2015/CaliforniaOilAndGasWells.csv")) -wells_16 <- read_csv(paste0(data_directory, "raw/hist_well/CSV_2016/CaliforniaOilAndGasWells.csv")) -wells_17 <- read_csv(paste0(data_directory, "raw/hist_well/CSV_2017/CaliforniaOilAndGasWells.csv")) -wells_18 <- read_csv(paste0(data_directory, "raw/hist_well/CSV_2018/CaliforniaOilAndGasWells.csv")) -wells_19 <- read_csv(paste0(data_directory, "raw/hist_well/CSV_2019/CaliforniaOilAndGasWells.csv")) +wells_7785 <- read_csv("data/inputs/extraction/monthly-prod-inj-wells/CSV_1977_1985/CaliforniaOilAndGasWells.csv") +wells_8689 <- read_csv("data/inputs/extraction/monthly-prod-inj-wells/CSV_1986_1989/CaliforniaOilAndGasWells.csv") +wells_9094 <- read_csv("data/inputs/extraction/monthly-prod-inj-wells/CSV_1990_1994/CaliforniaOilAndGasWells.csv") +wells_9599 <- read_csv("data/inputs/extraction/monthly-prod-inj-wells/CSV_1995_1999/CaliforniaOilAndGasWells.csv") +wells_0004 <- read_csv("data/inputs/extraction/monthly-prod-inj-wells/CSV_2000_2004/CaliforniaOilAndGasWells.csv") +wells_0509 <- read_csv("data/inputs/extraction/monthly-prod-inj-wells/CSV_2005_2009/CaliforniaOilAndGasWells.csv") +wells_1014 <- read_csv("data/inputs/extraction/monthly-prod-inj-wells/CSV_2010_2014/CaliforniaOilAndGasWells.csv") +wells_15 <- read_csv("data/inputs/extraction/monthly-prod-inj-wells/CSV_2015/CaliforniaOilAndGasWells.csv") +wells_16 <- read_csv("data/inputs/extraction/monthly-prod-inj-wells/CSV_2016/CaliforniaOilAndGasWells.csv") +wells_17 <- read_csv("data/inputs/extraction/monthly-prod-inj-wells/CSV_2017/CaliforniaOilAndGasWells.csv") +wells_18 <- read_csv("data/inputs/extraction/monthly-prod-inj-wells/CSV_2018/CaliforniaOilAndGasWells.csv") +wells_19 <- read_csv("data/inputs/extraction/monthly-prod-inj-wells/CSV_2019/CaliforniaOilAndGasWells.csv") ## figure this ish out diff --git a/health/scripts/health_data.R b/health/scripts/health_data.R index 4c1d87c5..20aab1a9 100644 --- a/health/scripts/health_data.R +++ b/health/scripts/health_data.R @@ -2,7 +2,7 @@ # vthivierge@ucsb.edu # created: 08/25/2021 # updated: 05/26/2022 -# updated: 02/09/2024 +# updated: 02/12/2024 # set up environment ######################################## diff --git a/health/scripts/source_receptor_matrix.R b/health/scripts/source_receptor_matrix.R index 4ab5117b..ce620a14 100644 --- a/health/scripts/source_receptor_matrix.R +++ b/health/scripts/source_receptor_matrix.R @@ -1,12 +1,14 @@ ## Directory +# updated: 2/12/24 library(tidyverse) library(sf) -# setwd(dirname(rstudioapi::getActiveDocumentContext()$path)) #In scripts folder -# setwd('../../..') #Goes back to home project directory -# getwd() +# setwd(dirname(rstudioapi::getActiveDocumentContext()$path)) +setwd('/capstone/freshcair/meds-freshcair-capstone') # Sets directory based on Taylor structure +getwd() + ## paths main_path <- '/Volumes/GoogleDrive/Shared drives/emlab/projects/current-projects/calepa-cn/' @@ -14,13 +16,13 @@ sp_data_path <- paste0(main_path, "data/GIS/raw/") health_data_path <- paste0(main_path, "data/health/source_receptor_matrix/inmap_output_srm/") srm_save_path <- paste0(main_path, "data/health/source_receptor_matrix/inmap_processed_srm/") -## Read census tract shp file -census_tract <- read_sf(paste0(sp_data_path,"census-tract/tl_2019_06_tract.shp")) %>% +## Read census tract shp file - UPDATED - MP +census_tract <- read_sf('data/inputs/gis/census-tract/tl_2019_06_tract.shp') %>% select(-STATEFP:-TRACTCE,-NAME:-INTPTLON)%>% st_transform(crs=3310) -## counties, no islands -CA_counties <- st_read(paste0(sp_data_path, "CA_counties_noislands/CA_Counties_TIGER2016_noislands.shp")) %>% +## counties, no islands - UPDATED - MP +CA_counties <- st_read('data/inputs/gis/CA_counties_noislands/CA_Counties_TIGER2016_noislands.shp') %>% st_transform(crs=3310) %>% select(OBJECTID, GEOID) diff --git a/health/scripts/srm_extraction_population.R b/health/scripts/srm_extraction_population.R index 5c3b952d..f9fcf668 100644 --- a/health/scripts/srm_extraction_population.R +++ b/health/scripts/srm_extraction_population.R @@ -18,12 +18,6 @@ library(dplyr) rm(list=ls()) -inmapExFiles <- "calepa-cn/data/health/source_receptor_matrix/inmap_processed_srm/extraction" -sourceFiles <- "calepa-cn/data/health/source_receptor_matrix/inmap_processed_srm" -mainFiles <- "calepa-cn/data/health/raw" - - - # (0) Load CES3.0 ces3<-read_csv(paste0(mainFiles,"/ces3results_part.csv", sep="")) ces3$GEOID=paste("0",as.character(ces3$census_tract),sep="") diff --git a/labor/processing/ica_multiplier_process.R b/labor/processing/ica_multiplier_process.R index 29ad224b..2938ea71 100644 --- a/labor/processing/ica_multiplier_process.R +++ b/labor/processing/ica_multiplier_process.R @@ -28,23 +28,14 @@ library("sf") #Set wd - -#Chris' macbook -ica_dollar <- '/Volumes/GoogleDrive/Shared drives/emlab/projects/current-projects/calepa-cn/data/labor/processed/implan-results/academic-paper-multipliers/ica' -impact_dollar <- '/Volumes/GoogleDrive/Shared drives/emlab/projects/current-projects/calepa-cn/data/labor/processed/implan-results/academic-paper-multipliers/impact' -statewide_processed <- '/Volumes/GoogleDrive/Shared drives/emlab/projects/current-projects/calepa-cn/data/labor/processed/implan-results/statewide/processed' -processed <- '/Volumes/GoogleDrive/Shared drives/emlab/projects/current-projects/calepa-cn/data/labor/processed/implan-results/academic-paper-multipliers/processed' -fte <- '/Volumes/GoogleDrive/Shared drives/emlab/projects/current-projects/calepa-cn/data/labor/processed/implan-results' - - +setwd('/capstone/freshcair/meds-freshcair-capstone') # Sets directory based on Taylor structure +getwd() ############################################################################################ #Read in spreadsheet for FTE conversion -setwd(fte) - -fte_convert <- read_xlsx('fte-convert.xlsx')%>% +fte_convert <- read_xlsx('data/inputs/labor/fte-convert.xlsx')%>% rename(fte_per_job = FTEperTotalEmp, ind_code = Implan546Index) %>% select(ind_code,fte_per_job) @@ -55,12 +46,13 @@ fte_convert <- read_xlsx('fte-convert.xlsx')%>% ### NOTE: all multipliers are for $1 million of output value in an industry -setwd(ica_dollar) +# setwd(ica_dollar) ### Kern #### extraction +# UPDATE - not sure where ICA data is located ica_emp_ext_kern <- read_csv('ica-emp-ext-kern.csv') %>% filter(is.na(X1)==F) %>% mutate(county = "Kern", segment = "extraction") %>% From 101f16df68de6e6f444047f7413348e58fa8558a Mon Sep 17 00:00:00 2001 From: mariamkg00 Date: Wed, 14 Feb 2024 04:44:15 +0000 Subject: [PATCH 09/19] extraction_clusters input file is not found in the Taylor file repository --- health/scripts/appendix_maps.R | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/health/scripts/appendix_maps.R b/health/scripts/appendix_maps.R index f7c8ad74..839719fb 100644 --- a/health/scripts/appendix_maps.R +++ b/health/scripts/appendix_maps.R @@ -1,5 +1,10 @@ #Danae Hernandez-Cortes hernandezcortes@ucsb.edu #INFRASTRUCTURE TO SEND TO THE MODELING TEAM + + +# UPDATED 2/13/2024 by Mariam Garcia + + #Libraries library(sf) library(tidyverse) @@ -18,6 +23,10 @@ library(dplyr) rm(list=ls()) +# Updated working directory +setwd('/capstone/freshcair/meds-freshcair-capstone') # Sets directory based on Taylor structure + + #DANAE'S MACHINE outputFiles <- "D:/Dropbox/UCSB-PhD/emLab/CALEPA/data/academic_output" sourceFiles <- "D:/Dropbox/UCSB-PhD/emLab/CALEPA/data/source_receptor_matrix" @@ -28,7 +37,9 @@ inmapReFiles <- "D:/Dropbox/UCSB-PhD/emLab/CALEPA/data/source_receptor_matrix/i CA<-st_read("H:/CALEPA/GIS/state/california2016.shp") -CA_counties<-st_read("D:/Dropbox/UCSB-PhD/emLab/CALEPA/data/CA_counties/CA_Counties/CA_Counties_TIGER2016.shp") + +# UPDATED - MG +CA_counties<-st_read("/capstone/freshcair/meds-freshcair-capstone/data/inputs/gis/CA_Counties/CA_Counties_TIGER2016.shp") extraction_clusters<-st_read("D:/Dropbox/UCSB-PhD/emLab/CALEPA/CALEPA_bren_computer/CALEPA/GIS/fields/academic_paper/extraction_fields_clusters_10km.shp") From 76cc217e85ba783059230bcc2347af16959c1a20 Mon Sep 17 00:00:00 2001 From: mariamkg00 Date: Wed, 14 Feb 2024 04:55:07 +0000 Subject: [PATCH 10/19] could not find emission_factors.csv --- health/scripts/emission-factors.R | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/health/scripts/emission-factors.R b/health/scripts/emission-factors.R index 855c6e54..65e89c0b 100644 --- a/health/scripts/emission-factors.R +++ b/health/scripts/emission-factors.R @@ -3,6 +3,9 @@ # created: 08/11/2020 # updated: 06/26/2023 + +# Updated by Mariam Garcia 2/13/2024 + # set up environment rm(list=ls()) @@ -25,7 +28,9 @@ for (i in packages) { ## Directory #wd <- c("H:/EJ_wells") # Danae's WD -wd <- c("G:/Shared drives/emlab/projects/current-projects/calepa-cn/data/health/processed/DataFiles_EmissionsFactors") #Vincent's WD + +# UPDATED - MG +wd <- c('/capstone/freshcair/meds-freshcair-capstone') #freshCAir main directory setwd(wd) getwd() From 48b397a49e3e852ebc3732115fb2d8d978a15fc0 Mon Sep 17 00:00:00 2001 From: mariamkg00 Date: Wed, 14 Feb 2024 05:13:57 +0000 Subject: [PATCH 11/19] deltas folder not found in file structure --- health/scripts/health_mortality.R | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/health/scripts/health_mortality.R b/health/scripts/health_mortality.R index 7b76504d..27e36337 100644 --- a/health/scripts/health_mortality.R +++ b/health/scripts/health_mortality.R @@ -3,6 +3,9 @@ # created: 08/25/2021 # updated: 09/13/2021 +# UPDATED MG 2/13/2024 + + # set up environment ######################################## rm(list=ls()) @@ -10,7 +13,7 @@ rm(list=ls()) ## Packages packages=c("xlsx", "gdata", "dplyr","tidyr", "stringr", "fuzzyjoin", "stringr", "tictoc", - "ggplot2", "stargazer", "plm", "cowplot", "sf", "lwgeom","data.table") + "ggplot2", "stargazer", "plm", "cowplot", "sf", "lwgeom","data.table","tidyverse") lapply(1:length(packages), function(x) ifelse((require(packages[x],character.only=TRUE)==FALSE),install.packages(packages[x]), @@ -18,16 +21,23 @@ lapply(1:length(packages), function(x) #Set directory -setwd(dirname(rstudioapi::getActiveDocumentContext()$path)) -setwd('../../..') #Goes back to home project directory +#setwd(dirname(rstudioapi::getActiveDocumentContext()$path)) + +# UPDATED MG +setwd('/capstone/freshcair/meds-freshcair-capstone') # Sets directory based on Taylor structure + getwd() # Load and merge processed data ##################################### #1 Disadvantaged community definition -ces3 <- read.csv("./calepa-cn/data/health/processed/ces3_data.csv", stringsAsFactors = FALSE)%>% - select(census_tract,disadvantaged) +# UPDATED MG +ces3 <- read.csv("data/inputs/health/ces3_data.csv", stringsAsFactors = FALSE) + +# UPDATED MG +ces3 <- ces3 %>% + dplyr::select(census_tract,disadvantaged) #2 Merge pollution reduction scenarios From 2915913425878bc9fe8aad9b65e9d809a7387425 Mon Sep 17 00:00:00 2001 From: mariamkg00 Date: Thu, 15 Feb 2024 05:01:19 +0000 Subject: [PATCH 12/19] updated file path and ct_inc_pop_45 --- health/scripts/health_mortality.R | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/health/scripts/health_mortality.R b/health/scripts/health_mortality.R index 27e36337..34c6a3d1 100644 --- a/health/scripts/health_mortality.R +++ b/health/scripts/health_mortality.R @@ -62,7 +62,9 @@ toc() #3 Merge population and incidence -ct_inc_pop_45 <- read.csv("./calepa-cn/data/benmap/processed/ct_inc_45.csv", stringsAsFactors = FALSE)%>% + +# UPDATED -MG +ct_inc_pop_45 <- read.csv("./data/processed/ct_inc_45.csv", stringsAsFactors = FALSE)%>% mutate(ct_id = as.numeric(paste0(stringr::str_sub(gisjoin,3,3), stringr::str_sub(gisjoin,5,7), stringr::str_sub(gisjoin,9,14))))%>% From fea3b2b7b6ee1fb46a4b71558521158c821c3892 Mon Sep 17 00:00:00 2001 From: mariamkg00 Date: Thu, 15 Feb 2024 05:01:39 +0000 Subject: [PATCH 13/19] updated file path --- health/scripts/inmap-to-csv.R | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/health/scripts/inmap-to-csv.R b/health/scripts/inmap-to-csv.R index 84823ca3..4cf6c4f1 100644 --- a/health/scripts/inmap-to-csv.R +++ b/health/scripts/inmap-to-csv.R @@ -3,6 +3,8 @@ # created: 08/06/2020 # updated: 09/28/2020 +# updated: 02/14/2024 + # set up environment @@ -24,15 +26,19 @@ for (i in packages) { ## Directory -setwd(dirname(rstudioapi::getActiveDocumentContext()$path)) #In scripts folder -setwd('../../..') #Goes back to home project directory +#setwd(dirname(rstudioapi::getActiveDocumentContext()$path)) #In scripts folder + +# Updated working directory +setwd('/capstone/freshcair/meds-freshcair-capstone') getwd() ## Read census tract shp file -census_tract <- read_sf("./calepa-cn/data/inmap/census-tract/tl_2019_06_tract.shp")%>% - select(-STATEFP:-TRACTCE,-NAME:-INTPTLON)%>% +# UPDATED - MG + +census_tract <- read_sf("./data/inputs/gis/census-tract/tl_2019_06_tract.shp")%>% + dplyr::select(-STATEFP:-TRACTCE,-NAME:-INTPTLON)%>% st_transform(crs=3310) ## Load shape files names From 2cf7e25075986d0da9a7ee82ef21c28fb1740578 Mon Sep 17 00:00:00 2001 From: mariamkg00 Date: Thu, 15 Feb 2024 05:34:55 +0000 Subject: [PATCH 14/19] updated file path and CA_ct variable --- health/scripts/main_maps.R | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/health/scripts/main_maps.R b/health/scripts/main_maps.R index 7ac32ddb..3a005855 100644 --- a/health/scripts/main_maps.R +++ b/health/scripts/main_maps.R @@ -1,4 +1,7 @@ #Danae Hernandez-Cortes hernandezcortes@ucsb.edu + +# Updated: 2/14/2024 by MG + #EXTRACTION MAP #Libraries library(sf) @@ -31,12 +34,17 @@ inmapReFiles <- "C:/Users/dhern125/Dropbox/UCSB-PhD/emLab/CALEPA/data/source_re #inmapExFiles <- "emlab/projects/current-projects/calepa-cn/data/health/source_receptor_matrix/inmap_processed_srm/extraction" #inmapReFiles <- "emlab/projects/current-projects/calepa-cn/data/health/source_receptor_matrix/inmap_processed_srm/refining" +# Updating working directory +setwd('/capstone/freshcair/meds-freshcair-capstone') + + ############################################# # PREPARE FILES FROM INMAP OUTPUT: EXTRACTION ############################################# +# UPDATED - MG #Census tracts -CA_ct<-st_read("C:/Users/dhern125/Dropbox/UCSB-PhD/emLab/CALEPA/data/census_tracts/census-tract/tl_2019_06_tract.shp") +CA_ct<-st_read("./data/inputs/gis/census-tract/tl_2019_06_tract.shp") #EXTRACTION MAP CLUSTER 1 sites_vector <- c(1) From ffa7968348484b401d68fb1a5ba596ed5a045988 Mon Sep 17 00:00:00 2001 From: Maxwell Patterson Date: Sat, 17 Feb 2024 08:20:32 +0000 Subject: [PATCH 15/19] adding eda file --- .../data-processing-prep/create_ccs_scens.R | 8 +- .../extraction/clean_doc_prod.R | 30 +++-- .../extraction/income_data.R | 13 ++- .../extraction/opgee-carb-results.R | 6 +- .../extraction/process-monthly-inj.R | 3 +- .../extraction/process-monthly-prod.R | 3 +- .../extraction/rystad_processing.R | 103 +++++++++--------- .../extraction/zero_prod.R | 21 ++-- .../data-processing-prep/social_cost_carbon.R | 10 +- energy/data-processing-prep/stocks_flows.R | 12 +- .../compile_extraction_outputs_full.R | 24 ++-- .../model-prep/create_entry_econ_variables.R | 33 +++--- .../economically_recoverable_resources.R | 6 +- .../model-prep/gen_well_setback_status.R | 27 ++--- .../model-prep/match_fields_assets.R | 36 +++--- .../model-prep/well_setback_sp_prep.R | 7 +- health/scripts/figures_map_totalpm25.R | 11 +- health/scripts/srm_extraction_population.R | 7 ++ pred-model/eda.R | 16 +++ 19 files changed, 216 insertions(+), 160 deletions(-) create mode 100644 pred-model/eda.R diff --git a/energy/data-processing-prep/create_ccs_scens.R b/energy/data-processing-prep/create_ccs_scens.R index 84e31a4e..a07c7286 100644 --- a/energy/data-processing-prep/create_ccs_scens.R +++ b/energy/data-processing-prep/create_ccs_scens.R @@ -1,12 +1,14 @@ ## Tracey Mangin ## October 22, 2021 ## add infinity price to ccs +# revised: feb 16 2024 by Haejin library(tidyverse) library(data.table) # paths ----- -scen_path = '/Volumes/GoogleDrive/Shared drives/emlab/projects/current-projects/calepa-cn/project-materials/scenario-inputs' +scen_path = '/capstone/freshcair/meds-freshcair-capstone/data/inputs/scenarios' +file_path = '/capstone/freshcair/meds-freshcair-capstone/data/processed' # added file path, b/c read and store at the same place ## files ccs_ext_file = 'ccs_extraction_scenarios.csv' @@ -25,7 +27,7 @@ setorder(ccs_infin, "year", "ccs_scenario", "ccs_price", "units") ## bind ccs_ext_revised <- rbind(ccs_scens_ext, ccs_infin) -fwrite(ccs_ext_revised, file.path(scen_path, "ccs_extraction_scenarios_revised.csv")) +fwrite(ccs_ext_revised, file.path(file_path , "ccs_extraction_scenarios_revised.csv")) # revised file path ## refining - load ccs scenarios @@ -42,7 +44,7 @@ setorder(ccs_infin_r, "year", "ccs_scenario", "ccs_price", "units") ## bind ccs_ref_revised <- rbind(ccs_scens_ref, ccs_infin_r) -fwrite(ccs_ref_revised, file.path(scen_path, "ccs_refining_scenarios_revised.csv")) +fwrite(ccs_ref_revised, file.path(file_path, "ccs_refining_scenarios_revised.csv")) # revised the file path diff --git a/energy/data-processing-prep/extraction/clean_doc_prod.R b/energy/data-processing-prep/extraction/clean_doc_prod.R index 188bf22e..6a69ae1a 100644 --- a/energy/data-processing-prep/extraction/clean_doc_prod.R +++ b/energy/data-processing-prep/extraction/clean_doc_prod.R @@ -2,16 +2,19 @@ ## April 21, 2020 ## Data cleaning -- oil production and injection data ## Data from DOC -# updated: 02/09/2024 +# updated: 02/09/2024 by Maxwell + +# add update: Feb 14 2024 by Haejin ## libraries library(tidyverse) library(readr) library(lubridate) library(rebus) -library(readtext) +#library(readtext) # update -haejin library(readxl) library(here) +library(dplyr) # update -haejin ## set directory setwd(dirname(rstudioapi::getActiveDocumentContext()$path)) @@ -58,7 +61,9 @@ monthly_prod <- rbind(prod_7785, prod_8689, prod_9094, prod_9599, prod_0004, pro ccodes <- read_csv("data/inputs/extraction/county_codes.csv") %>% rename(county_name = county, county = number) %>% - select(county_name, county) + as.data.frame() %>% # add this + dplyr::select(county_name, county) # add dplyr:: + ## well type code welltype_df <- tibble(WellTypeCode = c("AI", "DG", "GD", "GS", @@ -79,11 +84,14 @@ all_prod <- monthly_prod %>% left_join(welltype_df) %>% mutate(well_type_name = ifelse(is.na(well_type_name), WellTypeCode, well_type_name)) + + + # UPDATED - MP saveRDS(all_prod, file = "data/processed/well_prod_m.rds") ## injection data -# UPDATE - should work once data is inputted into all the CSV folders +# UPDATE - should work once data is inputted into all the CSV folders -Done!(haejin) ## ------------------------------ inj_7785 <- read_csv("data/inputs/extraction/monthly-prod-inj-wells/CSV_1977_1985/CaliforniaOilAndGasWellMonthlyInjection.csv") inj_8689 <- read_csv("data/inputs/extraction/monthly-prod-inj-wells/CSV_1986_1989/CaliforniaOilAndGasWellMonthlyInjection.csv") @@ -107,11 +115,15 @@ all_inject <- monthly_inj %>% mutate(county = as.numeric(str_sub(APINumber, 3, 5)), year = year(InjectionDate), month = month(InjectionDate)) %>% - left_join(ccodes) %>% + left_join(ccodes) %>% left_join(welltype_df) %>% mutate(well_type_name = ifelse(is.na(well_type_name), WellTypeCode, well_type_name)) -saveRDS(all_inject, file = paste0(data_directory, "processed/well_inject_m.rds")) +## missing data_directory -- Haejin +data_directory <- "/capstone/freshcair/meds-freshcair-capstone/data/" + + +saveRDS(all_inject, file = paste0(data_directory, "processed/well_inject_m.rds")) # have a error message : Error: Status code 401 returned by RStudio Server when executing 'console_input' ## well data # UPDATE - should work once data is inputted into all the CSV folders @@ -219,7 +231,7 @@ wells2 <- wells_19 %>% # test2 <- str_replace_all(test2, pattern = "Sterling, East " %R% OPEN_PAREN %R% "ABD" %R% CLOSE_PAREN, "Sterling East ABD") # test2 <- str_replace_all(test2, pattern = "Compton Landing, S., Gas " %R% OPEN_PAREN %R% "ABD" %R% CLOSE_PAREN, "Compton Landing S. Gas ABD") -fix_2019 <- readLines(paste0(data_directory, "raw/hist_well/CSV_2019/CaliforniaOilAndGasWells.csv")) +fix_2019 <- readLines(paste0(data_directory, "inputs/extraction/monthly-prod-inj-wells/CSV_2019/CaliforniaOilAndGasWells.csv")) # update by Haejin fix_20192<- str_replace_all(fix_2019, pattern = "8-9B INT, Sec. 32", "8-9B INT Sec. 32") @@ -230,8 +242,8 @@ fix_20192<- str_replace_all(fix_2019, pattern = "8-9B INT, Sec. 32", "8-9B INT S #040212008000 #040112009400 -writeLines(fix_20192, paste0(data_directory, "processed/wells_19.csv")) +writeLines(fix_20192, paste0(data_directory, "processed/wells_19.csv")) # update by Haejin -wells_2019 <- read_csv(paste0(data_directory, "processed/parseprobs/wells_19.csv")) +wells_2019 <- read_csv(paste0(data_directory, "processed/wells_19.csv")) diff --git a/energy/data-processing-prep/extraction/income_data.R b/energy/data-processing-prep/extraction/income_data.R index 27ee4eec..3cb8ceed 100644 --- a/energy/data-processing-prep/extraction/income_data.R +++ b/energy/data-processing-prep/extraction/income_data.R @@ -1,20 +1,21 @@ ## Tracey Mangin ## October 19, 2021 ## Census data +## revised 02/13/2024 - Haejin library(censusapi) library(tidycensus) library(tidyverse) library(data.table) -main_path <- '/Volumes/GoogleDrive/Shared drives/emlab/projects/current-projects/calepa-cn/' +main_path <- '/capstone/freshcair/meds-freshcair-capstone/' mycensuskey <- "ae05491f7dfe185b0af5b9d56f1287b4c2c78eca" -# apis <- listCensusApis() +#apis <- listCensusApis() # View(apis) # -# availablevars <- listCensusMetadata(name="cps/asec/mar", vintage = 2021) +availablevars <- listCensusMetadata(name="cps/asec/mar", vintage = 2021) # View(availablevars) # # @@ -44,7 +45,7 @@ income <- get_acs(state = "CA", geography = "tract", income <- income %>% mutate(source = "2015-2019 5-year ACS, 2019 dollars") -fwrite(income, paste0(main_path, "data/Census/ca-median-house-income.csv")) +fwrite(income, paste0(main_path, "data/inputs/gis/census-tract/ca-median-house-income.csv")) ## repeat for county @@ -54,7 +55,7 @@ county_income <- get_acs(state = "CA", geography = "county", county_income <- county_income %>% mutate(county = str_remove(NAME, " County, California"), source = "2015-2019 5-year ACS, 2019 dollars") %>% - select(county, variable, estimate, moe, source) + dplyr::select(county, variable, estimate, moe, source) # add dplyr - haejin -fwrite(county_income, paste0(main_path, "data/Census/ca-median-house-income-county.csv")) +fwrite(county_income, paste0(main_path, "data/inputs/gis/census-tract/ca-median-house-income-county.csv")) diff --git a/energy/data-processing-prep/extraction/opgee-carb-results.R b/energy/data-processing-prep/extraction/opgee-carb-results.R index a343dd95..890d91a0 100644 --- a/energy/data-processing-prep/extraction/opgee-carb-results.R +++ b/energy/data-processing-prep/extraction/opgee-carb-results.R @@ -4,9 +4,9 @@ # ------------------------------------------- INPUTS ----------------------------------- - data_dir = '/Volumes/GoogleDrive/Shared drives/emlab/projects/current-projects/calepa-cn/data/OPGEE/' - opgee_fil = 'OPGEE_v2.0_with-CARB-inputs.xlsm' - names_fil = 'opgee_field_names.csv' + data_dir = '/capstone/freshcair/meds-freshcair-capstone/data/inputs/' + opgee_fil = 'OPGEE_v2.0_with-CARB-inputs.xlsm' ## no file here - haejin + names_fil = 'opgee_field_names.csv' ## no file here - haejin # ------------------------------------------- MAIN ----------------------------------- diff --git a/energy/data-processing-prep/extraction/process-monthly-inj.R b/energy/data-processing-prep/extraction/process-monthly-inj.R index c85d2c0d..d0fdc0b0 100644 --- a/energy/data-processing-prep/extraction/process-monthly-inj.R +++ b/energy/data-processing-prep/extraction/process-monthly-inj.R @@ -1,10 +1,11 @@ ## Tracey Mangin ## April 29, 2021 ## process well injection, save for later use through out +# revised: feb 14, 2024 by Haejin # ------------------------------------------- INPUTS ----------------------------------- -data_dir <- "/Volumes/GoogleDrive/Shared\ drives/emlab/projects/current-projects/calepa-cn/data/stocks-flows/processed/" +data_dir <- "/capstone/freshcair/meds-freshcair-capstone/data/processed/" minj_fil <- "well_inject_m.rds" wells_19_fil <- "wells_19.csv" diff --git a/energy/data-processing-prep/extraction/process-monthly-prod.R b/energy/data-processing-prep/extraction/process-monthly-prod.R index da834805..b4b92ae1 100644 --- a/energy/data-processing-prep/extraction/process-monthly-prod.R +++ b/energy/data-processing-prep/extraction/process-monthly-prod.R @@ -1,10 +1,11 @@ ## Tracey Mangin ## March 10, 2021 ## process well production, save for later use through out +## revised: feb 14, 2024 -haejin # ------------------------------------------- INPUTS ----------------------------------- -data_dir <- "/Volumes/GoogleDrive/Shared\ drives/emlab/projects/current-projects/calepa-cn/data/stocks-flows/processed/" +data_dir <- "/capstone/freshcair/meds-freshcair-capstone/data/processed/" mprod_fil <- "well_prod_m.rds" wells_19_fil <- "wells_19.csv" diff --git a/energy/data-processing-prep/extraction/rystad_processing.R b/energy/data-processing-prep/extraction/rystad_processing.R index c077eec4..f5a7ef9c 100644 --- a/energy/data-processing-prep/extraction/rystad_processing.R +++ b/energy/data-processing-prep/extraction/rystad_processing.R @@ -2,29 +2,32 @@ ## July 15, 2020 ## Script for cleaning Rystad data +# revised: Feb 14, 2024 - Haejin + ## load libraries library(tidyverse) library(rebus) library(stringi) library(data.table) +library(dplyr) ## file paths -rystad_path <- "/Volumes/GoogleDrive/Shared\ drives/emlab/projects/current-projects/calepa-cn/data/Rystad/data/" -data_directory <- "/Volumes/GoogleDrive/Shared\ drives/emlab/projects/current-projects/calepa-cn/data/stocks-flows/processed/" +rystad_path <- "/capstone/freshcair/meds-freshcair-capstone/data/" +data_directory <- "/capstone/freshcair/meds-freshcair-capstone/data/processed/" ## laod data -# economics_df <- read_csv(paste0(rystad_path, "raw/archive/ca_asset_opex_apex_govtt.csv")) -economics_df_update <- read_csv(paste0(rystad_path, "raw/asset_opex_capex_govtt.csv")) -production_df <- read_csv(paste0(rystad_path, "raw/ca_production.csv")) -econ_cats <- read_csv(paste0(rystad_path, "raw/asset_econ_categories.csv")) -err_df <- fread(paste0(rystad_path, "raw/resources_prod_myprod.csv"), skip = 1) -rystad_capex_recov_bbl <- read_csv(paste0(rystad_path, "raw/capex_per_recoverable_bbl.csv")) -api_asset <- read.csv(paste0(rystad_path, "raw/asset-wells.csv")) -rystad_capex_bbl_nom <- read_csv(paste0(rystad_path, "raw/capex_per_bbl_nom.csv")) -rystad_opex_bbl_nom <- read_csv(paste0(rystad_path, "raw/opex_per_bbl_nom.csv")) -asset_rename <- read_csv(paste0(rystad_path, "processed/rystad_asset_rename.csv")) -well_cost_eur <- read.csv(paste0(rystad_path, "raw/well_cost_per_eur.csv")) -field_asset <- read_csv(paste0(rystad_path, "raw/field_to_asset.csv")) +#economics_df <- read_csv(paste0(rystad_path, "proprietery-data/ca_asset_opex_apex_govtt.csv")) +economics_df_update <- read_csv(paste0(rystad_path, "proprietery-data/asset_opex_capex_govtt.csv")) +production_df <- read_csv(paste0(rystad_path, "proprietery-data/ca_production.csv")) +econ_cats <- read_csv(paste0(rystad_path, "proprietery-data/asset_econ_categories.csv")) +err_df <- fread(paste0(rystad_path, "proprietery-data/resources_prod_myprod.csv"), skip = 1) +rystad_capex_recov_bbl <- read_csv(paste0(rystad_path, "proprietery-data/capex_per_recoverable_bbl.csv")) +api_asset <- read.csv(paste0(rystad_path, "proprietery-data/asset-wells.csv")) +rystad_capex_bbl_nom <- read_csv(paste0(rystad_path, "proprietery-data/capex_per_bbl_nom.csv")) +rystad_opex_bbl_nom <- read_csv(paste0(rystad_path, "proprietery-data/opex_per_bbl_nom.csv")) +asset_rename <- read_csv(paste0(rystad_path, "proprietery-data/rystad_asset_rename.csv")) +well_cost_eur <- read.csv(paste0(rystad_path, "proprietery-data/well_cost_per_eur.csv")) +field_asset <- read_csv(paste0(rystad_path, "proprietery-data/field_to_asset.csv")) ## well prod @@ -34,24 +37,24 @@ well_prod <- fread(paste0(data_directory, prod_file), colClasses = c('api_ten_di 'doc_field_code' = 'character')) -## economics +## economics --- not using - by Haejin ##----------------------------------------- ## clean data -economics_df2 <- janitor::clean_names(economics_df) %>% - select(-data_values) %>% - rename(usd_nom = sum) %>% - mutate(usd_nom = usd_nom * 1e6, - string_end = str_detect(asset, pattern = ", US" %R% END), - ca_string = str_detect(asset, pattern = "_CA_"), - clean_asset = str_remove(asset, pattern = ", US" %R% END), - location = sub("_CA.*", "", clean_asset), - location = ifelse(ca_string == FALSE, clean_asset, location), - location = ifelse(str_detect(clean_asset, pattern = "_United States") == TRUE, "United States", location), - company = sub(".*_CA_", "", clean_asset), - company = ifelse(str_detect(clean_asset, pattern = "_United States") == TRUE, sub("_United States*.", "", clean_asset), company), - company = ifelse(company == location, NA, company)) %>% - select(original_asset_name = asset, location, company, economics_group, year, usd_nom) +#economics_df2 <- janitor::clean_names(economics_df) %>% +# dplyr::select(-data_values) %>% +# rename(usd_nom = sum) %>% +# mutate(usd_nom = usd_nom * 1e6, +# string_end = str_detect(asset, pattern = ", US" %R% END), +# ca_string = str_detect(asset, pattern = "_CA_"), +# clean_asset = str_remove(asset, pattern = ", US" %R% END), +# location = sub("_CA.*", "", clean_asset), +# location = ifelse(ca_string == FALSE, clean_asset, location), +# location = ifelse(str_detect(clean_asset, pattern = "_United States") == TRUE, "United States", location), +# company = sub(".*_CA_", "", clean_asset), +# company = ifelse(str_detect(clean_asset, pattern = "_United States") == TRUE, sub("_United States*.", "", clean_asset), company), +# company = ifelse(company == location, NA, company)) %>% +# dplyr::select(original_asset_name = asset, location, company, economics_group, year, usd_nom) # ## add field names # fieldnames2 <- fieldnames %>% @@ -64,7 +67,7 @@ economics_df2 <- janitor::clean_names(economics_df) %>% -write_csv(economics_df2, paste0(rystad_path, "processed/ca_asset_opex_capex_govtt_clean.csv")) +#write_csv(economics_df2, paste0(rystad_path, "processed/ca_asset_opex_capex_govtt_clean.csv")) ## updated economics variables (only oil and condensate operations included) @@ -84,7 +87,7 @@ economics_up_df2 <- janitor::clean_names(economics_df_update) %>% company = sub(".*_CA_", "", clean_asset), company = ifelse(str_detect(clean_asset, pattern = "_United States") == TRUE, sub("_United States*.", "", clean_asset), company), company = ifelse(company == location, NA, company)) %>% - select(original_asset_name = asset, location, company, economics_group, year, usd_nom) + dplyr::select(original_asset_name = asset, location, company, economics_group, year, usd_nom) write_csv(economics_up_df2, paste0(rystad_path, "processed/oil_asset_opex_capex_govtt_clean.csv")) @@ -93,7 +96,7 @@ write_csv(economics_up_df2, paste0(rystad_path, "processed/oil_asset_opex_capex_ ##----------------------------------------- prod_df2 <- janitor::clean_names(production_df) %>% - select(-data_values) %>% + dplyr::select(-data_values) %>% rename(bbls = sum) %>% mutate(bbls = bbls * 1e6, string_end = str_detect(asset, pattern = ", US" %R% END), @@ -105,7 +108,7 @@ prod_df2 <- janitor::clean_names(production_df) %>% company = sub(".*_CA_", "", clean_asset), company = ifelse(str_detect(clean_asset, pattern = "_United States") == TRUE, sub("_United States*.", "", clean_asset), company), company = ifelse(company == location, NA, company)) %>% - select(original_asset_name = asset, location, company, data_source, data_type, oil_and_gas_category, year, bbls) + dplyr::select(original_asset_name = asset, location, company, data_source, data_type, oil_and_gas_category, year, bbls) write_csv(prod_df2, paste0(rystad_path, "processed/ca_oil_production.csv")) @@ -123,15 +126,15 @@ prod_df2 %>% ## econ categories ## ---------------------------- econ_cats2 <- econ_cats %>% - filter(!is.na(X1)) %>% - filter(X1 != "Economics Group") %>% - rename(econ_group = X1, - econ_cat = X2, + dplyr::filter(!is.na(...1)) %>% # revise X1 to ...1 + dplyr::filter(...1 != "Economics Group") %>% # revise X1 to ...1 - by Haejin + rename(econ_group = ...1, # revise X1 to ...1 - by Haejin + econ_cat = ...2, # revise X2 to ...2 original_asset_name = Year) %>% pivot_longer(`1970`:`2050`, names_to = "year", values_to = "million_usd") %>% mutate(year = as.numeric(year), usd = as.numeric(million_usd) * 1e6) %>% - select(-million_usd) + dplyr::select(-million_usd) write_csv(econ_cats2, paste0(rystad_path, "processed/asset_economics_cats.csv")) @@ -157,9 +160,9 @@ fwrite(err_df2_wide, paste0(rystad_path, "processed/economically_recoverable_res ## ------------------------------------ capex_recov_bbl2 <- rystad_capex_recov_bbl %>% - filter(!is.na(X1)) %>% - filter(X1 != "Asset") %>% - rename(original_asset_name = X1, + dplyr::filter(!is.na(...1)) %>% # revise X1 to ...1 and add dplyr - by Haejin + dplyr::filter(...1 != "Asset") %>% # revise X1 to ...1 - by Haejin + rename(original_asset_name = ...1, # revise X1 to ...1 - by Haejin economics_group = Year) %>% pivot_longer(`1970`:`2050`, names_to = "year", values_to = "usd_per_bbl") %>% mutate(year = as.numeric(year)) %>% @@ -183,7 +186,7 @@ api_asset2 <- api_asset %>% ## how many have more than one asset? n_asset <- api_asset2 %>% - select(APINumber, asset_name) %>% + dplyr::select(APINumber, asset_name) %>% group_by(APINumber) %>% mutate(n = n()) %>% ungroup() @@ -196,7 +199,7 @@ diff_df <- api_asset2 %>% ## clean asset names api_asset3 <- api_asset2 %>% left_join(asset_rename) %>% - select(-asset_name) + dplyr::select(-asset_name) # write_csv(api_asset3, paste0(rystad_path, "processed/rystad_asset_apis.csv")) @@ -212,7 +215,7 @@ api_asset4 <- api_asset3 %>% api_adj = ifelse(api_n < 12, paste0(api_adj, "00000"), APINumber), api_adj2 = ifelse(nchar(api_adj) > 12 & state == "04", str_sub(api_adj, 1, 12), api_adj)) %>% rename(orig_api = APINumber) %>% - select(APINumber = api_adj2, original_asset_name) %>% + dplyr::select(APINumber = api_adj2, original_asset_name) %>% mutate(api_ten_digit = str_sub(APINumber, 1, 10)) ## unique api_ten_digit - field combos @@ -264,7 +267,7 @@ field_n_asset <- api_asset_match_rev %>% mutate(rel_field = n_wells_asset / n_wells_field, rel_prod = bbl_prod / field_prod) -anti_join(api_asset4 %>% select(original_asset_name) %>% unique(), field_n_asset %>% select(original_asset_name) %>% unique()) +anti_join(api_asset4 %>% dplyr::select(original_asset_name) %>% unique(), field_n_asset %>% dplyr::select(original_asset_name) %>% unique()) write_csv(field_n_asset, paste0(rystad_path, "processed/field_rystad_match_apis_revised.csv")) @@ -274,15 +277,15 @@ rystad_capex_bbl_nom2 <- rystad_capex_bbl_nom %>% pivot_longer(`1900`:`2099`, names_to = "year", values_to = "capex_per_bbl_nom") %>% mutate(year = as.numeric(year), capex_per_bbl_nom = as.numeric(capex_per_bbl_nom)) %>% - select(-`Economics Group`) + dplyr::select(-`Economics Group`) write_csv(rystad_capex_bbl_nom2, paste0(rystad_path, "processed/rystad_capex_bbl_nom_clean.csv")) ## opex per bbl nominal rystad_opex_bbl_nom2 <- rystad_opex_bbl_nom[3:nrow(rystad_opex_bbl_nom),] %>% - select(-Year) %>% - rename(original_asset_name = X1) %>% + dplyr::select(-Year) %>% + rename(original_asset_name = ...1) %>% # revise X1 to ...1 - by Haejin pivot_longer(`1970`:`2050`, names_to = "year", values_to = "opex_per_bbl_nom") %>% mutate(year = as.numeric(year), opex_per_bbl_nom = as.numeric(opex_per_bbl_nom)) @@ -300,7 +303,7 @@ well_cost_eur2 <- well_cost_eur %>% mutate(APInumber = as.character(str_remove_all(APInumber, pattern = "-"))) %>% mutate(both_na = ifelse(is.na(X) & is.na(well_cost_eurusd_per_bbl), 1, 0)) %>% filter(both_na != 1) %>% - select(-X, -both_na) + dplyr::select(-X, -both_na) write_csv(well_cost_eur2, paste0(rystad_path, "processed/well_cost_per_eur_clean.csv")) @@ -312,7 +315,7 @@ write_csv(well_cost_eur2, paste0(rystad_path, "processed/well_cost_per_eur_clean field_asset2 <- field_asset %>% rename(days_prod = `Days on Production (Days)`) %>% filter(!is.na(Asset)) %>% - select(-days_prod) %>% + dplyr::select(-days_prod) %>% unique() write_csv(field_asset2, paste0(rystad_path, "processed/rystad_field_asset.csv")) diff --git a/energy/data-processing-prep/extraction/zero_prod.R b/energy/data-processing-prep/extraction/zero_prod.R index 0b13b61e..7e5fb2d8 100644 --- a/energy/data-processing-prep/extraction/zero_prod.R +++ b/energy/data-processing-prep/extraction/zero_prod.R @@ -1,6 +1,7 @@ ## Tracey Mangin ## April 22, 2021 ## zero production investigation +# revised: Feb 14, 2024 - Haejin library(tidyverse) library(data.table) @@ -9,15 +10,15 @@ library(zoo) library(readxl) library(openxlsx) -## set directory -proj_dir <- "/Volumes/GoogleDrive/Shared\ drives/emlab/projects/current-projects/calepa-cn/" -raw_dir <- "/Volumes/GoogleDrive/Shared\ drives/emlab/projects/current-projects/calepa-cn/data/stocks-flows/raw/" -data_directory <- "/Volumes/GoogleDrive/Shared\ drives/emlab/projects/current-projects/calepa-cn/data/stocks-flows/processed/" -output_dir <- "outputs/exit/" +## set directory +proj_dir <- "/capstone/freshcair/meds-freshcair-capstone/data/" # revised file directory -Haejin +raw_dir <- "/capstone/freshcair/meds-freshcair-capstone/data/inputs/" # revised file directory -Haejin +data_directory <- "/capstone/freshcair/meds-freshcair-capstone/data/processed/" # revised file directory -Haejin +output_dir <- "proprietery-data/" ## files prod_file <- "well_prod_m_processed.csv" -well_file <- "AllWells_table/AllWells_20210427.csv" +well_file <- "extraction/AllWells_20210427.csv" # revised file directory -Haejin ## read in files well_prod <- fread(paste0(data_directory, prod_file), colClasses = c('api_ten_digit' = 'character', @@ -32,7 +33,7 @@ all_wells <- fread(paste0(raw_dir, well_file)) ## wells status status <- all_wells %>% mutate(api_ten_digit = paste0("0", API)) %>% - select(api_ten_digit, well_status = WellStatus) + dplyr::select(api_ten_digit, well_status = WellStatus) #revise dplyr - haejin ## find wells that produce at some point over time period pos_well_api_prod <- well_prod %>% @@ -40,7 +41,7 @@ pos_well_api_prod <- well_prod %>% summarise(oil_total = sum(OilorCondensateProduced, na.rm = T)) %>% ungroup() %>% mutate(pos_pro = ifelse(oil_total > 0, 1, 0)) %>% - filter(pos_pro == 1) + dplyr::filter(pos_pro == 1) #revise dplyr - haejin pos_api_vec <- pos_well_api_prod$api_ten_digit @@ -51,7 +52,7 @@ pos_api_field_prod <- well_prod %>% summarise(oil_total = sum(OilorCondensateProduced, na.rm = T)) %>% ungroup() %>% mutate(pos_pro = ifelse(oil_total > 0, 1, 0)) %>% - filter(pos_pro == 1) + dplyr::filter(pos_pro == 1) #revise dplyr - haejin pos_api_field_vec <- pos_api_field_prod$api_field_code @@ -213,7 +214,7 @@ filt_zero_prod <- function(n_month_val) { ## make data table out_df <- tmp_zero_prod %>% - select(api_ten_digit, zero_prod_months, well_status) %>% + dplyr::select(api_ten_digit, zero_prod_months, well_status) %>% # add dplyr - haejin mutate(year_cut_off = n_month_val / 12) } diff --git a/energy/data-processing-prep/social_cost_carbon.R b/energy/data-processing-prep/social_cost_carbon.R index fbd1fe46..04ad42e7 100644 --- a/energy/data-processing-prep/social_cost_carbon.R +++ b/energy/data-processing-prep/social_cost_carbon.R @@ -2,10 +2,12 @@ ## November 16, 2021 ## create social cost of carbon df +## revised: feb 16 2024 by Haejin + ## libraries library(tidyverse) library(data.table) -library(blscrapeR) +#library(blscrapeR) # library(tabulizer) library(zoo) library(openxlsx) @@ -13,13 +15,13 @@ library(readxl) ## path -main_path <- '/Volumes/GoogleDrive/Shared drives/emlab/projects/current-projects/calepa-cn/' +main_path <- '/capstone/freshcair/meds-freshcair-capstone/' # revised file path ## CPI data carbon_px_file <- 'carbon_price_scenarios_revised.xlsx' ## read in carbon file -cpi_df <- setDT(read.xlsx(paste0(main_path, 'data/stocks-flows/processed/', carbon_px_file), sheet = 'BLS Data Series', startRow = 12)) +cpi_df <- setDT(read.xlsx(paste0(main_path, 'data/inputs/', carbon_px_file), sheet = 'BLS Data Series', startRow = 12)) cpi_df <- cpi_df[Year %in% c(2019, 2020), .(Year, Annual)] @@ -66,5 +68,5 @@ scc_df[, social_cost_co2_19 := social_cost_co2 / cpi2020 * cpi2019] scc_df[, scc_ref := 'https://www.whitehouse.gov/wp-content/uploads/2021/02/TechnicalSupportDocument_SocialCostofCarbonMethaneNitrousOxide.pdf'] -fwrite(scc_df, file.path(main_path, 'data/stocks-flows/processed/social_cost_carbon.csv'), row.names = F) +fwrite(scc_df, file.path(main_path, 'data/processed/social_cost_carbon.csv'), row.names = F) diff --git a/energy/data-processing-prep/stocks_flows.R b/energy/data-processing-prep/stocks_flows.R index 9845e7a9..abb0f811 100644 --- a/energy/data-processing-prep/stocks_flows.R +++ b/energy/data-processing-prep/stocks_flows.R @@ -4,8 +4,8 @@ ## set directory -data_directory <- "/Volumes/GoogleDrive/Shared\ drives/emlab/projects/current-projects/calepa-cn/data/stocks-flows/" -save_directory <- "/Volumes/GoogleDrive/Shared\ drives/emlab/projects/current-projects/calepa-cn/project-materials/focus-areas-1-2/" +data_directory <- "/capstone/freshcair/meds-freshcair-capstone/data/inputs/" +save_directory <- "//capstone/freshcair/meds-freshcair-capstone/data/processed/" ## attach libraries @@ -15,8 +15,8 @@ library(rebus) library(readxl) library(countrycode) library(rJava) -library(tabulizer) -library(tabulizerjars) +# library(tabulizer) +# library(tabulizerjars) library(lubridate) library(scales) library(openxlsx) @@ -26,11 +26,11 @@ library(openxlsx) ## --------------------------------------------------------------------------------------- ## read in data -port_imports <- read_csv(paste0(data_directory, "raw/Imports_of_Heavy_Sour_to_Los_Angeles_CA.csv"), skip = 4) ## first four rows mess up data +port_imports <- read_csv(paste0(data_directory, "inputs/Imports_of_Heavy_Sour_to_Los_Angeles_CA.csv"), skip = 4) ## first four rows mess up data port_imports <- clean_names(port_imports) ## get info from raw data -port_imports_info <- read_csv(paste0(data_directory, "raw/Imports_of_Heavy_Sour_to_Los_Angeles_CA.csv")) +port_imports_info <- read_csv(paste0(data_directory, "inputs/Imports_of_Heavy_Sour_to_Los_Angeles_CA.csv")) port_imports_info <- port_imports_info[1:3, 1] colnames(port_imports_info) <- c("info") diff --git a/energy/extraction-segment/compile-outputs/compile_extraction_outputs_full.R b/energy/extraction-segment/compile-outputs/compile_extraction_outputs_full.R index c979401a..5c941d86 100644 --- a/energy/extraction-segment/compile-outputs/compile_extraction_outputs_full.R +++ b/energy/extraction-segment/compile-outputs/compile_extraction_outputs_full.R @@ -20,17 +20,17 @@ save_external <- 0 cur_date = Sys.Date() ## paths -main_path <- '/Volumes/GoogleDrive/Shared drives/emlab/projects/current-projects/calepa-cn/' -sp_data_path <- paste0(main_path, "data/GIS/raw/") +main_path <- '/capstone/freshcair/meds-freshcair-capstone/' +sp_data_path <- paste0(main_path, "data/input/gis/") ## UPDATE THESE WITH NEW RUNS!!!!! -extraction_folder_path <- 'outputs/predict-production/extraction_2022-11-15/' +extraction_folder_path <- 'outputs/processed' extraction_folder_name <- 'revision-setbacks/' -data_path <-'data/stocks-flows/processed/' +data_path <-'data/processed/' ## health code paths -source_path <- paste0(main_path, 'data/health/source_receptor_matrix/') -inmap_ex_path <- paste0(main_path, "data/health/source_receptor_matrix/inmap_processed_srm/extraction") +source_path <- paste0(main_path, 'data/inputs/health/source_receptor_matrix/') +inmap_ex_path <- paste0(main_path, "data/inputs/health/source_receptor_matrix/inmap_processed_srm/extraction") ## external paths main_path_external <- '/Volumes/calepa/' @@ -91,7 +91,7 @@ dir.create(health_county_save_path, showWarnings = FALSE) ## -------------------------------- ## DAC and CES -dac_ces <- read_xlsx(paste0(main_path, 'data/health/raw/ces3results.xlsx')) +dac_ces <- read_xlsx(paste0(main_path, 'data/inputs/health/ces3results.xlsx')) ces_county <- dac_ces %>% select(`Census Tract`, `California County`) %>% @@ -100,24 +100,24 @@ ces_county <- dac_ces %>% mutate(census_tract = paste0("0", census_tract, sep="")) ## income -- cencus tract -med_house_income <- fread(paste0(main_path, "data/Census/ca-median-house-income.csv"), stringsAsFactors = F) +med_house_income <- fread(paste0(main_path, "data/inputs/gis/census-tract/ca-median-house-income.csv"), stringsAsFactors = F) # not exist ------- med_house_income[, census_tract := paste0("0", GEOID)] med_house_income <- med_house_income[, .(census_tract, estimate)] setnames(med_house_income, "estimate", "median_hh_income") ## income -- county -county_income <- fread(paste0(main_path, "data/Census/ca-median-house-income-county.csv"), stringsAsFactors = F) +county_income <- fread(paste0(main_path, "data/input/gis/census-tract/ca-median-house-income-county.csv"), stringsAsFactors = F) # not exist ----- county_income <- county_income[, .(county, estimate)] setnames(county_income, "estimate", "median_hh_income") ## monthly well production -well_prod <- fread(paste0(main_path, "/data/stocks-flows/processed/", prod_file), colClasses = c('api_ten_digit' = 'character', +well_prod <- fread(paste0(main_path, "data/processed/", prod_file), colClasses = c('api_ten_digit' = 'character', 'doc_field_code' = 'character')) ## historical GHG emissions, 2019 ## -------------------------- -hist_ghg <- fread(paste0(main_path, 'data/stocks-flows/processed/', ghg_hist_file), header = T) +hist_ghg <- fread(paste0(main_path, 'data/processed/', ghg_hist_file), header = T) hist_ghg <- hist_ghg[segment %chin% c('Oil & Gas: Production & Processing') & year == 2019, .(segment, unit, year, value)] @@ -127,7 +127,7 @@ ghg_2019 <- as.numeric(hist_ghg[, value][1]) ## ghg factors -ghg_factors = fread(file.path(main_path, 'outputs/stocks-flows', ghg_file), header = T, colClasses = c('doc_field_code' = 'character')) +ghg_factors = fread(file.path(main_path, 'proprietery-data/stocks-flows', ghg_file), header = T, colClasses = c('doc_field_code' = 'character')) ghg_factors_2019 = ghg_factors[year == 2019, c('doc_field_code', 'year', 'upstream_kgCO2e_bbl')] ## oil prices diff --git a/energy/extraction-segment/model-prep/create_entry_econ_variables.R b/energy/extraction-segment/model-prep/create_entry_econ_variables.R index f659cd15..a64f0cd9 100644 --- a/energy/extraction-segment/model-prep/create_entry_econ_variables.R +++ b/energy/extraction-segment/model-prep/create_entry_econ_variables.R @@ -1,14 +1,15 @@ ## Tracey Mangin ## August 30, 2020 ## create +# revise Feb 14, 2024 - Haejin library(tidyverse) ## set directory -data_directory <- "/Volumes/GoogleDrive/Shared\ drives/emlab/projects/current-projects/calepa-cn/data/stocks-flows/processed/" -rystad_path <- "/Volumes/GoogleDrive/Shared\ drives/emlab/projects/current-projects/calepa-cn/data/Rystad/data/" -save_directory <- "/Volumes/GoogleDrive/Shared\ drives/emlab/projects/current-projects/calepa-cn/outputs/" +data_directory <- "/capstone/freshcair/meds-freshcair-capstone/data/processed/" +rystad_path <- "/capstone/freshcair/meds-freshcair-capstone/data/" +save_directory <- "/capstone/freshcair/meds-freshcair-capstone/data/outputs/" ## read in the data rystad_econ <- read_csv(paste0(rystad_path, "processed/oil_asset_opex_capex_govtt_clean.csv")) @@ -51,17 +52,17 @@ rystad_econ_adj <- rystad_econ %>% ifelse(location == "Venice Beach", "Venice Beach (ABD)", ifelse(location == "Ventura (Yuma Energy acquisition)", "Ventura", ifelse(location == "West Montalvo Offshore", "Montalvo West", location)))))))))))))))))) %>% - filter(economics_group %in% c("Capex", "Opex")) %>% - select(original_asset_name, adj_location, year, economics_group, usd_nom) %>% - pivot_wider(names_from = economics_group, values_from = usd_nom) %>% - rename(FieldName = adj_location, capex = Capex, opex = Opex) %>% - filter(year <= 2019) + dplyr::filter(economics_group %in% c("Capex", "Opex")) %>% # add dplyr - haejin + dplyr::select(original_asset_name, adj_location, year, economics_group, usd_nom) %>% # add dplyr - haejin + pivot_wider(names_from = economics_group, values_from = usd_nom) %>% + rename(FieldName = adj_location, capex = Capex, opex = Opex) %>% + dplyr::filter(year <= 2019) # add dplyr - haejin ## prep capex per bbl reserves rystad_capex_bbl2 <- rystad_capex_bbl %>% - select(original_asset_name, year, capex_per_bbl_reserves = usd_per_bbl) + dplyr::select(original_asset_name, year, capex_per_bbl_reserves = usd_per_bbl) # add dplyr - haejin ## join with production, calculate capex and opex per econ_per_bbl_df <- left_join(rystad_econ_adj, rystad_prod_adj) %>% @@ -70,14 +71,14 @@ econ_per_bbl_df <- left_join(rystad_econ_adj, rystad_prod_adj) %>% left_join(rystad_capex_bbl2) %>% left_join(rystad_capex_bbl_nom_df) %>% left_join(rystad_opex_bbl_nom_df) %>% - select(original_asset_name, FieldName, year, rystad_prod_bbl = total_prod_bbls, capex, capex_bbl_rp, capex_per_bbl_reserves, capex_per_bbl_nom, opex, opex_bbl_rp, opex_per_bbl_nom) + dplyr::select(original_asset_name, FieldName, year, rystad_prod_bbl = total_prod_bbls, capex, capex_bbl_rp, capex_per_bbl_reserves, capex_per_bbl_nom, opex, opex_bbl_rp, opex_per_bbl_nom) ## add sum my prod, two versions of depletion, max resource ## prep meas's df ratio_df2 <- ratio_df %>% - select(asset, year, cumsum_div_my_prod, cumsum_div_max_resources) %>% - filter(year <= 2019) %>% + dplyr::select(asset, year, cumsum_div_my_prod, cumsum_div_max_resources) %>% # add dplyr - haejin + dplyr::filter(year <= 2019) %>% # add dplyr - haejin rename(original_asset_name = asset) @@ -86,15 +87,15 @@ econ_per_bbl_df2 <- econ_per_bbl_df %>% rename(asset = original_asset_name) %>% left_join(asset_sum_my_production) %>% mutate(sum_err_my_production_bbl = sum_err_my_production * 1e6) %>% - select(-units) %>% + dplyr::select(-units) %>% # add dplyr - haejin left_join(asset_max_resources) %>% mutate(max_err_resources_bbl = max_err_resources * 1e6) %>% - select(-units) %>% + dplyr::select(-units) %>% left_join(asset_yr_cumsum_production) %>% mutate(cumsum_err_production_bbl = cumsum_err_production * 1e6) %>% - select(-production, - units) %>% + dplyr::select(-production, - units) %>% # add dplyr - haejin rename(original_asset_name = asset) %>% left_join(ratio_df2) # ## save to use later -write_csv(econ_per_bbl_df2, path = "/Volumes/GoogleDrive/Shared\ drives/emlab/projects/current-projects/calepa-cn/outputs/stocks-flows/rystad_entry_variables.csv") +write_csv(econ_per_bbl_df2, path = "/capstone/freshcair/meds-freshcair-capstone/data/proprietery-data/rystad_entry_variables.csv") diff --git a/energy/extraction-segment/model-prep/economically_recoverable_resources.R b/energy/extraction-segment/model-prep/economically_recoverable_resources.R index 8537acf8..331bd49f 100644 --- a/energy/extraction-segment/model-prep/economically_recoverable_resources.R +++ b/energy/extraction-segment/model-prep/economically_recoverable_resources.R @@ -2,14 +2,16 @@ ## august 8, 2020 ## script for analyzing economically recoverable resources scenarios +# revise: Feb 14, 2024 - Haejin + # load libraries -------- library(data.table) # inputs and file paths ----- - rystad_path = '/Volumes/GoogleDrive/Shared\ drives/emlab/projects/current-projects/calepa-cn/data/Rystad/data/' - err_file = 'processed/economically_recoverable_resources_scenarios_wide.csv' + rystad_path = '/capstone/freshcair/meds-freshcair-capstone/data/' + err_file = '/processed/economically_recoverable_resources_scenarios_wide.csv' #--missing, need to run other file to generate this ------ # read in data ------ diff --git a/energy/extraction-segment/model-prep/gen_well_setback_status.R b/energy/extraction-segment/model-prep/gen_well_setback_status.R index 98aa2467..c08aea36 100644 --- a/energy/extraction-segment/model-prep/gen_well_setback_status.R +++ b/energy/extraction-segment/model-prep/gen_well_setback_status.R @@ -5,14 +5,15 @@ # written: 4/9/2021 | modified: 4/12/2021 # modified by Tracey Mangin ################################################################## +# revise : Feb 14, 2024 by Haejin # comment out and add your own machine's file path -home <- "/Volumes/GoogleDrive/Shared drives" -buffer_path <- "emlab/projects/current-projects/calepa-cn/data/GIS/processed/fracktracker-sr" -data_directory <- "/Volumes/GoogleDrive/Shared\ drives/emlab/projects/current-projects/calepa-cn/data/stocks-flows/processed/" +home <- "/capstone/freshcair/meds-freshcair-capstone" +buffer_path <- "data/processed" +data_directory <- "/capstone/freshcair/meds-freshcair-capstone/inputs/extraction" ## files -prod_file <- "well_prod_m_processed.csv" +prod_file <- "well_prod_m_processed.csv" # load packages library(sf) @@ -35,14 +36,14 @@ ca <- st_as_sf(map("state", plot = FALSE, fill = TRUE)) %>% ################################# READ DATA AND TRANSFORM -buff1000 <- sf::st_read(file.path(home, buffer_path, "buffer_1000ft.shp")) +buff1000 <- sf::st_read(file.path(home, buffer_path, "buffer_1000ft.shp")) # no file here -buff2500 <- sf::st_read(file.path(home, buffer_path, "buffer_2500ft.shp")) +buff2500 <- sf::st_read(file.path(home, buffer_path, "buffer_2500ft.shp")) # no file here -buff5280 <- sf::st_read(file.path(home, buffer_path, "buffer_5280ft.shp")) +buff5280 <- sf::st_read(file.path(home, buffer_path, "buffer_5280ft.shp")) # no file here # transform to NAD83(NSRS2007) / California Albers as well for wells and field boundaries -wells <- sf::st_read(file.path(home, "emlab/projects/current-projects/calepa-cn/data/GIS/raw/allwells_gis/Wells_All.shp")) %>% +wells <- sf::st_read(file.path(home, "emlab/projects/current-projects/calepa-cn/data/GIS/raw/allwells_gis/Wells_All.shp")) %>% # ---- missing file -------- st_transform(ca_crs) %>% dplyr::select(API, WellStatus) %>% unique() @@ -52,7 +53,7 @@ wells2 <- sf::st_read(file.path(home, "emlab/projects/current-projects/calepa-cn dplyr::select(API, WellStatus, FieldName) %>% unique() -boundaries <- st_read(file.path(home, "emlab/projects/current-projects/calepa-cn/data/GIS/raw/field-boundaries/DOGGR_Admin_Boundaries_Master.shp")) %>% st_transform(3488) +boundaries <- st_read(file.path(home, "/data/gis/field-boundaries/DOGGR_Admin_Boundaries_Master.shp")) %>% st_transform(3488) # update ## monthly well production well_prod <- fread(paste0(data_directory, prod_file), colClasses = c('api_ten_digit' = 'character', @@ -221,7 +222,7 @@ ggplot(data = buff1000) + # summarize(n_in = sum(in_setback_orig)) # save output -write_csv(wells_within_df_all, file.path(home, "emlab/projects/current-projects/calepa-cn/outputs/setback/model-inputs/wells_in_setbacks_revised.csv")) +write_csv(wells_within_df_all, file.path(home, "emlab/projects/current-projects/calepa-cn/outputs/setback/model-inputs/wells_in_setbacks_revised.csv")) # missing ------- ## make maps @@ -331,7 +332,7 @@ View(field_boundaries2 %>% ungroup()) ## add number of wells to each field -n_wells <- sf::st_read(file.path(home, "emlab/projects/current-projects/calepa-cn/data/GIS/raw/allwells_gis/Wells_All.shp")) %>% +n_wells <- sf::st_read(file.path(home, "emlab/projects/current-projects/calepa-cn/data/GIS/raw/allwells_gis/Wells_All.shp")) %>% # missing one st_drop_geometry() %>% filter(!WellStatus %in% c("Abeyance")) %>% group_by(FieldName) %>% @@ -358,7 +359,7 @@ field_boundaries3 <- field_boundaries2 %>% # save output -write_csv(field_boundaries3, file.path(home, "emlab/projects/current-projects/calepa-cn/outputs/setback/model-inputs/setback_coverage_R.csv")) +write_csv(field_boundaries3, file.path(home, "/data/processed/setback_coverage_R.csv")) ## save maps for examining @@ -374,7 +375,7 @@ coverage_map <- mapview(wells2, layer.name = "Wells", label = 'WellStatus', cex = 0.3, alpha = 0, legend = FALSE) # save output -mapshot(coverage_map, url = paste0(home, "/emlab/projects/current-projects/calepa-cn/outputs/setback/review/coverage_map.html"), selfcontained = F) +mapshot(coverage_map, url = paste0(home, "data/processed/coverage_map.html"), selfcontained = F) diff --git a/energy/extraction-segment/model-prep/match_fields_assets.R b/energy/extraction-segment/model-prep/match_fields_assets.R index e74385b4..433a2634 100644 --- a/energy/extraction-segment/model-prep/match_fields_assets.R +++ b/energy/extraction-segment/model-prep/match_fields_assets.R @@ -2,14 +2,18 @@ ## May 11, 2021 ## Match fields to assets +## revised: feb 16 2024 by haejin + # ------------------------------------------- INPUTS ----------------------------------- -data_directory <- "/Volumes/GoogleDrive/Shared\ drives/emlab/projects/current-projects/calepa-cn/data/stocks-flows/processed/" -rystad_path <- "/Volumes/GoogleDrive/Shared\ drives/emlab/projects/current-projects/calepa-cn/data/Rystad/data/" -sp_dir <- "/Volumes/GoogleDrive/Shared\ drives/emlab/projects/current-projects/calepa-cn/data/GIS/raw/field-boundaries/" -save_directory <- "/Volumes/GoogleDrive/Shared\ drives/emlab/projects/current-projects/calepa-cn/outputs/" -proj_dir <- "/Volumes/GoogleDrive/Shared\ drives/emlab/projects/current-projects/calepa-cn/" -output_dir <- "outputs/stocks-flows/" -match_out_path <- "stocks-flows/entry-model-input/final/" +data_directory <- "/capstone/freshcair/meds-freshcair-capstone/data/processed/" +rystad_path <- "/capstone/freshcair/meds-freshcair-capstone/data/processed/" +sp_dir <- "/capstone/freshcair/meds-freshcair-capstone/data/inputs/gis/" +save_directory <- "/capstone/freshcair/meds-freshcair-capstone/data/proprietery-data/" +proj_dir <- "/capstone/freshcair/meds-freshcair-capstone/" +output_dir <- "proprietery-data" +match_out_path <- "proprietery-data" + + ## files rystad_file <- "field_rystad_match_apis_revised.csv" @@ -27,7 +31,7 @@ library(data.table) library(mapview) library(sf) library(rgeos) #nearest poly to each point -library(nngeo) #nearest point to each poly +#library(nngeo) #nearest point to each poly ## step 0: fields matched to assets through wells @@ -39,7 +43,7 @@ well_prod <- fread(paste0(data_directory, prod_file), colClasses = c('api_ten_di ## asset to field match using well APIs -field_asset_match <- fread(paste0(rystad_path, "processed/", rystad_file), colClasses = c('doc_field_code' = 'character')) +field_asset_match <- fread(paste0(rystad_path, rystad_file), colClasses = c('doc_field_code' = 'character')) field_asset_match[, c("doc_fieldname", "bbl_prod", "n_wells_field", "field_prod", "rel_field", "rel_prod") := NULL] ## compute productive fields @@ -48,20 +52,20 @@ productive_fields <- productive_fields[total_prod > 0] ## field to asset match by well apis well_match_df <- productive_fields %>% - select(doc_field_code) %>% + dplyr::select(doc_field_code) %>% left_join(field_asset_match) fieldcodes <- well_prod %>% - select(doc_field_code, doc_fieldname) %>% - unique() %>% - filter(doc_field_code %in% productive_fields$doc_field_code) + dplyr::select(doc_field_code, doc_fieldname) %>% + raster::unique() %>% + dplyr::filter(doc_field_code %in% productive_fields$doc_field_code) ## fields that get matched with assets field_asset_well_match <- well_match_df %>% - select(doc_field_code, original_asset_name) %>% - unique() %>% - filter(!is.na(original_asset_name)) + dpylr::select(doc_field_code, original_asset_name) %>% + raster::unique() %>% + dplyr::filter(!is.na(original_asset_name)) ## save file # write_csv(field_asset_well_match, path = "/Volumes/GoogleDrive/Shared\ drives/emlab/projects/current-projects/calepa-cn/outputs/stocks-flows/entry-model-input/well_doc_asset_match.csv") diff --git a/energy/extraction-segment/model-prep/well_setback_sp_prep.R b/energy/extraction-segment/model-prep/well_setback_sp_prep.R index 27c07aaf..ab3ccea3 100644 --- a/energy/extraction-segment/model-prep/well_setback_sp_prep.R +++ b/energy/extraction-segment/model-prep/well_setback_sp_prep.R @@ -1,10 +1,11 @@ ## Tracey Mangin ## May 7, 2021 ## prep FrackTracker data for analysis +##revised : Feb 14, 2024 by Haejin # comment out and add your own machine's file path -home <- "/Volumes/GoogleDrive/Shared drives" -ft_path <- "emlab/projects/current-projects/calepa-cn/data/FracTracker/FracTrackerSetbackgdb-newest/FracTrackerSetbackgdb/FracTrackerSetbackdata.gdb" +home <- "/capstone/freshcair/meds-freshcair-capstone" +ft_path <- "/data/inputs/FracTracker/FracTrackerSetbackgdb-newest/FracTrackerSetbackgdb/FracTrackerSetbackdata.gdb" #--- missing file ---- save_path <- paste0(home, "/emlab/projects/current-projects/calepa-cn/data/GIS/processed/fracktracker-sr/") # load packages @@ -27,7 +28,7 @@ ca <- st_as_sf(map("state", plot = FALSE, fill = TRUE)) %>% ################################# READ DATA AND TRANSFORM # to get the names of layers in the shapefile -layers <- sf::st_layers(dsn = file.path(home, "emlab/projects/current-projects/calepa-cn/data/FracTracker/FracTrackerSetbackgdb-newest/FracTrackerSetbackgdb/FracTrackerSetbackdata.gdb")) +layers <- sf::st_layers(dsn = file.path(home, "emlab/projects/current-projects/calepa-cn/data/FracTracker/FracTrackerSetbackgdb-newest/FracTrackerSetbackgdb/FracTrackerSetbackdata.gdb")) #### ----- missing ## read in the SR layers layer_vec <- c("SetbackOutlines_SR_Dwellings_082220", "PlaygroundsinCities", "DayCareCenters", "reselderlyCare", diff --git a/health/scripts/figures_map_totalpm25.R b/health/scripts/figures_map_totalpm25.R index 3e3c4ff0..28e2e133 100644 --- a/health/scripts/figures_map_totalpm25.R +++ b/health/scripts/figures_map_totalpm25.R @@ -1,6 +1,7 @@ #Danae Hernandez-Cortes hernandezcortes@ucsb.edu #vthiviergge@ucsb.edu #last change: 10/08/2021 +# modified : 02/13/2024 - Haejin #WEIGHTED POLLUTION EXPOSURE #Libraries @@ -20,7 +21,7 @@ library(RColorBrewer) #EXTRACTION rm(list=ls()) -sourceFiles <- "./calepa-cn/data/" +sourceFiles <- "./data/inputs" ######################VINCENT: PLEASE ADD THE MODIFIED CODE THAT OBTAINS EXTRACTION @@ -40,14 +41,14 @@ extraction_BAU_2019<-extraction_BAU%>%dplyr::filter(year==2019) ###################POPULATION########################## #0. Bring disadvantaged communities data from CES -ces_data <- read_csv(paste0(sourceFiles,"health/raw/ces3results_part.csv",sep=""), stringsAsFactors = FALSE) %>% +ces_data <- read_csv(paste0(sourceFiles,"health/ces3results_part.csv",sep=""), stringsAsFactors = FALSE) %>% dplyr::select("census_tract","total_population") -CA<-st_read(paste0(sourceFiles,"GIS/raw/state/california2016.shp",sep="")) +#CA<-st_read(paste0(sourceFiles,"GIS/raw/state/california2016.shp",sep="")) # missing data ------ -CA_counties<-st_read(paste0(sourceFiles,"GIS/raw/CA_Counties/CA_Counties_TIGER2016.shp",sep="")) +CA_counties<-st_read(paste0(sourceFiles,"gis/CA_Counties/CA_Counties_TIGER2016.shp",sep="")) -CA_ct<-st_read(paste0(sourceFiles,"GIS/raw/census-tract/tl_2019_06_tract.shp",sep="")) +CA_ct<-st_read(paste0(sourceFiles,"gis/census-tract/tl_2019_06_tract.shp",sep="")) #Merge refining diff --git a/health/scripts/srm_extraction_population.R b/health/scripts/srm_extraction_population.R index f9fcf668..c7ee4b33 100644 --- a/health/scripts/srm_extraction_population.R +++ b/health/scripts/srm_extraction_population.R @@ -1,5 +1,8 @@ #Danae Hernandez-Cortes hernandezcortes@ucsb.edu #INFRASTRUCTURE TO SEND TO THE MODELING TEAM + +# Updated 2/14/2024 by MG + #Libraries library(sf) library(tidyverse) @@ -18,6 +21,10 @@ library(dplyr) rm(list=ls()) +# setting working directory +setwd('/capstone/freshcair/meds-freshcair-capstone') + + # (0) Load CES3.0 ces3<-read_csv(paste0(mainFiles,"/ces3results_part.csv", sep="")) ces3$GEOID=paste("0",as.character(ces3$census_tract),sep="") diff --git a/pred-model/eda.R b/pred-model/eda.R new file mode 100644 index 00000000..42dde23a --- /dev/null +++ b/pred-model/eda.R @@ -0,0 +1,16 @@ +str(well_prod_m_processed) + +num_wells <- length(unique(well_prod_m_processed$api_ten_digit)) +paste0("Numer of unique wells: ", num_wells) + +num_counties <- length(unique(well_prod_m_processed$county)) +paste0("Numer of counties: ", num_counties) + +num_fieldcodes <- length(unique(well_prod_m_processed$doc_field_code)) +paste0("Numer of unique field codes: ", num_fieldcodes) + +well_productions <- unique(well_prod_m_processed$well_type_name) +paste0(well_productions) + +producing_wells <- well_prod_m_processed %>% + filter(BTUofGasProduced > 0) From 7ef9f5c1c82e51683745b1791eadaf453ca7c86b Mon Sep 17 00:00:00 2001 From: Maxwell Patterson Date: Sat, 17 Feb 2024 09:33:53 +0000 Subject: [PATCH 16/19] eda and some plots --- pred-model/eda.R | 161 ++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 158 insertions(+), 3 deletions(-) diff --git a/pred-model/eda.R b/pred-model/eda.R index 42dde23a..08df4d75 100644 --- a/pred-model/eda.R +++ b/pred-model/eda.R @@ -1,16 +1,171 @@ +# Load necessary libraries +library(dplyr) +library(tidyverse) +library(lubridate) +library(zoo) + +# Read in well processed data +well_prod_m_processed <- read.csv("data/processed/well_prod_m_processed.csv") + + + +# Inspect the structure of the well_prod_m_processed dataset str(well_prod_m_processed) +# Calculate and print the number of unique wells num_wells <- length(unique(well_prod_m_processed$api_ten_digit)) -paste0("Numer of unique wells: ", num_wells) +paste0("Number of unique wells: ", num_wells) +# Calculate and print the number of counties num_counties <- length(unique(well_prod_m_processed$county)) -paste0("Numer of counties: ", num_counties) +paste0("Number of counties: ", num_counties) +# Calculate and print the number of unique field codes num_fieldcodes <- length(unique(well_prod_m_processed$doc_field_code)) -paste0("Numer of unique field codes: ", num_fieldcodes) +paste0("Number of unique field codes: ", num_fieldcodes) +# Extract and print all unique well production types well_productions <- unique(well_prod_m_processed$well_type_name) paste0(well_productions) +# Filter wells with BTU of gas produced greater than 0, indicating production producing_wells <- well_prod_m_processed %>% filter(BTUofGasProduced > 0) + +# Calculate and print the percentage of each production status across all wells +percentage_production_status <- well_prod_m_processed %>% + count(ProductionStatus) %>% + mutate(Percentage = n / sum(n) * 100) + +# Calculate and print the total BTU of gas produced for each well +total_btu_per_well <- well_prod_m_processed %>% + group_by(api_ten_digit) %>% + summarise(TotalBTUofGasProduced = sum(BTUofGasProduced, na.rm = TRUE)) +print(total_btu_per_well) + +# Calculate the first production date for each well and ungroup +well_start_dates <- well_prod_m_processed %>% + filter(ProductionStatus == "Active") %>% + group_by(api_ten_digit) %>% + summarise(FirstProductionDate = min(ProductionReportDate, na.rm = TRUE)) %>% + ungroup() + +# Join the first production date back to the original dataset +well_prod_m_processed_updated <- well_prod_m_processed %>% + left_join(well_start_dates, by = "api_ten_digit") + +# Calculate the number of active years for each well +active_months_per_well <- well_prod_m_processed_updated %>% + filter(ProductionStatus == "Active") %>% + group_by(api_ten_digit) %>% + summarise(ActiveYears = n()/12) %>% + ungroup() + +# Join the active years data back to the dataset +processed <- well_prod_m_processed_updated %>% + left_join(active_months_per_well, by = "api_ten_digit") + +# Filter for wells with an active production status +processed_active <- processed %>% + filter(ProductionStatus == "Active") %>% + arrange(api_ten_digit, ProductionReportDate) %>% + group_by(api_ten_digit) %>% + mutate(MonthInProduction = row_number()) %>% # Assigns a sequential number to each active month + ungroup() + +# Calculate the last production date for each well +well_last_dates <- well_prod_m_processed %>% + filter(ProductionStatus == "Active") %>% + group_by(api_ten_digit) %>% + summarise(LastProductionDate = max(ProductionReportDate, na.rm = TRUE)) %>% + ungroup() + +# Join the last production date to the active wells dataset +processed_active <- processed_active %>% + left_join(well_last_dates, by = "api_ten_digit") + +# Group the processed_active data and calculate summary statistics +processed_active_grouped <- processed_active %>% + group_by(api_ten_digit) %>% + summarize( + TotalProduction = sum(BTUofGasProduced, na.rm = TRUE), + ActiveYears = ActiveYears, + FirstProductionDate = min(ProductionReportDate, na.rm = TRUE), # First production date + LastProductionDate = max(ProductionReportDate, na.rm = TRUE) # Last production date + ) %>% + distinct(api_ten_digit, .keep_all = TRUE) %>% + filter(TotalProduction > 0) + +# Plot histogram of well active years +active_years_plot <- ggplot(processed_active_grouped, aes(x = ActiveYears)) + + geom_histogram(binwidth = 1, fill = "blue", color = "black") + + labs(x = "Active Years", y = "Count of Wells", title = "Histogram of Well Active Years") + + theme_bw() + +# Calculate the number of active wells per month +active_wells_per_month <- processed_active %>% + group_by(month_year = floor_date(ProductionReportDate, "month")) %>% + summarise(ActiveWells = n_distinct(api_ten_digit)) %>% + ungroup() + +# Plot the number of active wells over time +ggplot(active_wells_per_month, aes(x = month_year, y = ActiveWells)) + + geom_line() + + geom_point() + + labs(x = "Month", y = "Number of Active Wells", title = "Active Wells Over Time") + + theme_minimal() + + theme(axis.text.x = element_text(angle = 45, hjust = 1)) + +### BTU ---------------------------------------- + +# Calculate the total BTU produced per month +total_production_per_month <- processed_active %>% + group_by(month_year = floor_date(ProductionReportDate, "month")) %>% + summarise(TotalBTUProduced = sum(BTUofGasProduced, na.rm = TRUE)) %>% + ungroup() + +# Plot the total BTU of gas produced over time +ggplot(total_production_per_month, aes(x = month_year, y = TotalBTUProduced)) + + geom_line(color = "blue") + + geom_point(color = "red") + + labs(x = "Month", y = "Total BTU of Gas Produced", title = "Total Gas Production Over Time") + + theme_minimal() + + theme(axis.text.x = element_text(angle = 45, hjust = 1)) + +### GAS ---------------------------------------- + +# Calculate and print the total Gas Produced for each well +total_gas_per_well <- well_prod_m_processed %>% + group_by(api_ten_digit) %>% + summarise(TotalGasProduced = sum(GasProduced, na.rm = TRUE)) +print(total_gas_per_well) + +# Calculate the total Gas Produced per month +total_gas_production_per_month <- processed_active %>% + group_by(month_year = floor_date(ProductionReportDate, "month")) %>% + summarise(TotalGasProduced = sum(GasProduced, na.rm = TRUE)) %>% + ungroup() + +# Make sure data is ordered +total_gas_production_per_year <- total_gas_production_per_month %>% + arrange(month_year) + +# Calculate the 1 year rolling average for TotalGasProduced +total_gas_production_per_year$TotalGasProducedRollingAvg <- rollmean(total_gas_production_per_year$TotalGasProduced, 12, fill = NA, align = 'right') + +# Plot the total Gas Produced over time with the 1 year rolling average +ggplot(total_gas_production_per_year, aes(x = month_year)) + + geom_line(aes(y = TotalGasProducedRollingAvg), color = "red", linetype = "solid") + + labs(x = "Month", y = "Total Gas Produced (units)", title = "Total Gas Production Over Time (One Year Rolling Average)") + + theme_bw() + + theme(axis.text.x = element_text(angle = 45, hjust = 1)) + + + + + + + + + + From 55021a9ad113dd88e0a1ddec80e17b17bc9b94fd Mon Sep 17 00:00:00 2001 From: Maxwell Patterson Date: Mon, 19 Feb 2024 05:24:37 +0000 Subject: [PATCH 17/19] updated create_ccs_scens --- .../data-processing-prep/create_ccs_scens.R | 29 ++++++++++--------- pred-model/eda.R | 4 +-- 2 files changed, 16 insertions(+), 17 deletions(-) diff --git a/energy/data-processing-prep/create_ccs_scens.R b/energy/data-processing-prep/create_ccs_scens.R index a07c7286..e76e66b9 100644 --- a/energy/data-processing-prep/create_ccs_scens.R +++ b/energy/data-processing-prep/create_ccs_scens.R @@ -2,6 +2,7 @@ ## October 22, 2021 ## add infinity price to ccs # revised: feb 16 2024 by Haejin +# Updated: 2/18/24 by Maxwell library(tidyverse) library(data.table) @@ -31,20 +32,20 @@ fwrite(ccs_ext_revised, file.path(file_path , "ccs_extraction_scenarios_revised. ## refining - load ccs scenarios -ccs_scens_ref = fread(file.path(scen_path, ccs_ref_file), header = T) - - -## ccs infinity -ccs_infin_r <- unique(ccs_scens_ref[, .(year, units)]) -ccs_infin_r[, ccs_scenario := "no ccs"] -ccs_infin_r[, ccs_price := Inf] - -setorder(ccs_infin_r, "year", "ccs_scenario", "ccs_price", "units") - -## bind -ccs_ref_revised <- rbind(ccs_scens_ref, ccs_infin_r) - -fwrite(ccs_ref_revised, file.path(file_path, "ccs_refining_scenarios_revised.csv")) # revised the file path +# ccs_scens_ref = fread(file.path(scen_path, ccs_ref_file), header = T) +# +# +# ## ccs infinity +# ccs_infin_r <- unique(ccs_scens_ref[, .(year, units)]) +# ccs_infin_r[, ccs_scenario := "no ccs"] +# ccs_infin_r[, ccs_price := Inf] +# +# setorder(ccs_infin_r, "year", "ccs_scenario", "ccs_price", "units") +# +# ## bind +# ccs_ref_revised <- rbind(ccs_scens_ref, ccs_infin_r) +# +# fwrite(ccs_ref_revised, file.path(file_path, "ccs_refining_scenarios_revised.csv")) # revised the file path diff --git a/pred-model/eda.R b/pred-model/eda.R index 08df4d75..d4493085 100644 --- a/pred-model/eda.R +++ b/pred-model/eda.R @@ -7,8 +7,6 @@ library(zoo) # Read in well processed data well_prod_m_processed <- read.csv("data/processed/well_prod_m_processed.csv") - - # Inspect the structure of the well_prod_m_processed dataset str(well_prod_m_processed) @@ -143,7 +141,7 @@ print(total_gas_per_well) # Calculate the total Gas Produced per month total_gas_production_per_month <- processed_active %>% group_by(month_year = floor_date(ProductionReportDate, "month")) %>% - summarise(TotalGasProduced = sum(GasProduced, na.rm = TRUE)) %>% + summarise(TotalProduced = sum(OilorCondensateProduced + GasProduced + WaterProduced, na.rm = TRUE)) %>% ungroup() # Make sure data is ordered From b9f039b682fd3fb2678b9c9f360fc455ed4863b2 Mon Sep 17 00:00:00 2001 From: mariamkg00 Date: Mon, 19 Feb 2024 22:52:38 +0000 Subject: [PATCH 18/19] making needed updates --- labor/processing/ica_multiplier_process.R | 54 +++++++++++++---------- 1 file changed, 30 insertions(+), 24 deletions(-) diff --git a/labor/processing/ica_multiplier_process.R b/labor/processing/ica_multiplier_process.R index 2938ea71..b208fe1c 100644 --- a/labor/processing/ica_multiplier_process.R +++ b/labor/processing/ica_multiplier_process.R @@ -2,6 +2,7 @@ # Chris Malloy (cmalloy@ucsb.edu) # created: 07/28/2021 # updated: 08/17/2021 +# updated : 02/19/2024 ############################################################################################ # Set up environment @@ -25,7 +26,7 @@ library("lubridate") library("writexl") library("tigris") library("sf") - +library(dplyr) #Set wd setwd('/capstone/freshcair/meds-freshcair-capstone') # Sets directory based on Taylor structure @@ -35,9 +36,11 @@ getwd() #Read in spreadsheet for FTE conversion + +# UPDATED - MG 2/19/2024 fte_convert <- read_xlsx('data/inputs/labor/fte-convert.xlsx')%>% - rename(fte_per_job = FTEperTotalEmp, ind_code = Implan546Index) %>% - select(ind_code,fte_per_job) + dplyr::rename(fte_per_job = FTEperTotalEmp, ind_code = Implan546Index) %>% + dplyr::select(ind_code,fte_per_job) #1. Import ICA files, clean up names, and add county & segment identifiers @@ -46,25 +49,28 @@ fte_convert <- read_xlsx('data/inputs/labor/fte-convert.xlsx')%>% ### NOTE: all multipliers are for $1 million of output value in an industry -# setwd(ica_dollar) +setwd('/capstone/freshcair/meds-freshcair-capstone/data/inputs/labor/ica') ### Kern #### extraction + +# UPDATED - MG - 2/19/2024 # UPDATE - not sure where ICA data is located ica_emp_ext_kern <- read_csv('ica-emp-ext-kern.csv') %>% - filter(is.na(X1)==F) %>% + filter(is.na(...1)==F) %>% mutate(county = "Kern", segment = "extraction") %>% - rename(industry = Impact) %>% - select(-X1,-X6) + dplyr::rename(industry = Impact) %>% + dplyr::select(-...1,-...6) + ica_comp_ext_kern <- read_csv('ica-va-ext-kern.csv',skip = 1) %>% - filter(is.na(X1)==F) %>% + filter(is.na(...1)==F) %>% mutate(county = "Kern", segment = "extraction") %>% - rename(industry = `Industry Display`, direct_comp = `Employee Compensation`, - direct_proprietor_income = `Proprietor Income`, direct_other_property_income = `Other Property Income`, - direct_taxes_prod_imports = `Taxes on Production & Imports`, direct_va = `Value Added`, + rename(industry = `Industry Display`, direct_comp = `Employee Compensation...3`, + direct_proprietor_income = `Proprietor Income...4`, direct_other_property_income = `Other Property Income...15`, + direct_taxes_prod_imports = `Taxes on Production & Imports...16`, direct_va = `Value Added...17`, indirect_comp = `Employee Compensation_1`, indirect_proprietor_income = `Proprietor Income_1`, indirect_other_property_income = `Other Property Income_1`, indirect_taxes_prod_imports = `Taxes on Production & Imports_1`, indirect_va = `Value Added_1`, @@ -83,21 +89,21 @@ ica_emp_drill_kern <- read_csv('ica-emp-drill-kern.csv') %>% rename(industry = Impact) %>% select(-X1,-X6) - +# UPDATED - MG - 2/19/2024 ica_comp_drill_kern <- read_csv('ica-va-drill-kern.csv',skip = 1) %>% - filter(is.na(X1)==F) %>% + filter(is.na(...1)==F) %>% mutate(county = "Kern", segment = "drilling") %>% - rename(industry = `Industry Display`, direct_comp = `Employee Compensation`, - direct_proprietor_income = `Proprietor Income`, direct_other_property_income = `Other Property Income`, - direct_taxes_prod_imports = `Taxes on Production & Imports`, direct_va = `Value Added`, - indirect_comp = `Employee Compensation_1`, - indirect_proprietor_income = `Proprietor Income_1`, indirect_other_property_income = `Other Property Income_1`, - indirect_taxes_prod_imports = `Taxes on Production & Imports_1`, indirect_va = `Value Added_1`, - induced_comp = `Employee Compensation_2`, - induced_proprietor_income = `Proprietor Income_2`, induced_other_property_income = `Other Property Income_2`, - induced_taxes_prod_imports = `Taxes on Production & Imports_2`, induced_va = `Value Added_2`) %>% - dplyr::select(-`Employee Compensation_3`, -`Proprietor Income_3`, -`Other Property Income_3`, - -`Taxes on Production & Imports_3`, -`Value Added_3`,-X1) + dplyr::rename(industry = `Industry Display`, direct_comp = `Employee Compensation...3`, + direct_proprietor_income = `Proprietor Income...4`, direct_other_property_income = `Other Property Income...5`, + direct_taxes_prod_imports = `Taxes on Production & Imports...6`, direct_va = `Value Added...7`, + indirect_comp = `Employee Compensation...8`, + indirect_proprietor_income = `Proprietor Income...9`, indirect_other_property_income = `Other Property Income...10`, + indirect_taxes_prod_imports = `Taxes on Production & Imports...11`, indirect_va = `Value Added...12`, + induced_comp = `Employee Compensation...13`, + induced_proprietor_income = `Proprietor Income...14`, induced_other_property_income = `Other Property Income...15`, + induced_taxes_prod_imports = `Taxes on Production & Imports...16`, induced_va = `Value Added...17`) %>% + dplyr::select(-`Employee Compensation...18`, -`Proprietor Income...19`, -`Other Property Income...20`, + -`Taxes on Production & Imports...21`, -`Value Added...22`,-...1) From 3febce617f2ad22c9651bc6f388f3d22a9e97cb1 Mon Sep 17 00:00:00 2001 From: Maxwell Patterson Date: Mon, 19 Feb 2024 23:00:22 +0000 Subject: [PATCH 19/19] maxwell testing issue --- energy/data-processing-prep/stocks_flows.R | 277 +++++++++++---------- labor/processing/ica_multiplier_process.R | 11 +- 2 files changed, 146 insertions(+), 142 deletions(-) diff --git a/energy/data-processing-prep/stocks_flows.R b/energy/data-processing-prep/stocks_flows.R index 9845e7a9..8e2ac5a6 100644 --- a/energy/data-processing-prep/stocks_flows.R +++ b/energy/data-processing-prep/stocks_flows.R @@ -1,11 +1,14 @@ ## Tracey Mangin ## February 20, 2020 ## Data cleaning: Focus areas 1 and 2 +# Updated 2/19/24 - MP -## set directory -data_directory <- "/Volumes/GoogleDrive/Shared\ drives/emlab/projects/current-projects/calepa-cn/data/stocks-flows/" -save_directory <- "/Volumes/GoogleDrive/Shared\ drives/emlab/projects/current-projects/calepa-cn/project-materials/focus-areas-1-2/" +# +setwd(dirname(rstudioapi::getActiveDocumentContext()$path)) +setwd('/capstone/freshcair/meds-freshcair-capstone') # Sets directory based on Taylor structure +getwd() + ## attach libraries @@ -22,150 +25,150 @@ library(scales) library(openxlsx) -## Crude imports to CA ports by export country -## --------------------------------------------------------------------------------------- - -## read in data -port_imports <- read_csv(paste0(data_directory, "raw/Imports_of_Heavy_Sour_to_Los_Angeles_CA.csv"), skip = 4) ## first four rows mess up data -port_imports <- clean_names(port_imports) - -## get info from raw data -port_imports_info <- read_csv(paste0(data_directory, "raw/Imports_of_Heavy_Sour_to_Los_Angeles_CA.csv")) -port_imports_info <- port_imports_info[1:3, 1] -colnames(port_imports_info) <- c("info") - -## break out information -oiltype <- c("Heavy Sweet", "Light Sour", "Light Sweet", "Medium", "Heavy Sour") - -port_imports_clean <- port_imports %>% - rename(cats = span_style_float_right_thousand_barrels_span) %>% - mutate(export_region = countrycode(cats, 'country.name', 'country.name'), - export_region = ifelse(cats == "World", "World", export_region), - port = str_detect(cats, pattern = ", CA" %R% END), - port = ifelse(port == TRUE, cats, NA), - oil = ifelse(cats %in% oiltype, cats, NA)) %>% - select(cats, export_region, port, oil, jan_2009:nov_2019) %>% - fill(export_region, .direction = 'down') %>% - fill(port, .direction = 'down') %>% - select(-cats) %>% - filter(!is.na(oil)) %>% - pivot_longer(jan_2009:nov_2019, names_to = "date", values_to = "barrels_thous") %>% - mutate(barrels_thous = as.numeric(ifelse(barrels_thous == "--", 0, barrels_thous)), - month_orig = str_extract(date, pattern = ANY_CHAR %R% ANY_CHAR %R% ANY_CHAR), - month2 = paste0(toupper(substr(month_orig, 1, 1)), substr(month_orig, 2, nchar(month_orig))), - month = match(month2, month.abb), - year = as.numeric(str_extract(date, pattern = DIGIT %R% DIGIT %R% DIGIT %R% DIGIT))) %>% - select(-month_orig, -month2) %>% - mutate(source = port_imports_info$info[3], - link = port_imports_info$info[1], - download_date = port_imports_info$info[2]) %>% - mutate(region_type = ifelse(export_region == "World", "world", "country")) %>% - select(export_region, region_type, port:download_date) - -## save clean file -write_csv(port_imports_clean, path = paste0(data_directory, "processed/crude_imports_port.csv")) - - -## WTI monthly prices of crude +## Crude imports to CA ports by export country -- NOT NEEDED IN UPDATED MODEL - MP ## --------------------------------------------------------------------------------------- - -## read in data -spt_price_m <- read_xls(paste0(data_directory, "raw/PET_PRI_SPT_S1_M.xls"), sheet = 2, skip = 2) -colnames(spt_price_m) <- c("date", "cushing_ok_wti_FOB", "europe_brent_FOB") - -spt_price_m2 <- spt_price_m %>% - pivot_longer(cushing_ok_wti_FOB:europe_brent_FOB, names_to = "price", values_to = "value") %>% - mutate(unit = "dollars_per_barrel", - description = ifelse(price == "cushing_ok_wti_FOB", "Cushing, OK WTI Spot Price FOB", "Europe Brent Spot Price FOB"), - product = "crude_oil") %>% - select(date, description, product, price, value, unit) %>% - mutate(source = "EIA", - url = "https://www.eia.gov/dnav/pet/pet_pri_spt_s1_m.htm") - -## save clean file -write_csv(spt_price_m2, path = paste0(data_directory, "processed/spot_price_wti_m.csv")) - -## WTI annual prices of crude -## --------------------------------------------------------------------------------------- - -## read in data -spt_price_a <- read_xls(paste0(data_directory, "raw/PET_PRI_SPT_S1_A.xls"), sheet = 2, skip = 2) -colnames(spt_price_a) <- c("date", "cushing_ok_wti_FOB", "europe_brent_FOB") - -spt_price_a2 <- spt_price_a %>% - pivot_longer(cushing_ok_wti_FOB:europe_brent_FOB, names_to = "price", values_to = "value") %>% - mutate(unit = "dollars_per_barrel", - description = ifelse(price == "cushing_ok_wti_FOB", "Cushing, OK WTI Spot Price FOB", "Europe Brent Spot Price FOB"), - product = "crude_oil") %>% - select(date, description, product, price, value, unit) %>% - mutate(source = "EIA", - url = "https://www.eia.gov/dnav/pet/pet_pri_spt_s1_a.htm") - -## save clean file -write_csv(spt_price_a2, file = paste0(data_directory, "processed/eia_spot_price_a.csv")) - -## Domestic Crude Oil First Purchase Prices for Selected Crude Streams -## --------------------------------------------------------------------------------------- - -## read in data -firstp_p_streams <- read_xls(paste0(data_directory, "raw/PET_PRI_DFP2_K_M.xls"), sheet = 2, skip = 2) -colnames(firstp_p_streams) <- c("date", "ak_ns", "ca_kr", "ca_ms", "hls", "lls", "mb", "wti", "wts", "ws") - -firstp_p_streams2 <- firstp_p_streams %>% - pivot_longer(ak_ns:ws, names_to = "crude_stream", values_to = "price") %>% - mutate(unit = "dollars_per_barrel", - description = ifelse(crude_stream == "ak_ns", "Alaska North Slope First Purchase Price", - ifelse(crude_stream == "ca_kr", "California Kern River First Purchase Price", - ifelse(crude_stream == "ca_ms", "California Midway-Sunset First Purchase Price", - ifelse(crude_stream == "hls", "Heavy Louisiana Sweet First Purchase Price", - ifelse(crude_stream == "lls", "Light Louisiana Sweet First Purchase Price", - ifelse(crude_stream == "mb", "Mars Blend First Purchase Price", - ifelse(crude_stream == "wti", "West Texas Intermediate First Purchase Price", - ifelse(crude_stream == "wts", "West Texas Sour First Purchase Price", "Wyoming Sweet First Purchase Price")))))))), - product = "crude_oil") %>% - select(date, description, product, crude_stream, price, unit) %>% - mutate(source = "EIA", - url = "https://www.eia.gov/dnav/pet/pet_pri_dfp2_k_m.htm") - -## save clean file -write_csv(firstp_p_streams2, path = paste0(data_directory, "processed/domestic_crude_first_p_price_streams.csv")) +# +# ## read in data +# port_imports <- read_csv(paste0(data_directory, "raw/Imports_of_Heavy_Sour_to_Los_Angeles_CA.csv"), skip = 4) ## first four rows mess up data +# port_imports <- clean_names(port_imports) +# +# ## get info from raw data +# port_imports_info <- read_csv(paste0(data_directory, "raw/Imports_of_Heavy_Sour_to_Los_Angeles_CA.csv")) +# port_imports_info <- port_imports_info[1:3, 1] +# colnames(port_imports_info) <- c("info") +# +# ## break out information +# oiltype <- c("Heavy Sweet", "Light Sour", "Light Sweet", "Medium", "Heavy Sour") +# +# port_imports_clean <- port_imports %>% +# rename(cats = span_style_float_right_thousand_barrels_span) %>% +# mutate(export_region = countrycode(cats, 'country.name', 'country.name'), +# export_region = ifelse(cats == "World", "World", export_region), +# port = str_detect(cats, pattern = ", CA" %R% END), +# port = ifelse(port == TRUE, cats, NA), +# oil = ifelse(cats %in% oiltype, cats, NA)) %>% +# select(cats, export_region, port, oil, jan_2009:nov_2019) %>% +# fill(export_region, .direction = 'down') %>% +# fill(port, .direction = 'down') %>% +# select(-cats) %>% +# filter(!is.na(oil)) %>% +# pivot_longer(jan_2009:nov_2019, names_to = "date", values_to = "barrels_thous") %>% +# mutate(barrels_thous = as.numeric(ifelse(barrels_thous == "--", 0, barrels_thous)), +# month_orig = str_extract(date, pattern = ANY_CHAR %R% ANY_CHAR %R% ANY_CHAR), +# month2 = paste0(toupper(substr(month_orig, 1, 1)), substr(month_orig, 2, nchar(month_orig))), +# month = match(month2, month.abb), +# year = as.numeric(str_extract(date, pattern = DIGIT %R% DIGIT %R% DIGIT %R% DIGIT))) %>% +# select(-month_orig, -month2) %>% +# mutate(source = port_imports_info$info[3], +# link = port_imports_info$info[1], +# download_date = port_imports_info$info[2]) %>% +# mutate(region_type = ifelse(export_region == "World", "world", "country")) %>% +# select(export_region, region_type, port:download_date) +# +# ## save clean file +# write_csv(port_imports_clean, path = paste0(data_directory, "processed/crude_imports_port.csv")) -## Crude oil productoin in California -## --------------------------------------------------------------------------------------- - -## read in data -crude_prod_ca <- read_xls(paste0(data_directory, "raw/MCRFPCA1m.xls"), sheet = 2, skip = 2) -colnames(crude_prod_ca) <- c("date", "crude_prod_ca_thous_b") +# ## WTI monthly prices of crude -- NOT NEEDED IN UPDATED MODEL - MP +# ## --------------------------------------------------------------------------------------- +# +# ## read in data +# spt_price_m <- read_xls(paste0(data_directory, "raw/PET_PRI_SPT_S1_M.xls"), sheet = 2, skip = 2) +# colnames(spt_price_m) <- c("date", "cushing_ok_wti_FOB", "europe_brent_FOB") +# +# spt_price_m2 <- spt_price_m %>% +# pivot_longer(cushing_ok_wti_FOB:europe_brent_FOB, names_to = "price", values_to = "value") %>% +# mutate(unit = "dollars_per_barrel", +# description = ifelse(price == "cushing_ok_wti_FOB", "Cushing, OK WTI Spot Price FOB", "Europe Brent Spot Price FOB"), +# product = "crude_oil") %>% +# select(date, description, product, price, value, unit) %>% +# mutate(source = "EIA", +# url = "https://www.eia.gov/dnav/pet/pet_pri_spt_s1_m.htm") +# +# ## save clean file +# write_csv(spt_price_m2, path = paste0(data_directory, "processed/spot_price_wti_m.csv")) -crude_prod_ca2 <- crude_prod_ca %>% - mutate(description = "California Field Production of Crude Oil", - source = "EIA", - url = "https://www.eia.gov/dnav/pet/hist/LeafHandler.ashx?n=pet&s=mcrfpca1&f=m") +# ## WTI annual prices of crude - NOT NEEDED FOR UPDATED MODEL - MP +# ## --------------------------------------------------------------------------------------- +# +# ## read in data +# spt_price_a <- read_xls(paste0(data_directory, "raw/PET_PRI_SPT_S1_A.xls"), sheet = 2, skip = 2) +# colnames(spt_price_a) <- c("date", "cushing_ok_wti_FOB", "europe_brent_FOB") +# +# spt_price_a2 <- spt_price_a %>% +# pivot_longer(cushing_ok_wti_FOB:europe_brent_FOB, names_to = "price", values_to = "value") %>% +# mutate(unit = "dollars_per_barrel", +# description = ifelse(price == "cushing_ok_wti_FOB", "Cushing, OK WTI Spot Price FOB", "Europe Brent Spot Price FOB"), +# product = "crude_oil") %>% +# select(date, description, product, price, value, unit) %>% +# mutate(source = "EIA", +# url = "https://www.eia.gov/dnav/pet/pet_pri_spt_s1_a.htm") +# +# ## save clean file +# write_csv(spt_price_a2, file = paste0(data_directory, "processed/eia_spot_price_a.csv")) -## save clean file -write_csv(crude_prod_ca2, path = paste0(data_directory, "processed/ca_crude_prod_m.csv")) +# ## Domestic Crude Oil First Purchase Prices for Selected Crude Streams - NOT NEEDED FOR UPDATED MODEL - MP +# ## --------------------------------------------------------------------------------------- +# +# ## read in data +# firstp_p_streams <- read_xls(paste0(data_directory, "raw/PET_PRI_DFP2_K_M.xls"), sheet = 2, skip = 2) +# colnames(firstp_p_streams) <- c("date", "ak_ns", "ca_kr", "ca_ms", "hls", "lls", "mb", "wti", "wts", "ws") +# +# firstp_p_streams2 <- firstp_p_streams %>% +# pivot_longer(ak_ns:ws, names_to = "crude_stream", values_to = "price") %>% +# mutate(unit = "dollars_per_barrel", +# description = ifelse(crude_stream == "ak_ns", "Alaska North Slope First Purchase Price", +# ifelse(crude_stream == "ca_kr", "California Kern River First Purchase Price", +# ifelse(crude_stream == "ca_ms", "California Midway-Sunset First Purchase Price", +# ifelse(crude_stream == "hls", "Heavy Louisiana Sweet First Purchase Price", +# ifelse(crude_stream == "lls", "Light Louisiana Sweet First Purchase Price", +# ifelse(crude_stream == "mb", "Mars Blend First Purchase Price", +# ifelse(crude_stream == "wti", "West Texas Intermediate First Purchase Price", +# ifelse(crude_stream == "wts", "West Texas Sour First Purchase Price", "Wyoming Sweet First Purchase Price")))))))), +# product = "crude_oil") %>% +# select(date, description, product, crude_stream, price, unit) %>% +# mutate(source = "EIA", +# url = "https://www.eia.gov/dnav/pet/pet_pri_dfp2_k_m.htm") +# +# ## save clean file +# write_csv(firstp_p_streams2, path = paste0(data_directory, "processed/domestic_crude_first_p_price_streams.csv")) -## Emissions by Facility -## --------------------------------------------------------------------------------------- -emissions_fac <- read_csv(paste0(data_directory, "raw/EmissionsByFacility.csv")) -emissions_fac <- clean_names(emissions_fac) -# ## how many refineries in 2017? -# refin_2017 <- emissions_fac %>% -# filter(year == 2017, -# naics_code == 324110) +# ## Crude oil production in California -- NOT NEEDED FOR FINAL MODEL +# ## --------------------------------------------------------------------------------------- +# +# ## read in data +# crude_prod_ca <- read_xls(paste0(data_directory, "raw/MCRFPCA1m.xls"), sheet = 2, skip = 2) +# colnames(crude_prod_ca) <- c("date", "crude_prod_ca_thous_b") # -# refin_2014 <- emissions_fac %>% -# filter(year == 2014, -# naics_code == 324110) +# crude_prod_ca2 <- crude_prod_ca %>% +# mutate(description = "California Field Production of Crude Oil", +# source = "EIA", +# url = "https://www.eia.gov/dnav/pet/hist/LeafHandler.ashx?n=pet&s=mcrfpca1&f=m") # -# refin_2013 <- emissions_fac %>% -# filter(year == 2013, -# naics_code == 324110) +# ## save clean file +# write_csv(crude_prod_ca2, path = paste0(data_directory, "processed/ca_crude_prod_m.csv")) -## save clean file -write_csv(emissions_fac, path = paste0(data_directory, "processed/emissions_by_facility.csv")) +# ## Emissions by Facility - NOT NEEDED FOR UPDATED MODEL +# ## --------------------------------------------------------------------------------------- +# emissions_fac <- read_csv(paste0(data_directory, "raw/EmissionsByFacility.csv")) +# emissions_fac <- clean_names(emissions_fac) +# +# # ## how many refineries in 2017? +# # refin_2017 <- emissions_fac %>% +# # filter(year == 2017, +# # naics_code == 324110) +# # +# # refin_2014 <- emissions_fac %>% +# # filter(year == 2014, +# # naics_code == 324110) +# # +# # refin_2013 <- emissions_fac %>% +# # filter(year == 2013, +# # naics_code == 324110) +# +# ## save clean file +# write_csv(emissions_fac, path = paste0(data_directory, "processed/emissions_by_facility.csv")) ## oil and gas production by county ## --------------------------------------------------------------------------------------- diff --git a/labor/processing/ica_multiplier_process.R b/labor/processing/ica_multiplier_process.R index b208fe1c..d3992766 100644 --- a/labor/processing/ica_multiplier_process.R +++ b/labor/processing/ica_multiplier_process.R @@ -106,18 +106,19 @@ ica_comp_drill_kern <- read_csv('ica-va-drill-kern.csv',skip = 1) %>% -`Taxes on Production & Imports...21`, -`Value Added...22`,-...1) +# UPDATED - MG - 2/19/2024 #### refining ica_emp_ref_kern <- read_csv('ica-emp-ref-kern.csv') %>% - filter(is.na(X1)==F) %>% + filter(is.na(...1)==F) %>% mutate(county = "Kern", segment = "refining") %>% - rename(industry = Impact) %>% - select(-X1,-X6) - + dplyr::rename(industry = Impact) %>% + dplyr::select(-...1,-...6) +# UPDATED - MG - 2/19/2024 ica_comp_ref_kern <- read_csv('ica-va-ref-kern.csv',skip = 1) %>% - filter(is.na(X1)==F) %>% + filter(is.na(...1)==F) %>% mutate(county = "Kern", segment = "refining") %>% rename(industry = `Industry Display`, direct_comp = `Employee Compensation`, direct_proprietor_income = `Proprietor Income`, direct_other_property_income = `Other Property Income`,