From 7652dd95aaba6017718af61ffdae26089114b3cf Mon Sep 17 00:00:00 2001
From: Benjamin Blanz <rganb@gmx.de>
Date: Tue, 20 Aug 2024 16:21:29 +0200
Subject: [PATCH] Added GRACE sector mapping

---
 scenarioProcessing/a1ProcessScenarioData.R    |   1 +
 scenarioProcessing/funAggregateNuts2CNT.R     |   2 +-
 scenarioProcessing/funRelData.R               |   2 +-
 .../helperData/GTAP_NACE_sector_mapping.xlsx  | Bin 12966 -> 12971 bytes
 scenarioProcessing/relativizeShocks.R         |   9 +++-
 scenarioProcessing/sectorMappingNACE2GRACE.R  |  46 ++++++++++++++++++
 scenarioProcessing/sectorMappingNACE2GTAP.R   |  44 +++++++++++++++++
 scenarioProcessing/stockAggregation.R         |   2 +-
 8 files changed, 101 insertions(+), 5 deletions(-)
 create mode 100644 scenarioProcessing/sectorMappingNACE2GRACE.R
 create mode 100644 scenarioProcessing/sectorMappingNACE2GTAP.R

diff --git a/scenarioProcessing/a1ProcessScenarioData.R b/scenarioProcessing/a1ProcessScenarioData.R
index 928275c..f1ca398 100644
--- a/scenarioProcessing/a1ProcessScenarioData.R
+++ b/scenarioProcessing/a1ProcessScenarioData.R
@@ -6,5 +6,6 @@
 
 source('stockAggregation.R')
 source('sectorMappingNACE2GTAP.R')
+source('sectorMappingNACE2GRACE.R')
 source('aggregateShocks.R')
 source('relativizeShocks.R')
diff --git a/scenarioProcessing/funAggregateNuts2CNT.R b/scenarioProcessing/funAggregateNuts2CNT.R
index da9f1ee..4e6f158 100644
--- a/scenarioProcessing/funAggregateNuts2CNT.R
+++ b/scenarioProcessing/funAggregateNuts2CNT.R
@@ -9,7 +9,7 @@
 #   aggregated data
 #   
 aggregateNUTS3ToCountry <- function(data,codes){
-	sectorColPattern <- 'ALL|TOTAL|^[A-Z]$|AGR|MIN|MFG|EGW|CNS|TRD|OTP|WTP|CMN|OFI|OBS|REA|PUB|OSG'
+	sectorColPattern <- 'ALL|TOTAL|^[A-Z]$|AGR|MIN|MFG|EGW|CNS|TRD|OTP|WTP|CMN|OFI|OBS|REA|PUB|OSG|agr|coa.oil.gas|pro|ely.elc|ser|air.wtp.tran'
 	# identify columns with data rather than identifiers
 	sectorCols <- grep(sectorColPattern,names(data),perl = T)
 	# convert data to numeric (deals with in import error)
diff --git a/scenarioProcessing/funRelData.R b/scenarioProcessing/funRelData.R
index 981c275..2e4fad7 100644
--- a/scenarioProcessing/funRelData.R
+++ b/scenarioProcessing/funRelData.R
@@ -17,7 +17,7 @@
 # Benjamin Blanz 2024
 #
 relData <- function(data,stocksNUTS3=NULL,stocksCNT=NULL){
-	sectorColPattern <- 'ALL|TOTAL|^[A-Z]$|AGR|MIN|MFG|EGW|CNS|TRD|OTP|WTP|CMN|OFI|OBS|REA|PUB|OSG'
+	sectorColPattern <- 'ALL|TOTAL|^[A-Z]$|AGR|MIN|MFG|EGW|CNS|TRD|OTP|WTP|CMN|OFI|OBS|REA|PUB|OSG|agr|coa.oil.gas|pro|ely.elc|ser|air.wtp.tran'
 	# Ensure the Total clumn is called TOTAL, not ALL as in some scenarios
 	names(data)[names(data)=='ALL'] <- 'TOTAL'
 	names(stocksNUTS3)[names(stocksNUTS3)=='ALL'] <- 'TOTAL'
diff --git a/scenarioProcessing/helperData/GTAP_NACE_sector_mapping.xlsx b/scenarioProcessing/helperData/GTAP_NACE_sector_mapping.xlsx
index d2160144f58b37fd0c309d8698b79a23b824b104..4ffdf2403eb2202ca5d820a8682e26c7ae092fbc 100644
GIT binary patch
delta 4427
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
G&;S6ui@o9i

delta 4342
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

diff --git a/scenarioProcessing/relativizeShocks.R b/scenarioProcessing/relativizeShocks.R
index e012ebd..d587eed 100644
--- a/scenarioProcessing/relativizeShocks.R
+++ b/scenarioProcessing/relativizeShocks.R
@@ -8,9 +8,11 @@
 source('funRelData.R')
 
 nuts3LevelStocksNACE <- read.csv("helperData/nuts3LevelStocksNACE.csv", row.names=NULL)
-nuts3LevelStocksGTAP <- read.csv("helperData/nuts3LevelStocksGTAP.csv", row.names=NULL)
 countryLevelStocksNACE <- read.csv("helperData/countryLevelStocksNACE.csv", row.names=NULL)
+nuts3LevelStocksGTAP <- read.csv("helperData/nuts3LevelStocksGTAP.csv", row.names=NULL)
 countryLevelStocksGTAP <- read.csv("helperData/countryLevelStocksGTAP.csv", row.names=NULL)
+nuts3LevelStocksGRACE <- read.csv("helperData/nuts3LevelStocksGRACE.csv", row.names=NULL)
+countryLevelStocksGRACE <- read.csv("helperData/countryLevelStocksGRACE.csv", row.names=NULL)
 
 
 files <- list.files('scenarios',pattern = 'csv',recursive = T)
@@ -23,7 +25,10 @@ for(f.i in 1:length(files)){
 	if(grepl('GTAP',file)){
 		data.rel <- relData(data,nuts3LevelStocksGTAP,countryLevelStocksGTAP)
 		write.csv(data.rel,gsub('.csv','-rel.csv',file),row.names = F)
-	}else{
+	} else if (grepl('GRACE',file)) {
+		data.rel <- relData(data,nuts3LevelStocksGRACE,countryLevelStocksGRACE)
+		write.csv(data.rel,gsub('.csv','-rel.csv',file),row.names = F)
+	} else {
 		data.rel <- relData(data,nuts3LevelStocksNACE,countryLevelStocksNACE)
 		write.csv(data.rel,gsub('.csv','-rel.csv',file),row.names = F)
 	}
diff --git a/scenarioProcessing/sectorMappingNACE2GRACE.R b/scenarioProcessing/sectorMappingNACE2GRACE.R
new file mode 100644
index 0000000..dc4b022
--- /dev/null
+++ b/scenarioProcessing/sectorMappingNACE2GRACE.R
@@ -0,0 +1,46 @@
+# 
+# This script will map the NACE sectorsin the original 
+# secnarios to the GRACE sectors.
+# Uses the mapping provided by Lin Ma.
+# 
+# Benjamin Blanz 2024
+# 
+
+library(readxl)
+sector_mapping <- read_excel("helperData/GTAP_NACE_sector_mapping.xlsx")
+sectorColPattern <- 'ALL|TOTAL|^[A-Z]$|AGR|MIN|MFG|EGW|CNS|TRD|OTP|WTP|CMN|OFI|OBS|REA|PUB|OSG|agr|coa.oil.gas|pro|ely.elc|ser|air.wtp.tran'
+
+# NACE files for which we will map the sectors to GRACE
+files <- list.files('scenarios',pattern = 'NACE.csv',recursive = T)
+files <- paste0('scenarios/',files)
+files[length(files)+1] <- 'helperData/countryLevelStocksNACE.csv'
+files[length(files)+1] <- 'helperData/nuts3LevelStocksNACE.csv'
+
+# Mapping of sectors
+for (file in files){
+	cat(sprintf('GRACEifying %s...',file))
+	data <- read.csv(file)
+	names(data)[names(data)=='ALL'] <- 'TOTAL'
+	dataCols <- grep(sectorColPattern,names(data),perl = T)
+	for( i in dataCols){
+		data[,i] <- suppressWarnings(as.numeric(data[,i]))
+	}
+	data[is.na(data)] <- 0
+	dataGRACE <- data
+	dataGRACE[,dataCols] <- NULL
+	GRACEcodes <- unique(sector_mapping$`GRACE Code`)
+	for(GRACEcode in GRACEcodes){
+		dataGRACE[[GRACEcode]] <- NA
+		rows <- which(sector_mapping$`GRACE Code` == GRACEcode)
+		NACEcodes <- strsplit(paste(sector_mapping$`NACE Code`[rows],collapse = '.'),'\\.')[[1]]
+		if(sum(NACEcodes %in% colnames(data))==length(NACEcodes)){
+			if(length(NACEcodes)>1){
+				dataGRACE[[GRACEcode]] <- rowSums(data[,NACEcodes])
+			} else {
+				dataGRACE[[GRACEcode]] <- data[,NACEcodes]
+			}
+		}
+	}
+	write.csv(dataGRACE,gsub('NACE.csv','GRACE.csv',file),row.names = F)
+	cat('done\n')
+}
diff --git a/scenarioProcessing/sectorMappingNACE2GTAP.R b/scenarioProcessing/sectorMappingNACE2GTAP.R
new file mode 100644
index 0000000..b8c24a2
--- /dev/null
+++ b/scenarioProcessing/sectorMappingNACE2GTAP.R
@@ -0,0 +1,44 @@
+# 
+# This script will map the NACE sectors in the original secnarios to the GTAP sectors.
+# Uses the mapping provided by Lin Ma.
+# 
+# Benjamin Blanz 2024
+# 
+
+library(readxl)
+GTAP_NACE_sector_mapping <- read_excel("helperData/GTAP_NACE_sector_mapping.xlsx")
+
+# files for which we will map the sectors to GTAP
+files <- list.files('scenarios',pattern = 'NACE.csv',recursive = T)
+files <- paste0('scenarios/',files)
+files[length(files)+1] <- 'helperData/countryLevelStocksNACE.csv'
+files[length(files)+1] <- 'helperData/nuts3LevelStocksNACE.csv'
+
+# Mapping of sectors
+for (file in files){
+	cat(sprintf('GTAPifying %s...',file))
+	data <- read.csv(file)
+	names(data)[names(data)=='ALL'] <- 'TOTAL'
+	dataCols <- grep('ALL|TOTAL|^[A-Z]$',names(data),perl = T)
+	for( i in dataCols){
+		data[,i] <- suppressWarnings(as.numeric(data[,i]))
+	}
+	data[is.na(data)] <- 0
+	dataGTAP <- data
+	dataGTAP[,dataCols] <- NULL
+	for( GTAPcode.i in 1:nrow(GTAP_NACE_sector_mapping)){
+		dataGTAP[[GTAP_NACE_sector_mapping$`GTAP Code`[GTAPcode.i]]] <- NA
+		NACEcode <- GTAP_NACE_sector_mapping$`NACE Code`[GTAPcode.i]
+		NACEcodes <- strsplit(NACEcode,'\\.')[[1]]
+		if(sum(NACEcodes %in% colnames(data))==length(NACEcodes))
+			if(length(NACEcodes)>1){
+				dataGTAP[[GTAP_NACE_sector_mapping$`GTAP Code`[GTAPcode.i]]] <- 
+					rowSums(data[,NACEcodes])
+			} else {
+				dataGTAP[[GTAP_NACE_sector_mapping$`GTAP Code`[GTAPcode.i]]] <- 
+					data[,NACEcodes]
+			}
+	}
+	write.csv(dataGTAP,gsub('NACE.csv','GTAP.csv',file),row.names = F)
+	cat('done\n')
+}
diff --git a/scenarioProcessing/stockAggregation.R b/scenarioProcessing/stockAggregation.R
index 37e4a4e..5d17b7b 100644
--- a/scenarioProcessing/stockAggregation.R
+++ b/scenarioProcessing/stockAggregation.R
@@ -7,7 +7,7 @@
 # Benjamin Blanz 2024
 # 
 
-sectorColPattern <- 'ALL|TOTAL|^[A-Z]$|AGR|MIN|MFG|EGW|CNS|TRD|OTP|WTP|CMN|OFI|OBS|REA|PUB|OSG'
+sectorColPattern <- 'ALL|TOTAL|^[A-Z]$|AGR|MIN|MFG|EGW|CNS|TRD|OTP|WTP|CMN|OFI|OBS|REA|PUB|OSG|agr|coa-oil-gas|pro|ely-elc|ser|air-wtp-tran'
 
 # read scenario file with NUTS3 data ####
 library(readxl)
-- 
GitLab